TUNE2FS(8)
๐ธ TUNE2FS(8) โ System Manager's Manual ๐ธ
ok bestie, buckle UP, because we're about to meet tune2fs, the glow-up artist for your file systems ๐
โจ NAME โจ
tune2fs โ adjust tunable file system parameters on ext2/ext3/ext4 file systems
๐ฆ SYNOPSIS ๐ฆ
tune2fs [ -l ] [ -c max-mount-counts ] [ -e errors-behavior ] [ -f ] [
-i interval-between-checks ] [ -I new_inode_size ] [ -j ] [ -J journal-
options ] [ -m reserved-blocks-percentage ] [ -o [^]mount-options[,...]
] [ -r reserved-blocks-count ] [ -u user ] [ -g group ] [ -C mount-count
] [ -E extended-options ] [ -L volume-label ] [ -M last-mounted-
directory ] [ -O [^]feature[,...] ] [ -Q quota-options ] [ -T time-
last-checked ] [ -U UUID ] [ -z undo_file ] device
๐ DESCRIPTION ๐
So tune2fs is literally the system administrator's little magic wand โจ โ it lets you adjust all kinds of tunable file system parameters on Linux ext2, ext3, or ext4 file systems.
Wanna peek at what the current values are rn? You can do that with the -l option to the tune2fs(8) program, or by using the dumpe2fs(8) program. Two ways, both valid, we love options ๐ซถ
And the device specifier? It's flexible fr fr. It can be a filename (like, say, /dev/sda1), OR a LABEL or UUID specifier:
"LABEL=volume-label""UUID=uuid"
(i.e., LABEL=home or UUID=e40486c6-84d5-4f2f-b99c-032281799c9d)
๐ OPTIONS ๐
no cap, this is the part you're here for. let's go one by one ๐
-c max-mount-countsโ Adjusts how many mounts happen before the file system gets checked bye2fsck(8). If max-mount-counts is the string"random",tune2fswill use a random value between 20 and 40. If max-mount-counts is0or-1, then the number of times the file system is mounted gets disregarded bye2fsck(8)and the kernel.
Staggering the mount-counts at which file systems are forcibly checked will avoid all file systems being checked at one time when using journaled file systems. (Basically: not everyone showing up to the same party at once ๐)
Mount-count-dependent checking is disabled by default to avoid unanticipated long reboots while e2fsck(8) does its work. If you are concerned about file system corruptions caused by potential hardware problems of kernel bugs, a better solution than mount-count-dependent checking is to use the e2scrub(8) program. This does require placing the file system on an LVM volume, however. ๐คทโ๏ธ
-C mount-countโ Set the number of times the file system has been mounted. If you set it to a greater value than the max-mount-counts parameter set by the-coption,e2fsck(8)will check the file system at the next reboot. ๐-e error-behaviorโ Changes the behavior of the kernel code when errors are detected. In all cases, a file system error will causee2fsck(8)to check the file system on the next boot. error-behavior can be one of the following:continueโ Continue normal execution. ๐ถโ๏ธremount-roโ Remount file system read-only. ๐panicโ Cause a kernel panic. ๐ (dramatic but okay)
-E extended-optionsโ Set extended options for the file system. Extended options are comma separated, and may take an argument using the equals ('=') sign. The following extended options are supported:clear_mmpโ Reset the MMP block (if any) back to the clean state. โ ๏ธ Use only if absolutely certain the device is not currently mounted or being fscked, or major file system corruption can result. Needs-f.encoding=encoding-nameโ Enable the casefold feature in the super block and set encoding-name as the encoding to be used. If encoding-name is not specified,"utf8"is used. The encoding cannot be altered if casefold was previously enabled. ๐ โ๏ธencoding_flags=encoding-flagsโ Define parameters for file name character encoding operations. If a flag is not changed using this parameter, its default value is used. encoding-flags should be a comma-separated lists of flags to be enabled. The flags cannot be altered if casefold was previously enabled.
The only flag that can be set right now is strict which means that invalid strings should be rejected by the file system. In the default configuration, the strict flag is disabled.
force_fsckโ Set a flag in the file system superblock indicating that errors have been found. This will force fsck to run at the next mount. ๐จhash_alg=hash-algโ Set the default hash algorithm used for file systems with hashed b-tree directories. Valid algorithms accepted are:legacy,half_md4, andtea.mmp_update_interval=intervalโ Adjust the initial MMP update interval to interval seconds. Specifying an interval of0means to use the default interval. The specified interval must be less than 300 seconds. Requires that the mmp feature be enabled.mount_opts=mount_option_stringโ Set a set of default mount options which will be used when the file system is mounted. Unlike the bitmask-based default mount options which can be specified with the-ooption, mount_option_string is an arbitrary string with a maximum length of 63 bytes, which is stored in the superblock.
The ext4 file system driver will first apply the bitmask-based default options, and then parse the mount_option_string, before parsing the mount options passed from the mount(8) program.
This superblock setting is only honored in 2.6.35+ kernels; and not at all by the ext2 and ext3 file system drivers.
orphan_file_size=sizeโ Set size of the file for tracking unlinked but still open inodes and inodes with truncate in progress. Larger file allows for better scalability, reserving a few blocks per CPU is ideal. ๐พstride=stride-sizeโ Configure the file system for a RAID array with stride-size file system blocks. This is the number of blocks read or written to disk before moving to next disk. This mostly affects placement of file system metadata like bitmaps atmke2fs(8)time to avoid placing them on a single disk, which can hurt the performance. It may also be used by block allocator.stripe_width=stripe-widthโ Configure the file system for a RAID array with stripe-width file system blocks per stripe. This is typically be stride-size * N, where N is the number of data disks in the RAID (e.g. RAID 5 N+1, RAID 6 N+2). This allows the block allocator to prevent read-modify-write of the parity in a RAID stripe if possible when the data is written. ๐test_fsโ Set a flag in the file system superblock indicating that it may be mounted using experimental kernel code, such as theext4devfile system.^test_fsโ Clear thetest_fsflag, indicating the file system should only be mounted using production-level file system code.
-fโ Force thetune2fsoperation to complete even in the face of errors. This option is useful when removing thehas_journalfile system feature from a file system which has an external journal (or is corrupted such that it appears to have an external journal), but that external journal is not available. If the file system appears to require journal replay, the-fflag must be specified twice to proceed.
Warning: Removing an external journal from a file system which was not cleanly unmounted without first replaying the external journal can result in severe data loss and file system corruption. ๐ญ like, actually please be careful.
-g groupโ Set the group which can use the reserved file system blocks. The group parameter can be a numerical gid or a group name. If a group name is given, it is converted to a numerical gid before it is stored in the superblock.-i interval-between-checks[d|m|w]โ Adjust the maximal time between two file system checks. No suffix ordwill interpret the number interval-between-checks as days,mas months, andwas weeks. A value of zero will disable the time-dependent checking.
There are pros and cons to disabling these periodic checks; see the discussion under the -c (mount-count-dependent check) option for details.
-Iโ Change the inode size used by the file system. This requires rewriting the inode table, so it requires that the file system is checked for consistency first usinge2fsck(8). This operation can also take a while and the file system can be corrupted and data lost if it is interrupted while in the middle of converting the file system. Backing up the file system before changing inode size is recommended. ๐
File systems with an inode size of 128 bytes do not support timestamps beyond January 19, 2038. Inodes which are 256 bytes or larger will support extended timestamps, project id's, and the ability to store some extended attributes in the inode table for improved performance. โจ
-jโ Add an ext3 journal to the file system. If the-Joption is not specified, the default journal parameters will be used to create an appropriately sized journal (given the size of the file system) stored within the file system. Note that you must be using a kernel which has ext3 support in order to actually make use of the journal. ๐
If you use this to make a journal on a file system that's currently mounted, tune2fs does the only safe thing it can: it drops an immutable file called .journal in the top-level directory of the file system. Like, that's the only way to create the journal inode while the thing is mounted, bestie, there's no other path. ๐ซถ
And yes, you can see that ext3 journal. Do not delete it. Do not modify it while the file system is mounted. That's exactly why it's marked immutable โ the immutable bit is basically the file equivalent of a "do not touch" sticky note, and it means it. ๐
While checking unmounted file systems, e2fsck(8) will automatically move those .journal files over to the invisible, reserved journal inode. For every file system except the root file system, this should happen all by itself, naturally, during the next reboot cycle. But the root file system is mounted read-only, so if you want that transition to happen there, you have to run e2fsck(8) from a rescue floppy. Yeah. A rescue floppy. It's giving old school. ๐ญ
Ngl, on some distributions โ Debian, for example โ if an initial ramdisk is in use, the initrd scripts will automatically convert an ext2 root file system to ext3 if /etc/fstab(5) specifies the ext3 file system for the root file system. That whole trick exists specifically so you don't need a rescue floppy just to add an ext3 journal to your root file system. Obsessed with them for that honestly. โจ
-J journal-optionsโ override the default ext3 journal parameters. Journal options are comma separated, and any of them can take an argument using the equals sign (=). Here's everything that's supported, queen: ๐device=external-journalโ attach the file system to the journal block device living on external-journal. The external journal has to already exist, and you make it like this:
mke2fs -O journal_dev external-journal
Watch out: external-journal must be formatted with the same block size as the file systems that will be using it. And okay, so, there is support for attaching multiple file systems to a single external journal โ but the Linux kernel and e2fsck(8) do not currently support shared external journals yet. So, like, don't. ๐
Instead of naming the device directly, you can also specify external-journal as either LABEL=label or UUID=UUID, which locates the external journal by the volume label or UUID stored in the ext2 superblock at the start of the journal. Use dumpe2fs(8) to display a journal device's volume label and UUID. Also peep the -L option of tune2fs(8) โ yeah, the one right below this. iykyk. ๐
fast_commit_size=fast-commit-sizeโ create an additional fast commit journal area of size fast-commit-size kilobytes. This one's only valid if thefast_commitfeature is enabled on the file system, no exceptions. If you don't specify it andfast_commitis turned on, the fast commit area size defaults to journal-size / 64 megabytes. The total size of the journal with thefast_commitfeature set is journal-size + ( fast-commit-size * 1024 ) megabytes. And the total journal size may be no more than 10,240,000 file system blocks or half the total file system size โ whichever is smaller. Math check, bestie. ๐งฎlocation=journal-locationโ specify where the journal lives. The journal-location argument can be given as a block number, or โ if the number has a units suffix (e.g.'M','G', etc.) โ it gets interpreted as the offset from the beginning of the file system. ๐ธsize=journal-sizeโ create a journal stored in the file system of size journal-size megabytes. The journal must be at least 1024 file system blocks (that's 1 MiB if you're using 1k blocks, 4 MiB if you're using 4k blocks, etc.) and may be no more than 10,240,000 file system blocks. Also there has to be enough free space in the file system to actually create a journal that size. Obviously. ๐
Only one of thesizeordeviceoptions can be given for a file system. Pick a lane. ๐
-lโ list the contents of the file system superblock, including the current values of all the parameters you can set with this program. It's giving "show me everything" and honestly? Valid. ๐-L volume-labelโ set the volume label of the file system. Ext2 file system labels can be at most 16 characters long; if volume-label is longer than 16 characters, tune2fs will truncate it and print a warning. For other file systems that support online label manipulation and are mounted, tune2fs will work as well โ but it will not attempt to truncate the volume-label at all. Not even a little. ๐
The volume label can be used by mount(8), fsck(8), and /etc/fstab(5) (and possibly others) by specifying LABEL=volume-label instead of a block special device name like /dev/hda5. So you can stop hardcoding device names, babe, it's 2025 energy. โจ
-m reserved-blocks-percentageโ set the percentage of the file system that may only be allocated by privileged processes. Why reserve blocks at all? Two reasons, bestie: it avoids file system fragmentation, and it lets system daemons โ likesyslogd(8)โ keep functioning correctly after non-privileged processes get blocked from writing to the file system. Normally the default percentage of reserved blocks is 5%. ๐-M last-mounted-directoryโ set the last-mounted directory for the file system. That's it, that's the whole job. ๐ฆ-o [^]mount-option[,...]โ set or clear the indicated default mount options in the file system. Default mount options can be overridden by mount options specified either in/etc/fstab(5)or on the command line arguments tomount(8). Heads up though: older kernels may not support this feature โ in particular, kernels that predate 2.4.20 will almost certainly ignore the default mount options field in the superblock entirely. Rude, but okay. ๐ญ
You can clear or set more than one mount option at a time by separating them with commas. Mount options prefixed with a caret character ('^') get cleared in the file system's superblock; mount options with no prefix character, or prefixed with a plus character ('+'), get added to the file system.
The following mount options can be set or cleared using tune2fs:
debugโ enable debugging code for this file system. ๐bsdgroupsโ emulate BSD behavior when creating new files: they take the group-id of the directory they were created in. The standard System V behavior is the default, where newly created files take on 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. Inheritance, but make it Unix. ๐user_xattrโ enable user-specified extended attributes.aclโ enable Posix Access Control Lists.uid16โ disables 32-bit UIDs and GIDs. This exists for interoperability with older kernels which only store and expect 16-bit values. Vintage tech support hours. ๐journal_dataโ when the file system is mounted with journaling enabled, all data (not just metadata) is committed into the journal prior to being written into the main file system.journal_data_orderedโ when the file system is mounted with journaling enabled, all data is forced directly out to the main file system prior to its metadata being committed to the journal.journal_data_writebackโ when the file system is mounted with journaling enabled, data may be written into the main file system after its metadata has been committed to the journal. This may increase throughput, however, it may allow old data to appear in files after a crash and journal recovery. So like, speed vs. vibes. Choose wisely. ๐nobarrierโ the file system will be mounted with barrier operations in the journal disabled. (This option is currently only supported by the ext4 file system driver in 2.6.35+ kernels.)block_validityโ the file system will be mounted with theblock_validityoption enabled, which causes extra checks to be performed after reading or writing from the file system. This prevents corrupted metadata blocks from causing file system damage by overwriting parts of the inode table or block group descriptors. The catch: it comes at the cost of increased memory and CPU overhead, so it's enabled only for debugging purposes. (This option is currently only supported by the ext4 file system driver in 2.6.35+ kernels.) Safety at a price, bestie. ๐ฅdiscardโ the file system will be mounted with thediscardmount option. This causes the file system driver to attempt to use the trim/discard feature of some storage devices (such as SSD's and thin-provisioned drives available in some enterprise storage arrays) to inform the storage device that blocks belonging to deleted files can be reused for other purposes. Tell your SSD when stuff is dead, basically. ๐ฆ (This option is currently only supported by the ext4 file system driver in 2.6.35+ kernels.)nodelallocโ the file system will be mounted with thenodelallocmount option. This disables the delayed allocation feature. (This option is currently only supported by the ext4 file system driver in 2.6.35+ kernels.)
-O [^]feature[,...]โ okay bestie, this is the feature switchboard ๐ You set or clear the indicated file system features (options) in the file system. Need more than one? Separate them with commas. Features prefixed with a caret^get cleared in the file system's superblock; features with no prefix, or prefixed with a plus+, get added. For the full breakdown of what these features actually mean, seeext4(5). iykyk
Here's the exact roster tune2fs can set or clear:
64bitโ Enable the file system to be larger than2^32blocks. Big girl energy.casefoldโ Enable support for file system level casefolding. You can only clear this one if the filesystem has no directories withFattribute. No cap.dir_indexโ Use hashed b-trees to speed up lookups for large directories. It's giving fast.dir_nlinkโ Allow more than65000subdirectories per directory. Periodt.ea_inodeโ Allow 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. tune2fs currently only supports setting this file system feature.encryptโ Enable support for file system level encryption. tune2fs currently only supports setting this file system feature. ๐extentโ Enable the use of extent trees to store the location of data blocks in inodes. tune2fs currently only supports setting this file system feature.extra_isizeโ Enable the extended inode fields used by ext4.filetypeโ Store file type information in directory entries.flex_bgโ Allow bitmaps and inode tables for a block group to be placed anywhere on the storage media. tune2fs will not reorganize the location of the inode tables and allocation bitmaps, asmke2fs(8)will do when it creates a freshly formatted file system withflex_bgenabled.has_journalโ Use a journal to ensure file system consistency even across unclean shutdowns. Setting this file system feature is equivalent to using the-joption.fast_commitโ Enable fast commit journaling feature to improve fsync latency. Speedy.large_dirโ Increase the limit on the number of files per directory. tune2fs currently only supports setting this file system feature.huge_fileโ Support files larger than2 terabytesin size.large_fileโ File System can contain files that are greater than2 GiB.metadata_csumโ Store a checksum to protect the contents in each metadata block.metadata_csum_seedโ Allow the file system to store the metadata checksum seed in the superblock, enabling the administrator to change the UUID of a file system using themetadata_csumfeature while it is mounted.mmpโ Enable or disable multiple mount protection (MMP) feature.orphan_fileโ Store the list of orphan inodes in multiple blocks instead of a single linked-list to avoid potential scalability bottlenecks for workloads that perform a large number of file truncations or extensions in parallel.projectโ Enable project ID tracking. This is used for project quota tracking.quotaโ Enable internal file system quota inodes.read-onlyโ Force the kernel to mount the file system read-only.resize_inodeโ Reserve space so the block group descriptor table may grow in the future. tune2fs only supports clearing this file system feature.sparse_superโ Limit the number of backup superblocks to save space on large file systems. tune2fs currently only supports setting this file system feature.stable_inodesโ Prevent the file system from being shrunk or having its UUID changed, in order to allow the use of specialized encryption settings that make use of the inode numbers and UUID. tune2fs currently only supports setting this file system feature.uninit_bgโ Allow the kernel to initialize bitmaps and inode tables lazily, and to keep a high watermark for the unused inodes in a file system, to reducee2fsck(8)time. The firste2fsck(8)run after enabling this feature will take the full time, but subsequente2fsck(8)runs will take only a fraction of the original time, depending on how full the file system is.verityโ Enable support for verity protected files. tune2fs currently only supports setting this file system feature.
After setting or clearing sparse_super, uninit_bg, filetype, or resize_inode file system features, the file system may require being checked using e2fsck(8) to return the file system to a consistent state. tune2fs will print a message requesting that the system administrator run e2fsck(8) if necessary. After setting the dir_index feature, e2fsck -D can be run to convert existing directories to the hashed B-tree format. Enabling certain file system features may prevent the file system from being mounted by kernels which do not support those features. In particular, the uninit_bg and flex_bg features are only supported by the ext4 file system. Don't skip the e2fsck step, bestie, fr fr.
-r reserved-blocks-countโ Set the number of reserved file system blocks. That's it, that's the tweet.-Q quota-optionsโ Sets the quota feature on the superblock and works on the quota files for the given quota type. Quota options could be one or more of the following:[^]usrquotaโ Sets/clears user quota inode in the superblock.[^]grpquotaโ Sets/clears group quota inode in the superblock.[^]prjquotaโ Sets/clears project quota inode in the superblock.
-T time-last-checkedโ Set the time the file system was last checked usinge2fsck. The time is interpreted using the current (local) timezone. This can be useful in scripts which use a Logical Volume Manager to make a consistent snapshot of a file system, and then check the file system during off hours to make sure it hasn't been corrupted due to hardware problems, etc. If the file system was clean, then this option can be used to set the last checked time on the original file system. The format of time-last-checked is the international date format, with an optional time specifier, i.e.YYYYMMDD[HH[MM[SS]]]. The keywordnowis also accepted, in which case the last checked time will be set to the current time.-u userโ Set the user who can use the reserved file system blocks. user can be a numerical uid or a user name. If a user name is given, it is converted to a numerical uid before it is stored in the superblock.-U UUIDโ Set the universally unique identifier (UUID) of the file system to UUID. The format of the UUID is a series of hex digits separated by hyphens, like this:"c1b9d5a2-f162-11cf-9ece-0020afc76f16". The UUID parameter may also be one of the following:clearโ clear the file system UUIDrandomโ generate a new randomly-generated UUIDtimeโ generate a new time-based UUID
The UUID may be used by mount(8), fsck(8), and /etc/fstab(5) (and possibly others) by specifying UUID=uuid instead of a block special device name like /dev/hda1.
See uuidgen(8) for more information. If the system does not have a good random number generator such as /dev/random or /dev/urandom, tune2fs will automatically use a time-based UUID instead of a randomly-generated UUID. No cap, it's got a fallback.
-z undo_fileโ Before overwriting a file system block, write the old contents of the block to an undo file. This undo file can be used withe2undo(8)to restore the old contents of the file system should something go wrong. If the empty string is passed as the undo_file argument, the undo file will be written to a file namedtune2fs-device.e2undoin the directory specified via theE2FSPROGS_UNDO_DIRenvironment variable.
WARNING: The undo file cannot be used to recover from a power or system crash.
๐ BUGS ๐
We haven't found any bugs yet. That doesn't mean there aren't any... iconic confidence, honestly.
โจ AUTHOR โจ
tune2fs was written by Remy Card <Remy.Card@linux.org>. It is currently being maintained by Theodore Ts'o <tytso@alum.mit.edu>. tune2fs uses the ext2fs library written by Theodore Ts'o <tytso@mit.edu>. This manual page was written by Christian Kuhtz <chk@data-hh.Hanse.DE>. Time-dependent checking was added by Uwe Ohse <uwe@tirka.gun.de>. Legends only.
๐ AVAILABILITY ๐
tune2fs is part of the e2fsprogs package and is available from http://e2fsprogs.sourceforge.net. Go get it, bestie.
๐ SEE ALSO ๐
debugfs(8), dumpe2fs(8), e2fsck(8), mke2fs(8), ext4(5)
That's the whole manual page, bestie! ๐ This one is E2fsprogs version 1.47.4, dated March 2025, and it's the TUNE2FS(8) page. Slay, stay tuned, and always run your e2fsck. ๐
๐ฆ where this page comes from
- alpine 3.24: e2fsprogs-doc 1.47.4-r0 ยท GPL-2.0-or-later AND LGPL-2.0-or-later AND BSD-3-Clause AND MIT
- arch rolling: e2fsprogs 1.47.4-1 ยท GPL AND LGPL AND MIT
- nixpkgs unstable: e2fsprogs 1.47.4
- ubuntu stonking: e2fsprogs 1.47.4-1 ยท GPL-2.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms