The original Linux system used a simple file system that mimicked the functionality of the Unix file system. In this tutorial we will discuss basic file system used in Linux.
The ext File system
The original file system introduced with the Linux operating system is called the extended file system (or just ext for short). It provides a basic Unix- like file system for Linux, using virtual directories to handle physical devices, and storing data in fixed-length blocks on the physical devices.
The ext file-system uses a system called inodes to track information about the files stored in the virtual directory. The inode system creates a separate table on each physical device, called the inode table , to store the file information. Each stored file in the virtual directory has an entry in the inode table. The extended part of the name comes from the additional data that it tracks on each file, which consists of:
- The file name
- The file size
- The owner of the file
- The group the file belongs to
- Access permissions for the file
- Pointers to each disk block that contains data from the file
Linux references each inode in the inode table using a unique number (called the inode number ), assigned by the file system as data files are created. The file system uses the inode number to identify the file rather than having to use the full file name and path.
The ext2 File system
The original ext file system had quite a few limitations, such as limiting files to only 2GB in size. Not too long after Linux was first introduced, the ext file system was upgraded to create the second extended file system, called ext2 .
As you can guess, the ext2 file system is an expansion of the basic abilities of the ext file system, but maintains the same structure. The ext2 file system expands the inode table format to track additional information about each file on the system.
The ext2 inode table adds the created, modified, and last accessed time values for files to help system administrators track file access on the system. The ext2 file system also increases the maximum file size allowed to 2TB (then in later versions of ext2, that was increased to 32TB) to help accommodate large files commonly found in database servers.
In addition to expanding the inode table, the ext2 file system also changed the way in which files are stored in the data blocks. A common problem with the ext file system was that as a file is written to the physical device, the blocks used to store the data tend to be scattered throughout the device (called fragmentation ). Fragmentation of data blocks can reduce the performance of the file system, as it takes longer to search the storage device to access all of the blocks for a specific file.
The ext2 file system helps reduce fragmentation by allocating disk blocks in groups when you save a file. By grouping the data blocks for a file, the file system doesn’t have to search all over the physical device for the data blocks to read the file. The ext2 file system was the default file system used in Linux distributions for many years, but it, too, had its limitations. The inode table, while a nice feature that allows the file system to track additional information about files, can cause problems that can be fatal to the system. Each time the file system stores or updates a file, it has to modify the inode table with the new information. The problem is that this isn’t always a fluid action.
If something should happen to the computer system between the file being stored and the inode table being updated, the two would become out of sync. The ext2 file system is notorious for easily becoming corrupted due to system crashes and power outages. Even if the file data is stored just fine on the physical device, if the inode table entry wasn’t completed, the ext2 file system wouldn’t even know that the file existed! It wasn’t long before developers were exploring a different avenue of Linux file systems.
Journaling File systems
Journaling file systems provide a new level of safety to the Linux system. Instead of writing data directly to the storage device and then updating the inode table, journaling file systems write file changes into a temporary file (called the journal) first. After data is successfully written to the storage device and the inode table, the journal entry is deleted.
If the system should crash or suffer a power outage before the data can be written to the storage device, the journaling file system just reads through the journal file and processes any uncommitted data left over.
There are three different methods of journaling commonly used in Linux, each with different levels of protection. These are shown in below Table.
Journaling File system Methods
Method | Description |
Data mode | Both inode and file data are journaled. Low risk of losing data, but poor performance. |
Ordered mode | Only inode data written to the journal, but not removed until file data is successfully written. Good compromise between performance and safety. |
Writeback mode | Only inode data written to the journal, no control over when the file data is written. Higher risk of losing data, but still better than not using journaling. |
Limitation:
The data mode journaling method is by far the safest for protecting data, but it is also the slowest. All of the data written to a storage device must be written twice, once to the journal, then again to the actual storage device. This can cause poor performance, especially for systems that do a lot of data writing. Over the years, a few different journaling file systems have appeared in Linux. The following sections describe the popular Linux journaling file systems available.