'\" t
.\" -*- nroff -*-
.\" Copyright 1993, 1994, 1995 by Theodore Ts'o.  All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\"
.TH EXT4 5 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
ext2 \- the second extended file system
.br
ext3 \- the third extended file system
.br
ext4 \- the fourth extended file system
.SH DESCRIPTION
The second, third, and fourth extended file systems, or ext2, ext3, and
ext4 as they are commonly known, are Linux file systems that have
historically been the default file system for many Linux distributions.
They are general purpose file systems that have been designed for
extensibility and backwards compatibility.  In particular, file systems
previously intended for use with the ext2 and ext3 file systems can be
mounted using the ext4 file system driver, and indeed in many modern
Linux distributions, the ext4 file system driver has been configured
to handle mount requests for ext2 and ext3 file systems.
.SH FILE SYSTEM FEATURES
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.
.TP
.B 64bit
.br
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.
.TP
.B bigalloc
.br
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
.B mke2fs \-C
option.
.IP
.B 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
.B nodelalloc
mount option).
.IP
This feature requires that the
.B extent
feature be enabled.
.TP
.B casefold
.br
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.
.TP
.B dir_index
.br
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.
.TP
.B dir_nlink
.br
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.
.TP
.B ea_inode
.br
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.
.TP
.B encrypt
.br
Enables support for file-system level encryption of data blocks and file
names.  The inode metadata (timestamps, file size, user/group ownership,
etc.) is
.I not
encrypted.
.IP
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.
.TP
.B ext_attr
.br
This feature enables the use of extended attributes.  This feature is
supported by ext2, ext3, and ext4.
.TP
.B extent
.br
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
.BR e2fsck (8)
on the file system.
(Note: both
.B extent
and
.B extents
are accepted as valid names for this feature for
historical/backwards compatibility reasons.)
.TP
.B extra_isize
.br
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.
.TP
.B filetype
.br
This feature enables the storage of file type information in directory
entries.  This feature is supported by ext2, ext3, and ext4.
.TP
.B flex_bg
.br
This ext4 feature allows the per-block group metadata (allocation
bitmaps
and inode tables)
to be placed anywhere on the storage media.  In addition,
.B 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
.B \-G
option.
.TP
.B has_journal
.br
Create a journal to ensure file system consistency even across unclean
shutdowns.  Setting the file system feature is equivalent to using the
.B \-j
option with
.BR mke2fs " or " tune2fs.
This feature is supported by ext3 and ext4, and ignored by the
ext2 file system driver.
.TP
.B huge_file
.br
This ext4 feature allows files to be larger than 2 terabytes in size.
.TP
.B inline_data
Allow data to be stored in the inode and extended attribute area.
.TP
.B journal_dev
.br
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.
.IP
The external journal device can be used by a file system by specifying
the
.B \-J
.BR device= <external-device>
option to
.BR mke2fs (8)
or
.BR tune2fs 8) .
.TP
.B large_dir
.br
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
.BR dir_index ),
the maximum height of the hashed b-tree used to store the directory entries.
.TP
.B large_file
.br
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.
.TP
.B metadata_csum
.br
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
.B uninit_bg
feature.  These two features are incompatible and
.B metadata_csum
will be used preferentially instead of
.BR uninit_bg .
.TP
.B metadata_csum_seed
.br
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
.B metadata_csum
feature while it is mounted.
.TP
.B meta_bg
.br
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.
.TP
.B mmp
.br
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.
.TP
.B orphan_file
.br
This ext4 feature fixes a potential scalability bottleneck for workloads
that are doing a large number of truncate or file extensions in
parallel.  It is supported by Linux kernels starting version 5.15, and
by e2fsprogs starting with version 1.47.0.
.TP
.B project
.br
This ext4 feature provides project quota support. With this feature,
the project ID of inode will be managed when the file system is mounted.
.TP
.B quota
.br
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.
.IP
Causes the quota files (i.e., user.quota and
group.quota which existed
in the older quota design) to be hidden inodes.
.TP
.B resize_inode
.br
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
.BR resize2fs (8).
By default
.B 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
.B resize
extended option.
.IP
This feature requires that the
.B sparse_super
or
.B sparse_super2
feature be enabled.
.TP
.B sparse_super
.br
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.
.TP
.B sparse_super2
.br
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.
.TP
.B stable_inodes
.br
Marks the file system's inode numbers and UUID as stable.
.BR resize2fs (8)
will not allow shrinking a file system with this feature, nor
will
.BR 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
.B encrypt
feature still needs to be enabled separately.
.B stable_inodes
is a "compat" feature, so old kernels will allow it.
.TP
.B uninit_bg
.br
This ext4 file system feature indicates that the block group descriptors
will be protected using checksums, making it safe for
.BR 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
.BR e2fsck (8),
and it also speeds up the time required for
.BR mke2fs (8)
to create the file system.
.TP
.B verity
.br
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.
.IP
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.
.SH MOUNT OPTIONS
This section describes mount options which are specific to ext2, ext3,
and ext4.  Other generic mount options may be used as well; see
.BR mount (8)
for details.
.SH "Mount options for ext2"
The `ext2' file system is the standard Linux file system.
Since Linux 2.5.46, for most mount options the default
is determined by the file system superblock. Set them with
.BR tune2fs (8).
.TP
.BR acl | noacl
Support POSIX Access Control Lists (or not).  See the
.BR acl (5)
manual page.
.TP
.BR bsddf | minixdf
Set the behavior for the
.I statfs
system call. The
.B minixdf
behavior is to return in the
.I f_blocks
field the total number of blocks of the file system, while the
.B bsddf
behavior (which is the default) is to subtract the overhead blocks
used by the ext2 file system and not available for file storage. Thus
.sp 1
% mount /k \-o minixdf; df /k; umount /k
.TS
tab(#);
l2 l2 r2 l2 l2 l
l c r c c l.
File System#1024-blocks#Used#Available#Capacity#Mounted on
/dev/sda6#2630655#86954#2412169#3%#/k
.TE
.sp 1
% mount /k \-o bsddf; df /k; umount /k
.TS
tab(#);
l2 l2 r2 l2 l2 l
l c r c c l.
File System#1024-blocks#Used#Available#Capacity#Mounted on
/dev/sda6#2543714#13#2412169#0%#/k
.TE
.sp 1
(Note that this example shows that one can add command line options
to the options given in
.IR /etc/fstab .)
.TP
.BR check=none " or " nocheck
No checking is done at mount time. This is the default. This is fast.
It is wise to invoke
.BR e2fsck (8)
every now and then, e.g.\& at boot time. The non-default behavior is unsupported
(check=normal and check=strict options have been removed). Note that these mount options
don't have to be supported if ext4 kernel driver is used for ext2 and ext3 file systems.
.TP
.B debug
Print debugging info upon each (re)mount.
.TP
.BR errors= { continue | remount-ro | panic }
Define the behavior when an error is encountered.
(Either ignore errors and just mark the file system erroneous and continue,
or remount the file system read-only, or panic and halt the system.)
The default is set in the file system superblock, and can be
changed using
.BR tune2fs (8).
.TP
.BR grpid | bsdgroups " and " nogrpid | sysvgroups
These options define what group id a newly created file gets.
When
.B grpid
is set, it takes the group id of the directory in which it is created;
otherwise (the default) it takes the fsgid of the current process, unless
the directory has the setgid bit set, in which case it takes the gid
from the parent directory, and also gets the setgid bit set
if it is a directory itself.
.TP
.BR grpquota | noquota | quota | usrquota
The usrquota (same as quota) mount option enables user quota support on the
file system. grpquota enables group quotas support. You need the quota utilities
to actually enable and manage the quota system.
.TP
.B nouid32
Disables 32-bit UIDs and GIDs.  This is for interoperability with older
kernels which only store and expect 16-bit values.
.TP
.BR oldalloc " or " orlov
Use old allocator or Orlov allocator for new inodes. Orlov is default.
.TP
\fBresgid=\fP\,\fIn\fP and \fBresuid=\fP\,\fIn\fP
The ext2 file system reserves a certain percentage of the available
space (by default 5%, see
.BR mke2fs (8)
and
.BR tune2fs (8)).
These options determine who can use the reserved blocks.
(Roughly: whoever has the specified uid, or belongs to the specified group.)
.TP
.BI sb= n
Instead of using the normal superblock, use an alternative superblock
specified by
.IR n .
This option is normally used when the primary superblock has been
corrupted.  The location of backup superblocks is dependent on the
file system's blocksize, the number of blocks per group, and features
such as
.BR sparse_super .
.IP
Additional backup superblocks can be determined by using the
.B mke2fs
program using the
.B \-n
option to print out where the superblocks exist, supposing
.B mke2fs
is supplied with arguments that are consistent with the file system's layout
(e.g., blocksize, blocks per group,
.BR sparse_super ,
etc.).
.IP
The block number here uses 1\ k units. Thus, if you want to use logical
block 32768 on a file system with 4\ k blocks, use "sb=131072".
.TP
.BR user_xattr | nouser_xattr
Support "user." extended attributes (or not).


.SH "Mount options for ext3"
The ext3 file system is a version of the ext2 file system which has been
enhanced with journaling.  It supports the same options as ext2 as
well as the following additions:
.TP
.BR journal_dev=devnum / journal_path=path
When the external journal device's major/minor numbers
have changed, these options allow the user to specify
the new journal location.  The journal device is
identified either through its new major/minor numbers encoded
in devnum, or via a path to the device.
.TP
.BR norecovery / noload
Don't load the journal on mounting.  Note that
if the file system was not unmounted cleanly,
skipping the journal replay will lead to the
file system containing inconsistencies that can
lead to any number of problems.
.TP
.BR data= { journal | ordered | writeback }
Specifies the journaling mode for file data.  Metadata is always journaled.
To use modes other than
.B ordered
on the root file system, pass the mode to the kernel as boot parameter, e.g.\&
.IR rootflags=data=journal .
.RS
.TP
.B journal
All data is committed into the journal prior to being written into the
main file system.
.TP
.B ordered
This is the default mode.  All data is forced directly out to the main file
system prior to its metadata being committed to the journal.
.TP
.B writeback
Data ordering is not preserved \(en data may be written into the main
file system after its metadata has been committed to the journal.
This is rumoured to be the highest-throughput option.  It guarantees
internal file system integrity, however it can allow old data to appear
in files after a crash and journal recovery.
.RE
.TP
.B data_err=ignore
Just print an error message if an error occurs in a file data buffer in
ordered mode.
.TP
.B data_err=abort
Abort the journal if an error occurs in a file data buffer in ordered mode.
.TP
.BR barrier=0 " / " barrier=1
This disables / enables the use of write barriers in the jbd code.  barrier=0
disables, barrier=1 enables (default). This also requires an IO stack which can
support barriers, and if jbd gets an error on a barrier write, it will disable
barriers again with a warning.  Write barriers enforce proper on-disk ordering
of journal commits, 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.
.TP
.BI commit= nrsec
Start a journal commit every
.I nrsec
seconds.  The default value is 5 seconds.  Zero means default.
.TP
.B user_xattr
Enable Extended User Attributes. See the
.BR attr (5)
manual page.
.TP
.BR jqfmt= { vfsold | vfsv0 | vfsv1 }
Apart from the old quota system (as in ext2, jqfmt=vfsold aka version 1 quota)
ext3 also supports journaled quotas (version 2 quota). jqfmt=vfsv0 or
jqfmt=vfsv1 enables journaled quotas. Journaled quotas have the advantage that
even after a crash no quota check is required. When the
.B quota
file system feature is enabled, journaled quotas are used automatically, and
this mount option is ignored.
.TP
.BR usrjquota=aquota.user | grpjquota=aquota.group
For journaled quotas (jqfmt=vfsv0 or jqfmt=vfsv1), the mount options
usrjquota=aquota.user and grpjquota=aquota.group are required to tell the
quota system which quota database files to use. When the
.B quota
file system feature is enabled, journaled quotas are used automatically, and
this mount option is ignored.

.SH "Mount options for ext4"
The ext4 file system is an advanced level of the ext3 file system which
incorporates scalability and reliability enhancements for supporting large
file system.

The options
.B journal_dev, journal_path, norecovery, noload, data, commit, orlov,
.B oldalloc, [no]user_xattr, [no]acl, bsddf, minixdf, debug, errors,
.B data_err, grpid, bsdgroups, nogrpid, sysvgroups, resgid, resuid, sb,
.B quota, noquota, nouid32, grpquota, usrquota, usrjquota, grpjquota,
.B and jqfmt are backwardly compatible with ext3 or ext2.
.TP
.B journal_checksum | nojournal_checksum
The journal_checksum option enables checksumming of the journal transactions.
This will allow the recovery code in e2fsck and the kernel to detect corruption
in the kernel. It is a compatible change and will be ignored by older kernels.
.TP
.B journal_async_commit
Commit block can be written to disk without waiting for descriptor blocks. If
enabled older kernels cannot mount the device.
This will enable 'journal_checksum' internally.
.TP
.BR barrier=0 " / " barrier=1 " / " barrier " / " nobarrier
These mount options have the same effect as in ext3.  The mount options
"barrier" and "nobarrier" are added for consistency with other ext4 mount
options.

The ext4 file system enables write barriers by default.
.TP
.BI inode_readahead_blks= n
This tuning parameter controls the maximum number of inode table blocks that
ext4's inode table readahead algorithm will pre-read into the buffer cache.
The value must be a power of 2. The default value is 32 blocks.
.TP
.BI stripe= n
Number of file system blocks that mballoc will try to use for allocation size
and alignment. For RAID5/6 systems this should be the number of data disks *
RAID chunk size in file system blocks.
.TP
.B delalloc
Deferring block allocation until write-out time.
.TP
.B nodelalloc
Disable delayed allocation. Blocks are allocated when data is copied from user
to page cache.
.TP
.BI max_batch_time= usec
Maximum amount of time ext4 should wait for additional file system operations to
be batch together with a synchronous write operation. Since a synchronous
write operation is going to force a commit and then a wait for the I/O
complete, it doesn't cost much, and can be a huge throughput win, we wait for a
small amount of time to see if any other transactions can piggyback on the
synchronous write. The algorithm used is designed to automatically tune for
the speed of the disk, by measuring the amount of time (on average) that it
takes to finish committing a transaction. Call this time the "commit time".
If the time that the transaction has been running is less than the commit time,
ext4 will try sleeping for the commit time to see if other operations will join
the transaction. The commit time is capped by the max_batch_time, which
defaults to 15000\ \[mc]s (15\ ms). This optimization can be turned off entirely by
setting max_batch_time to 0.
.TP
.BI min_batch_time= usec
This parameter sets the commit time (as described above) to be at least
min_batch_time. It defaults to zero microseconds. Increasing this parameter
may improve the throughput of multi-threaded, synchronous workloads on very
fast disks, at the cost of increasing latency.
.TP
.BI journal_ioprio= prio
The I/O priority (from 0 to 7, where 0 is the highest priority) which should be
used for I/O operations submitted by kjournald2 during a commit operation.
This defaults to 3, which is a slightly higher priority than the default I/O
priority.
.TP
.B abort
Simulate the effects of calling ext4_abort() for
debugging purposes.  This is normally used while
remounting a file system which is already mounted.
.TP
.BR auto_da_alloc | noauto_da_alloc
Many broken applications don't use fsync() when
replacing existing files via patterns such as

fd = open("foo.new")/write(fd,...)/close(fd)/ rename("foo.new", "foo")

or worse yet

fd = open("foo", O_TRUNC)/write(fd,...)/close(fd).

If auto_da_alloc is enabled, ext4 will detect the replace-via-rename and
replace-via-truncate patterns and force that any delayed allocation blocks are
allocated such that at the next journal commit, in the default data=ordered
mode, the data blocks of the new file are forced to disk before the rename()
operation is committed.  This provides roughly the same level of guarantees as
ext3, and avoids the "zero-length" problem that can happen when a system
crashes before the delayed allocation blocks are forced to disk.
.TP
.B noinit_itable
Do not initialize any uninitialized inode table blocks in the background. This
feature may be used by installation CD's so that the install process can
complete as quickly as possible; the inode table initialization process would
then be deferred until the next time the file system is mounted.
.TP
.B init_itable=n
The lazy itable init code will wait n times the number of milliseconds it took
to zero out the previous block group's inode table. This minimizes the impact on
system performance while the file system's inode table is being initialized.
.TP
.BR discard / nodiscard
Controls whether ext4 should issue discard/TRIM commands to the underlying
block device when blocks are freed.  This is useful for SSD devices and
sparse/thinly-provisioned LUNs, but it is off by default until sufficient
testing has been done.
.TP
.BR block_validity / noblock_validity
This option enables/disables the in-kernel facility for tracking
file system metadata blocks within internal data structures. This allows multi-\c
block allocator and other routines to quickly locate extents which might
overlap with file system metadata blocks. This option is intended for debugging
purposes and since it negatively affects the performance, it is off by default.
.TP
.BR dioread_lock / dioread_nolock
Controls whether or not ext4 should use the DIO read locking. If the
dioread_nolock option is specified ext4 will allocate uninitialized extent
before buffer write and convert the extent to initialized after IO completes.
This approach allows ext4 code to avoid using inode mutex, which improves
scalability on high speed storages. However this does not work with data
journaling and dioread_nolock option will be ignored with kernel warning.
Note that dioread_nolock code path is only used for extent-based files.
Because of the restrictions this options comprises it is off by default
(e.g.\& dioread_lock).
.TP
.B max_dir_size_kb=n
This limits the size of the directories so that any attempt to expand them
beyond the specified limit in kilobytes will cause an ENOSPC error. This is
useful in memory-constrained environments, where a very large directory can
cause severe performance problems or even provoke the Out Of Memory killer. (For
example, if there is only 512\~MiB memory available, a 176\~MiB directory may
seriously cramp the system's style.)
.TP
.B i_version
Enable 64-bit inode version support. This option is off by default.
.TP
.B nombcache
This option disables use of mbcache for extended attribute deduplication. On
systems where extended attributes are rarely or never shared between files,
use of mbcache for deduplication adds unnecessary computational overhead.
.TP
.B prjquota
The prjquota mount option enables project quota support on the file system.
You need the quota utilities to actually enable and manage the quota system.
This mount option requires the
.B project
file system feature.

.SH FILE ATTRIBUTES
The ext2, ext3, and ext4 file systems support setting the following file
attributes on Linux systems using the
.BR chattr (1)
utility:
.sp
.BR a " \- append only"
.sp
.BR A " \- no atime updates"
.sp
.BR d " \- no dump"
.sp
.BR D " \- synchronous directory updates"
.sp
.BR i " \- immutable"
.sp
.BR S " \- synchronous updates"
.sp
.BR u " \- undeletable"
.sp
In addition, the ext3 and ext4 file systems support the following flag:
.sp
.BR j " \- data journaling"
.sp
Finally, the ext4 file system also supports the following flag:
.sp
.BR e " \- extents format"
.sp
For descriptions of these attribute flags, please refer to the
.BR chattr (1)
man page.
.SH KERNEL SUPPORT
This section lists the file system driver (e.g., ext2, ext3, ext4) and
upstream kernel version where a particular file system feature was
supported.  Note that in some cases the feature was present in earlier
kernel versions, but there were known, serious bugs.  In other cases the
feature may still be considered in an experimental state.  Finally, note
that some distributions may have backported features into older kernels;
in particular the kernel versions in certain "enterprise distributions"
can be extremely misleading.
.IP "\fBfiletype\fR" 2i
ext2, 2.2.0
.IP "\fBsparse_super\fR" 2i
ext2, 2.2.0
.IP "\fBlarge_file\fR" 2i
ext2, 2.2.0
.IP "\fBhas_journal\fR" 2i
ext3, 2.4.15
.IP "\fBext_attr\fR" 2i
ext2/ext3, 2.6.0
.IP "\fBdir_index\fR" 2i
ext3, 2.6.0
.IP "\fBresize_inode\fR" 2i
ext3, 2.6.10 (online resizing)
.IP "\fB64bit\fR" 2i
ext4, 2.6.28
.IP "\fBdir_nlink\fR" 2i
ext4, 2.6.28
.IP "\fBextent\fR" 2i
ext4, 2.6.28
.IP "\fBextra_isize\fR" 2i
ext4, 2.6.28
.IP "\fBflex_bg\fR" 2i
ext4, 2.6.28
.IP "\fBhuge_file\fR" 2i
ext4, 2.6.28
.IP "\fBmeta_bg\fR" 2i
ext4, 2.6.28
.IP "\fBuninit_bg\fR" 2i
ext4, 2.6.28
.IP "\fBmmp\fR" 2i
ext4, 3.0
.IP "\fBbigalloc\fR" 2i
ext4, 3.2
.IP "\fBquota\fR" 2i
ext4, 3.6
.IP "\fBinline_data\fR" 2i
ext4, 3.8
.IP "\fBsparse_super2\fR" 2i
ext4, 3.16
.IP "\fBmetadata_csum\fR" 2i
ext4, 3.18
.IP "\fBencrypt\fR" 2i
ext4, 4.1
.IP "\fBmetadata_csum_seed\fR" 2i
ext4, 4.4
.IP "\fBproject\fR" 2i
ext4, 4.5
.IP "\fBea_inode\fR" 2i
ext4, 4.13
.IP "\fBlarge_dir\fR" 2i
ext4, 4.13
.IP "\fBcasefold\fR" 2i
ext4, 5.2
.IP "\fBverity\fR" 2i
ext4, 5.4
.IP "\fBstable_inodes\fR" 2i
ext4, 5.5
.SH SEE ALSO
.BR mke2fs (8),
.BR mke2fs.conf (5),
.BR e2fsck (8),
.BR dumpe2fs (8),
.BR tune2fs (8),
.BR debugfs (8),
.BR mount (8),
.BR chattr (1)
