Ext4 Howto

From Ext4
Revision as of 04:34, 17 January 2009 by Sandeen (Talk | contribs)

Jump to: navigation, search


General Information

Ext4 was released as a functionally complete and stable filesystem in Linux 2.6.28, hence it's safe to use it in production environments, but as any piece of software, it has bugs (which are more likely to be hit in the first stable versions). Any know critical bug will be quickly fixed. If you find one, you can contact with the Ext4 developers at the ext4 mailing list. They are sometimes also can be found on IRC.

Getting Ext4 code

For people who build their own kernel

1. Start with a 2.6.28 kernel. It is highly recommended that you apply the latest patchset (if available) to get the latest bug fixes. In your kernel's .config file, enable EXT4_FS (along with EXT4_FS_XATTR and EXT4_FS_POSIX_ACL if you like).

2. Compile the latest version of e2fsprogs (as of this writing 1.41.3) from kernel.org or from Sourceforge. Note that it is highly important to install the mke2fs.conf file that comes with the e2fsprogs 1.41.x sources in /etc/mke2fs.conf. If you have edited the /etc/mke2fs.conf file, you will need to merge your changes with the version from e2fsprogs 1.41.x.

For people who are running Fedora

Fedora 9 currently has a kernel based on 2.6.25 that has basic ext4 support. (It is missing some of the latest fixes and performance optimizations, such as delayed allocation.) A 2.6.26 kernel update should be available reasonably soon, with more up-to-date ext4 code, though still missing delayed allocation, which should arrive in 2.6.27.

Fedora 9 has all of the basic infrastructure needed to be able to run ext4, including updated udev, blkid, and other bits needed for ext4 to be a transparently recognized filesystem.

e2fsprogs-1.41.0 is currently in the Fedora 9 updates-testing repository, and users wishing to utilize ext4 should use this version of e2fsprogs.

For people who are running Ubuntu

For people who are running Ubuntu, it is *highly* recommended that you download a set of modified util-linux packages and install them. Packages for Ubuntu Hardy are available here. These packages revert a change made by Ubuntu to use the volid library instead of the blkid library. The volid library has a number of shortcomings, including that they don't work on freshly created filesystems or swap devices until after you reboot (since it is tied to udev probing) and the volid library doesn't understand ext4dev filesystems. The blkid library is much better, and Debian uses the blkid library for util-linux. Unfortunately, Ubuntu chose to make this reason for some unknown reason. For other versions of Ubuntu, the patch that was applied can be found here. Update: From 9 January daily builds of Jaunty will include ext4 as a partitioning option. As far as I can tell, it installs and boots fine (including full ext4 /; you don't need a separate /boot). Here is the announcement, It will be included in 9.04 and maybe it will be by default option in 9.10 [1]

For people who are running Debian

In Debian Lenny (Testing), the following current packages provide ext4 support:

  • ext4dev module in the linux-image package (2.6.26-10)
  • e2fsprogs (1.41.3-1)

It should be noted that the stock 2.6.26 ext4 has problems with delayed allocation and with filesystems with non-extent based files. So until Debian starts shipping a 2.6.27 based kernel or a 2.6.26 kernel with at least the 2.6.26-ext4-7 patchset, you should mount ext4dev filesystems using -o nodelalloc and only use freshly created filesystems using "mke2fs -t ext4dev". (Without these fixes, if you try to use an ext3 filesystem which was converted using tune2fs -E test_fs -o extents /dev/DEV, you will probably hit a kernel BUG the moment you try to delete or truncate an old non-extent based file.)

Creating ext4 filesystems

Creating a new ext4 filesystem is very easy once you have upgraded to e2fsprogs 1.41 or later. Simply type:

       $ mke2fs -t ext4 /dev/DEV


       $ mkfs.ext4 /dev/DEV

Once the filesystem is created, it can be mounted as follows:

       $ mount -t ext4 /dev/DEV /wherever

If you have a sufficiently new system, the "-t ext4" should not be needed.

NOTE: Although very large fileystems are on ext4's feature list, current e2fsprogs currently still limits the filesystem size to 2^32 blocks (16T for a 4k block filesystem). Filesystems larger than 16T is one of the very next high-priority features to complete for ext4.

Booting from an ext4 filesystem

Right now there's not a stable version of grub that supports booting a kernel from a ext4 partition. It's recommended that you keep /boot in a ext3 partition.

Preliminary ext4 support seems to have been added to the 1.97 version of the GRUB2 development branch.

There's also a Google Summer of Code project (from opensuse) which seem to have developed ext4 grub support. Both projects -GRUB2 and the GSoC projects- seem (sadly) to be different efforts.

Converting an ext3 filesystem to ext4

To convert an existing ext3 filesystem to use ext4, use the command

       $ tune2fs -O extents,uninit_bg,dir_index /dev/DEV

WARNING: Once you run this command, the filesystem will no longer be mountable using the ext3 filesystem!

After running this command, you MUST run fsck:

       $ fsck -pf /dev/DEV

NOTE: by doing so, new files will be created in extents format, but this will not convert existing files. However, they can be transparently read by Ext4.

WARNING: It is NOT recommended to resize the inodes using resize2fs, as this is known to corrupt some filesystems.

Personal tools