Each type of filesystem has its own set of rules for controlling the allocation of disk space to files and for associating data about each file (referred to as metadata) with that file, such as its name, the directory in which it is located, its access permissions and its creation date.

.

Minix filesystem

1) The earliest versions of Linux used the Minix filesystem, which was developed by Professor Andrew S. Tanenbaum for use in his MINIX operating system, a small clone of UNIX that was intended only for computer science education purposes.

2) Although mostly free of bugs, it suffered from a small maximum partition size of 64 megabytes and a file name length limit of 14 characters.

.

The extended file system, also called Ext

1) Was released in April 1992 and was included in the Linux kernel (i.e, core of the operating system) version 0.96c.

2) It overcame the main Minix limitations by allowing a huge increase in maximum partition size to two gigabytes and file names of up to 255 characters

3) However, ext still had problems: in particular, it lacked support for separate access for each user and group, and it also lacked timestamps for modifications to inodes and to data. An inode is a data structure on a filesystem on Unix-like operating systems that stores all of a file’s metadata except its name.

4) Another problem was that the linked lists data structure ext used to track free blocks and inodes gradually became unsorted as the filesystem was used, thus causing the filesystem to become fragmented (i.e., parts of files widely dispersed rather than in contiguous blocks).

.

Ext2 filesystems

1) Ext2 was initially designed by Rémy Card, a French software developer, based on ext but incorporating many ideas from the Berkeley Fast File System and with extensibility in mind.

2) Ext2 features (1) improved algorithms that greatly increase its speed, (2) additional timestamps (such as date of last access and date of last inode modification), (3) the ability to track the state of the filesystem and (4) support for a maximum file size of 4TB (one terabyte equals 1024 gigabytes).

3) It maintains a special field in the superblock that indicates the status of the filesystem as either clean or dirty; the latter will trigger a utility to scan the filesystem for errors. As a result of these improvements, ext2 has completely superseded ext.

4) Ext2 is designed so that data is held in blocks of equal size on the HDD or other storage medium, although blocks can be different sizes on different partitions, different HDDs, etc. The size is set when the filesystem is created by the mke2fs program. The disadvantage of this approach is that an average of half of the block size is wasted for each file. For example, with a a block size of 1024 bytes, each 1025 byte file would require two blocks.

.

Ext3 filesystems

1) Ext3 has been integrated into the Linux kernel since version 2.4.16 and has become the default filesystem on Red Hat and some other distributions. It is basically an extension of ext2 to which a journaling capability has been added, and it provides the same high degree of reliability because of the exhaustively field-proven nature of its underlying ext2.

2) Also featured is the ability for ext2 partitions to be converted to ext3 and vice-versa without any need for backing up the data and repartitioning. If necessary, an ext3 partition can even be mounted by an older kernel that has no ext3 support; this is because it would be seen as just another normal ext2 partition and the journal would be ignored.

The ext3 file system adds, over its predecessor:

  • A Journaling file system
  • Online file system growth
  • htree indexing for larger directories (specialized version of a B-tree — not to be confused with H tree)

.

ReiserFS

1) ReiserFS, developed by Hans Reiser and others, was actually the first journaling filesystem added to the Linux kernel. As was the case with ext2, it was designed from the ground up for use in Linux.

2) However, unlike ext3, it was also designed from the ground up as a journaling filesystem rather than as an add-on to an existing filesystem, and thus it is widely considered to be the most advanced of the native Linux journaling filesystems.

3) Features include high speed, excellent stability and the ability to pack small files into less disk space than is possible with many other filesystems.

4) A new version of ReiserFS, designated Reiser4, was scheduled for release in the first half of 2004. It is a complete rewrite from version 3 and is said to result in major improvements in performance, including higher speeds, the ability to accommodate more CPUs, built-in encryption and ease of customization.

.

JFS

1) JFS was originally developed by IBM in the mid-1990s for its AIX Unix operating system, and it was later ported to the company’s OS/2 operating system. IBM subsequently changed the licensing of the OS/2 implementation to open source, which led to its support on Linux.

2) JFS is currently used primarily on IBM enterprise servers, and it is also a good choice for systems that multiboot Linux and OS/2.

3) JFS provides fast file system restart in the event of a system crash. Using database journaling techniques, JFS can restore a file system to a consistent state in a matter of seconds or minutes, versus hours or days with non-journaled file systems.

.

XFS

1) XFS was developed in the mid-1990s by Silicon Graphics (SGI) for its 64 bit IRIX Unix servers. These servers were designed with advanced graphics processing in mind, and they feature the ability to accommodate huge files sizes.

2) The company likewise converted XFS to open source, after which it was also adopted by Linux. Because it is a 64-bit filesystem, XFS features size limitations in the millions of terabytes (in contrast to the still generous 4TB limit of ext2).

The XFS filesystem provides the following major features:

  • Quick Recovery The XFS journaling technology allows it to restart very quickly after an unexpected interruption, regardless of the number of files it is managing. Traditional filesystems must do special filesystem checks after an interruption, which can take many hours to complete. The XFS journaling avoids these lengthy filesystem checks.
  • Fast TransactionsThe XFS filesystem provides the advantages of journaling while minimizing the performance impact of journaling on read and write data transactions. Its journaling structures and algorithms are tuned to log the transactions rapidly.

    XFS uses efficient tree structures for fast searches and rapid space allocation. XFS continues to deliver rapid response times, even for directories with tens of thousands of entries.

  • Massive ScalabilityXFS is a full 64-bit filesystem, and thus is capable of handling filesystems as large as a million terabytes.
  • Efficient AllocationsXFS implements extremely sophisticated space management techniques. Efficiency in space management has been achieved through the use of variable sized extents, rather than the simple single-block-at-a-time mechanism of many other filesystems. XFS was the first filesystem to implement delayed space allocation for buffered writes, supports direct I/O, provides an optional realtime allocator, and is able to align allocations based on the geometry of the underlying storage device. The XFS allocator performs admirably in the presence of multiple parallel writers, and is renowned for its resistance to space fragmentation under such conditions.
  • Excellent BandwidthXFS is capable of delivering very close to the raw I/O performance that the underlying hardware can provide. XFS has proven scalability on SGI Altix systems of multiple gigabytes-per-second on multiple terabyte filesystems.

.

Comparison

Feature ext2 ext3 ReiserFS3.6 (not supported by Oracle)
Maximum partition size 4TB 4TB 16TB
Maximum file size 2GB-2TB 2GB-2TB 8TB
Block size 1KB-4KB 1KB-4KB 4KB only
Journaling capabilities No Yes Yes
Reboot after a crash Slow Fast Very Fast
State of data after crash Good Very Good Fair
ACL support Yes Yes No
Stability Excellent Good Good