A file system formatted for ext2, ext3, or ext4 can have some
collection of the following file system feature flags enabled.
Some of these features are not supported by all implementations
of the ext2, ext3, and ext4 file system drivers, depending on
Linux kernel version in use. On other operating systems, such as
the GNU/HURD or FreeBSD, only a very restrictive set of file
system features may be supported in their implementations of
ext2.
64bit
Enables the file system to be larger than 2^32 blocks.
This feature is set automatically, as needed, but it can
be useful to specify this feature explicitly if the file
system might need to be resized larger than 2^32 blocks,
even if it was smaller than that threshold when it was
originally created. Note that some older kernels and
older versions of e2fsprogs will not support file systems
with this ext4 feature enabled.
bigalloc
This ext4 feature enables clustered block allocation, so
that the unit of allocation is a power of two number of
blocks. That is, each bit in the what had traditionally
been known as the block allocation bitmap now indicates
whether a cluster is in use or not, where a cluster is by
default composed of 16 blocks. This feature can decrease
the time spent on doing block allocation and brings
smaller fragmentation, especially for large files. The
size can be specified using the mke2fs -C
option.
Warning:
The bigalloc feature is still under development,
and may not be fully supported with your kernel or may
have various bugs. Please see the web page
http://ext4.wiki.kernel.org/index.php/Bigalloc for
details. May clash with delayed allocation (see
nodelalloc
mount option).
This feature requires that the extent
feature be enabled.
casefold
This ext4 feature provides file system level character
encoding support for directories with the casefold (+F)
flag enabled. This feature is name-preserving on the
disk, but it allows applications to lookup for a file in
the file system using an encoding equivalent version of
the file name.
dir_index
Use hashed b-trees to speed up name lookups in large
directories. This feature is supported by ext3 and ext4
file systems, and is ignored by ext2 file systems.
dir_nlink
Normally, ext4 allows an inode to have no more than 65,000
hard links. This applies to regular files as well as
directories, which means that there can be no more than
64,998 subdirectories in a directory (because each of the
'.' and '..' entries, as well as the directory entry for
the directory in its parent directory counts as a hard
link). This feature lifts this limit by causing ext4 to
use a link count of 1 to indicate that the number of hard
links to a directory is not known when the link count
might exceed the maximum count limit.
ea_inode
Normally, a file's extended attributes and associated
metadata must fit within the inode or the inode's
associated extended attribute block. This feature allows
the value of each extended attribute to be placed in the
data blocks of a separate inode if necessary, increasing
the limit on the size and number of extended attributes
per file.
encrypt
Enables support for file-system level encryption of data
blocks and file names. The inode metadata (timestamps,
file size, user/group ownership, etc.) is not encrypted.
This feature is most useful on file systems with multiple
users, or where not all files should be encrypted. In
many use cases, especially on single-user systems,
encryption at the block device layer using dm-crypt may
provide much better security.
ext_attr
This feature enables the use of extended attributes. This
feature is supported by ext2, ext3, and ext4.
extent
This ext4 feature allows the mapping of logical block
numbers for a particular inode to physical blocks on the
storage device to be stored using an extent tree, which is
a more efficient data structure than the traditional
indirect block scheme used by the ext2 and ext3 file
systems. The use of the extent tree decreases metadata
block overhead, improves file system performance, and
decreases the needed to run e2fsck(8) on the file system.
(Note: both extent
and extents
are accepted as valid names
for this feature for historical/backwards compatibility
reasons.)
extra_isize
This ext4 feature reserves a specific amount of space in
each inode for extended metadata such as nanosecond
timestamps and file creation time, even if the current
kernel does not currently need to reserve this much space.
Without this feature, the kernel will reserve the amount
of space for features it currently needs, and the rest may
be consumed by extended attributes.
For this feature to be useful the inode size must be 256
bytes in size or larger.
filetype
This feature enables the storage of file type information
in directory entries. This feature is supported by ext2,
ext3, and ext4.
flex_bg
This ext4 feature allows the per-block group metadata
(allocation bitmaps and inode tables) to be placed
anywhere on the storage media. In addition, mke2fs
will
place the per-block group metadata together starting at
the first block group of each "flex_bg group". The size
of the flex_bg group can be specified using the -G
option.
has_journal
Create a journal to ensure file system consistency even
across unclean shutdowns. Setting the file system feature
is equivalent to using the -j
option with mke2fs
or
tune2fs.
This feature is supported by ext3 and ext4, and
ignored by the ext2 file system driver.
huge_file
This ext4 feature allows files to be larger than 2
terabytes in size.
inline_data
Allow data to be stored in the inode and extended
attribute area.
journal_dev
This feature is enabled on the superblock found on an
external journal device. The block size for the external
journal must be the same as the file system which uses it.
The external journal device can be used by a file system
by specifying the -J device=
<external-device> option to
mke2fs(8) or tune2fs(8).
large_dir
This feature increases the limit on the number of files
per directory by raising the maximum size of directories
and, for hashed b-tree directories (see dir_index
), the
maximum height of the hashed b-tree used to store the
directory entries.
large_file
This feature flag is set automatically by modern kernels
when a file larger than 2 gigabytes is created. Very old
kernels could not handle large files, so this feature flag
was used to prohibit those kernels from mounting file
systems that they could not understand.
metadata_csum
This ext4 feature enables metadata checksumming. This
feature stores checksums for all of the file system
metadata (superblock, group descriptor blocks, inode and
block bitmaps, directories, and extent tree blocks). The
checksum algorithm used for the metadata blocks is
different than the one used for group descriptors with the
uninit_bg
feature. These two features are incompatible
and metadata_csum
will be used preferentially instead of
uninit_bg
.
metadata_csum_seed
This feature allows the file system to store the metadata
checksum seed in the superblock, which allows the
administrator to change the UUID of a file system using
the metadata_csum
feature while it is mounted.
meta_bg
This ext4 feature allows file systems to be resized on-
line without explicitly needing to reserve space for
growth in the size of the block group descriptors. This
scheme is also used to resize file systems which are
larger than 2^32 blocks. It is not recommended that this
feature be set when a file system is created, since this
alternate method of storing the block group descriptors
will slow down the time needed to mount the file system,
and newer kernels can automatically set this feature as
necessary when doing an online resize and no more reserved
space is available in the resize inode.
mmp
This ext4 feature provides multiple mount protection
(MMP). MMP helps to protect the file system from being
multiply mounted and is useful in shared storage
environments.
project
This ext4 feature provides project quota support. With
this feature, the project ID of inode will be managed when
the file system is mounted.
quota
Create quota inodes (inode #3 for userquota and inode #4
for group quota) and set them in the superblock. With
this feature, the quotas will be enabled automatically
when the file system is mounted.
Causes the quota files (i.e., user.quota and group.quota
which existed in the older quota design) to be hidden
inodes.
resize_inode
This file system feature indicates that space has been
reserved so that the block group descriptor table can be
extended while resizing a mounted file system. The online
resize operation is carried out by the kernel, triggered
by resize2fs(8). By default mke2fs
will attempt to
reserve enough space so that the file system may grow to
1024 times its initial size. This can be changed using
the resize
extended option.
This feature requires that the sparse_super
or
sparse_super2
feature be enabled.
sparse_super
This file system feature is set on all modern ext2, ext3,
and ext4 file systems. It indicates that backup copies of
the superblock and block group descriptors are present
only in a few block groups, not all of them.
sparse_super2
This feature indicates that there will only be at most two
backup superblocks and block group descriptors. The block
groups used to store the backup superblock(s) and
blockgroup descriptor(s) are stored in the superblock, but
typically, one will be located at the beginning of block
group #1, and one in the last block group in the file
system. This feature is essentially a more extreme
version of sparse_super and is designed to allow a much
larger percentage of the disk to have contiguous blocks
available for data files.
stable_inodes
Marks the file system's inode numbers and UUID as stable.
resize2fs(8) will not allow shrinking a file system with
this feature, nor will tune2fs(8) allow changing its UUID.
This feature allows the use of specialized encryption
settings that make use of the inode numbers and UUID.
Note that the encrypt
feature still needs to be enabled
separately. stable_inodes
is a "compat" feature, so old
kernels will allow it.
uninit_bg
This ext4 file system feature indicates that the block
group descriptors will be protected using checksums,
making it safe for mke2fs(8) to create a file system
without initializing all of the block groups. The kernel
will keep a high watermark of unused inodes, and
initialize inode tables and blocks lazily. This feature
speeds up the time to check the file system using
e2fsck(8), and it also speeds up the time required for
mke2fs(8) to create the file system.
verity
Enables support for verity protected files. Verity files
are readonly, and their data is transparently verified
against a Merkle tree hidden past the end of the file.
Using the Merkle tree's root hash, a verity file can be
efficiently authenticated, independent of the file's size.
This feature is most useful for authenticating important
read-only files on read-write file systems. If the file
system itself is read-only, then using dm-verity to
authenticate the entire block device may provide much
better security.