Ext4
Related articles
Ext4 is the evolution of the most used Linux filesystem, Ext3. In many ways, Ext4 is a deeper improvement over Ext3 than Ext3 was over Ext2. Ext3 was mostly about adding journaling to Ext2, but Ext4 modifies important data structures of the filesystem such as the ones destined to store the file data. The result is a filesystem with an improved design, better performance, reliability, and features.
Source: Ext4 - Linux Kernel Newbies
Contents
Create a new ext4 filesystem
To format a partition do:
# mkfs.ext4 /dev/partition
By default, mkfs.ext4
uses a rather low bytes-per-inode ratio to calculate the fixed amount of inodes to be created. For partitions with sizes around 750GB and more this usually results in a much too large inode number, and therefore a waste of disk space. The ratio can be set directly via the -i
option; one of 6291456 resulted in 476928 inodes for a 2 TB partition. After three years, this author's root partition uses about 415000 inodes.
Migrating from ext3 to ext4
Mounting ext3 partitions as ext4 without converting
Rationale
A compromise between fully converting to ext4 and simply remaining with ext3 is to mount existing ext3 partitions as ext4.
Pros:
- Compatibility (the filesystem can continue to be mounted as ext3) – This allows users to still read the filesystem from other operating systems without ext4 support (e.g. Windows with ext3 drivers)
- Improved performance (though not as much as a fully-converted ext4 partition) – See Ext4 - Linux Kernel Newbies for details
Cons:
- Fewer features of ext4 are used (only those that do not change the disk format such as multiblock allocation and delayed allocation)
Procedure
- Edit
/etc/fstab
and change the 'type' from ext3 to ext4 for any partitions you would like to mount as ext4. - Re-mount the affected partitions.
Converting ext3 partitions to ext4
Rationale
To experience the benefits of ext4, an irreversible conversion process must be completed.
Pros:
- Improved performance and new features – See Ext4 - Linux Kernel Newbies for details
Cons:
- Read-only access from Windows can be provided by Ext2Explore, but there is currently no driver for writing data.
- Irreversible (ext4 partitions cannot be 'downgraded' to ext3)
Procedure
These instructions were adapted from http://ext4.wiki.kernel.org/index.php/Ext4_Howto and https://bbs.archlinux.org/viewtopic.php?id=61602.
- BACK-UP! Back-up all data on any ext3 partitions that are to be converted to ext4. A useful package for this, especially for / (root) partitions, is Clonezilla.
- Edit
/etc/fstab
and change the 'type' from ext3 to ext4 for any partitions that are to be converted to ext4. - Boot the live medium (if necessary). The conversion process with
e2fsprogs
must be done when the drive is not mounted. If converting one's root (/) partition, the simplest way to achieve this is to boot from some other live medium. - Ensure the partition is NOT mounted
- Run
tune2fs -O extent,uninit_bg,dir_index /dev/the_partition
(where/dev/sdxX
is replaced by the path to the desired partition, such as/dev/sda1
) - Run
fsck -f /dev/sdxX
- Recommended: mount the partition and run
e4defrag -c -v /dev/sdxX
. - Reboot Arch Linux!
Migrating files to extent
Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the new extent of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. A utility called e4defrag is being developed and will take care of this task ; however, it is not yet ready for production.
Fortunately, it is possible to use the chattr program, which will cause the kernel to rewrite the file using extent. It is possible to run this command on all files and directories of one partition (e.g. if /home is on a dedicated partition): (Must be run as root)
find /home -xdev -type f -print0 | xargs -0 chattr +e find /home -xdev -type d -print0 | xargs -0 chattr +e
It is recommended to test this command on a small number of files first, and check if everything is going all right. It may also be useful to check the filesystem after conversion.
Using the lsattr command, it is possible to check that files are now using extents. The letter 'e' should appear in the attribute list of the listed files.
Tips and tricks
Remove reserved blocks
By default 5% of a filesystem will be flagged as reserved for root user to avoid fragmentation. For modern high-capacity disks, this is higher than necessary if the partition is used as long-term archive (see this email for more info). It is generally safe to reduce the percentage of reserved blocks to free up disk space when the partition is either
- Very large (for example >50 G)
- Used as long-term archive, i.e., where files will not be deleted and created very often
Use the tune2fs utility to do this. The command below would set the percentage of reserved blocks on the partition /dev/sdXY to 1.0%:
tune2fs -m 1.0 /dev/sdXY
You can use findmnt(8) to find the device name:
findmnt /the/mount/point
E4rat
E4rat is a preload application designed for the ext4 filesystem. It monitors files opened during boot, optimizes their placement on the partition to improve access time, and preloads them at the very beginning of the boot process. E4rat does not offer improvements with SSDs, whose access time is negligible compared to hard disks.
Troubleshooting
Barriers and Performance
Since kernel 2.6.30, ext4 performance has decreased due to changes that serve to improve data integrity [1].
Most file systems (XFS, ext3, ext4, reiserfs) send write barriers to disk after fsync or during transaction commits. Write barriers enforce proper ordering of writes, making volatile disk write caches safe to use (at some performance penalty). If your disks are battery-backed in one way or another, disabling barriers may safely improve performance.
Sending write barriers can be disabled using the barrier=0 mount option (for ext3, ext4, and reiserfs), or using the nobarrier mount option (for XFS) [2].
To turn barriers off add the option barrier=0
to the desired filesystem in /etc/fstab
. For example:
# /dev/sda5 / ext4 noatime,barrier=0 0 1