.\" Revision 1.0 93/06/3 23:00  chk
.\" Initial revision
.\"
.\"
.TH TUNE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
tune2fs \- adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
.SH SYNOPSIS
.B tune2fs
[
.B \-l
]
[
.B \-c
.I max-mount-counts
]
[
.B \-e
.I errors-behavior
]
[
.B \-f
]
[
.B \-i
.I interval-between-checks
]
[
.B \-I
.I new_inode_size
]
[
.B \-j
]
[
.B \-J
.I journal-options
]
[
.B \-m
.I reserved-blocks-percentage
]
[
.B \-o
.RI [^]mount-options [,...]
]
[
.B \-p
.I mmp_update_interval
]
[
.B \-r
.I reserved-blocks-count
]
[
.B \-s
.I sparse-super-flag
]
[
.B \-u
.I user
]
[
.B \-g
.I group
]
[
.B \-C
.I mount-count
]
[
.B \-E
.I extended-options
]
[
.B \-L
.I volume-name
]
[
.B \-M
.I last-mounted-directory
]
[
.B \-O 
.RI [^] feature [,...]
]
[
.B \-Q
.I quota-options
]
[
.B \-T
.I time-last-checked
]
[
.B \-U
.I UUID
]
[
.B \-z
.I undo_file
]
device
.SH DESCRIPTION
.BI tune2fs
allows the system administrator to adjust various tunable filesystem 
parameters on Linux ext2, ext3, or ext4 filesystems.  The current values 
of these options can be displayed by using the
.B -l
option to
.BR tune2fs (8)
program, or by using the
.BR dumpe2fs (8)
program.
.PP
The
.I device
specifier can either be a filename (i.e., /dev/sda1), or a LABEL or UUID
specifier: "\fBLABEL=\fIvolume-name\fR" or "\fBUUID=\fIuuid\fR".  (i.e.,
LABEL=home or UUID=e40486c6-84d5-4f2f-b99c-032281799c9d).
.SH OPTIONS
.TP
.BI \-c " max-mount-counts"
Adjust the number of mounts after which the filesystem will be checked by 
.BR e2fsck (8).  
If
.I max-mount-counts
is 0 or \-1, the number of times the filesystem is mounted will be disregarded 
by
.BR e2fsck (8)
and the kernel.
.sp
Staggering the mount-counts at which filesystems are forcibly
checked will avoid all filesystems being checked at one time
when using journaled filesystems.
.sp
You should strongly consider the consequences of disabling
mount-count-dependent checking entirely.  Bad disk drives, cables,
memory, and kernel bugs could all corrupt a filesystem without
marking the filesystem dirty or in error.  If you are using
journaling on your filesystem, your filesystem will
.B never
be marked dirty, so it will not normally be checked.  A
filesystem error detected by the kernel will still force
an fsck on the next reboot, but it may already be too late
to prevent data loss at that point.
.sp
See also the
.B \-i
option for time-dependent checking.
.TP
.BI \-C " mount-count"
Set the number of times the filesystem has been mounted.
If set to a greater value than the max-mount-counts parameter
set by the 
.B \-c
option,
.BR e2fsck (8) 
will check the filesystem at the next reboot.
.TP
.BI \-e " error-behavior"
Change the behavior of the kernel code when errors are detected.
In all cases, a filesystem error will cause
.BR e2fsck (8)
to check the filesystem on the next boot.
.I error-behavior
can be one of the following:
.RS 1.2i
.TP 1.2i
.B continue
Continue normal execution.
.TP
.B remount-ro
Remount filesystem read-only.
.TP
.B panic
Cause a kernel panic.
.RE
.TP
.BI \-E " extended-options"
Set extended options for the filesystem.  Extended options are comma
separated, and may take an argument using the equals ('=') sign.
The following extended options are supported:
.RS 1.2i
.TP
.B 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 filesystem corruption can result.  Needs '-f'.
.TP
.BI mmp_update_interval= interval
Adjust the initial MMP update interval to
.I interval
seconds.  Specifying an
.I interval
of 0 means to use the default interval.  The specified interval must
be less than 300 seconds.  Requires that the
.B mmp
feature be enabled.
.TP
.BI stride= stride-size
Configure the filesystem for a RAID array with
.I stride-size
filesystem blocks. This is the number of blocks read or written to disk
before moving to next disk. This mostly affects placement of filesystem
metadata like bitmaps at
.BR mke2fs (2)
time to avoid placing them on a single disk, which can hurt the performance.
It may also be used by block allocator.
.TP
.BI stripe_width= stripe-width
Configure the filesystem for a RAID array with
.I stripe-width
filesystem 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.
.TP
.BI hash_alg= hash-alg
Set the default hash algorithm used for filesystems with hashed b-tree
directories.  Valid algorithms accepted are:
.IR legacy ,
.IR half_md4 ,
and
.IR tea .
.TP
.BI 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
.B -o
option,
.I mount_option_string
is an arbitrary string with a maximum length of 63 bytes, which is
stored in the superblock.
.IP
The ext4 file system driver will first apply
the bitmask-based default options, and then parse the
.IR mount_option_string ,
before parsing the mount options passed from the
.BR mount (8)
program.
.IP
This superblock setting is only honored in 2.6.35+ kernels;
and not at all by the ext2 and ext3 file system drivers.
.TP
.B test_fs
Set a flag in the filesystem superblock indicating that it may be
mounted using experimental kernel code, such as the ext4dev filesystem.
.TP
.B ^test_fs
Clear the test_fs flag, indicating the filesystem should only be mounted
using production-level filesystem code.
.RE
.TP
.B \-f
Force the tune2fs operation to complete even in the face of errors.  This 
option is useful when removing the 
.B has_journal
filesystem feature from a filesystem 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 filesystem appears to require
journal replay, the
.B \-f
flag must be specified twice to proceed.
.sp
.B WARNING:
Removing an external journal from a filesystem which was not cleanly unmounted
without first replaying the external journal can result in
severe data loss and filesystem corruption.
.TP
.BI \-g " group"
Set the group which can use the reserved filesystem blocks.
The 
.I 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.
.TP
.B \-i " \fIinterval-between-checks\fR[\fBd\fR|\fBm\fR|\fBw\fR]"
Adjust the maximal time between two filesystem checks. 
No suffix or
.B d
will interpret the number
.I interval-between-checks
as days,
.B m
as months, and
.B w
as weeks.  A value of zero will disable the time-dependent checking.
.sp
It is strongly recommended that either
.B \-c
(mount-count-dependent) or
.B \-i
(time-dependent) checking be enabled to force periodic full
.BR e2fsck (8)
checking of the filesystem.  Failure to do so may lead to filesystem
corruption (due to bad disks, cables, memory, or kernel bugs) going
unnoticed, ultimately resulting in data loss or corruption.
.TP
.B \-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 using
.BR e2fsck (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.
.TP
.B \-j
Add an ext3 journal to the filesystem.  If the 
.B \-J
option is not specified, the default journal parameters will be used to create
an appropriately sized journal (given the size of the filesystem) 
stored within the filesystem.  Note that you must be using a kernel
which has ext3 support in order to actually make use of the journal.
.IP
If this option is used to create a journal on a mounted filesystem, an
immutable file,
.BR .journal ,
will be created in the top-level directory of the filesystem, as it is
the only safe way to create the journal inode while the filesystem is
mounted.  While the ext3 journal is visible, it is not safe to
delete it, or modify it while the filesystem is mounted; for this
reason the file is marked immutable.
While checking unmounted filesystems, 
.BR e2fsck (8)
will automatically move 
.B .journal
files to the invisible, reserved journal inode.  For all filesystems
except for the root filesystem,  this should happen automatically and
naturally during the next reboot cycle.  Since the root filesystem is
mounted read-only,
.BR e2fsck (8)
must be run from a rescue floppy in order to effect this transition.
.IP
On some distributions, such as Debian, if an initial ramdisk is used,
the initrd scripts will automatically convert an ext2 root filesystem
to ext3 if the  
.BR /etc/fstab
file specifies the ext3 filesystem for the root filesystem in order to
avoid requiring the use of a rescue floppy to add an ext3 journal to
the root filesystem.
.TP
.BR \-J " journal-options"
Override the default ext3 journal parameters. Journal options are comma
separated, and may take an argument using the equals ('=')  sign.
The following journal options are supported:
.RS 1.2i
.TP
.BI size= journal-size
Create a journal stored in the filesystem of size
.I journal-size
megabytes.   The size of the journal must be at least 1024 filesystem blocks
(i.e., 1MB if using 1k blocks, 4MB if using 4k blocks, etc.)
and may be no more than 10,240,000 filesystem blocks.
There must be enough free space in the filesystem to create a journal of
that size.
.TP
.BI location =journal-location
Specify the location of the journal.  The argument
.I journal-location
can either be specified as a block number, or if the number has a units
suffix (e.g., 'M', 'G', etc.) interpret it as the offset from the
beginning of the file system.
@JDEV@.TP
@JDEV@.BI device= external-journal
@JDEV@Attach the filesystem to the journal block device located on
@JDEV@.IR external-journal .
@JDEV@The external 
@JDEV@journal must have been already created using the command
@JDEV@.IP
@JDEV@.B mke2fs -O journal_dev 
@JDEV@.I external-journal
@JDEV@.IP
@JDEV@Note that
@JDEV@.I external-journal
@JDEV@must be formatted with the same block
@JDEV@size as filesystems which will be using it.
@JDEV@In addition, while there is support for attaching
@JDEV@multiple filesystems to a single external journal,
@JDEV@the Linux kernel and 
@JDEV@.BR e2fsck (8)
@JDEV@do not currently support shared external journals yet.
@JDEV@.IP
@JDEV@Instead of specifying a device name directly,
@JDEV@.I external-journal
@JDEV@can also be specified by either
@JDEV@.BI LABEL= label
@JDEV@or
@JDEV@.BI UUID= UUID
@JDEV@to locate the external journal by either the volume label or UUID
@JDEV@stored in the ext2 superblock at the start of the journal.  Use
@JDEV@.BR dumpe2fs (8)
@JDEV@to display a journal device's volume label and UUID.  See also the
@JDEV@.B -L
@JDEV@option of
@JDEV@.BR tune2fs (8).
.RE
@JDEV@.IP
@JDEV@Only one of the
@JDEV@.BR size " or " device
@JDEV@options can be given for a filesystem.
.TP
.B \-l
List the contents of the filesystem superblock, including the current
values of the parameters that can be set via this program.
.TP
.BI \-L " volume-label"
Set the volume label of the filesystem.  
Ext2 filesystem labels can be at most 16 characters long; if
.I volume-label 
is longer than 16 characters, 
.B tune2fs
will truncate it and print a warning.  The volume label can be used
by
.BR mount (8),
.BR fsck (8),
and
.BR /etc/fstab (5)
(and possibly others) by specifying
.BI LABEL= volume_label
instead of a block special device name like
.BR /dev/hda5 .
.TP
.BI \-m " reserved-blocks-percentage"
Set the percentage of the filesystem which may only be allocated
by privileged processes.   Reserving some number of filesystem blocks 
for use by privileged processes is done 
to avoid filesystem fragmentation, and to allow system
daemons, such as 
.BR syslogd (8),
to continue to function correctly after non-privileged processes are 
prevented from writing to the filesystem.  Normally, the default percentage 
of reserved blocks is 5%.
.TP
.BI \-M " last-mounted-directory"
Set the last-mounted directory for the filesystem.
.TP
.BR \-o " [^]\fImount-option\fR[,...]"
Set or clear the indicated default mount options in the filesystem.
Default mount options can be overridden by mount options specified 
either in 
.BR /etc/fstab (5)
or on the command line arguments to
.BR mount (8).   
Older kernels may not support this feature; in particular,
kernels which predate 2.4.20 will almost certainly ignore the
default mount options field in the superblock.
.IP
More than one mount option can be cleared or set by separating
features with commas.  Mount options prefixed with a 
caret character ('^') will be cleared in the filesystem's superblock; 
mount options without a prefix character or prefixed with a plus 
character ('+') will be added to the filesystem.
.IP
The following mount options can be set or cleared using
.BR tune2fs :
.RS 1.2i
.TP
.B debug
Enable debugging code for this filesystem.
.TP
.B bsdgroups
Emulate BSD behavior when creating new files: they will take the group-id
of the directory in which they were created.  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.
.TP
.B user_xattr
Enable user-specified extended attributes.
.TP
.B acl
Enable Posix Access Control Lists.
.TP
.B uid16
Disables 32-bit UIDs and GIDs.  This is for interoperability with
older kernels which only store and expect 16-bit values.
.TP
.B journal_data
When the filesystem is mounted with journalling enabled, all data
(not just metadata) is committed into the journal prior to being written
into the main filesystem.
.TP
.B journal_data_ordered
When the filesystem is mounted with journalling enabled, all data is forced
directly out to the main file system prior to its metadata being committed 
to the journal.
.TP
.B journal_data_writeback
When the filesystem is mounted with journalling enabled, data may be
written into the main filesystem 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.
.TP
.B 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.)
.TP
.B block_validity
The file system will be mounted with the block_validity option 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.  This comes at the cost of increased memory and CPU
overhead, so it is enabled only for debugging purposes.  (This option is
currently only supported by the ext4 file system driver in 2.6.35+
kernels.)
.TP
.B discard
The file system will be mounted with the discard mount option.  This will
cause 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.  (This option is currently only supported by the ext4 file
system driver in 2.6.35+ kernels.)
.TP
.B nodelalloc
The file system will be mounted with the nodelalloc mount option.  This
will disable the delayed allocation feature.  (This option is currently
only supported by the ext4 file system driver in 2.6.35+ kernels.)
.RE
.TP
.BR \-O " [^]\fIfeature\fR[,...]"
Set or clear the indicated filesystem features (options) in the filesystem.
More than one filesystem feature can be cleared or set by separating
features with commas.  Filesystem features prefixed with a 
caret character ('^') will be cleared in the filesystem's superblock; 
filesystem features without a prefix character or prefixed with a plus 
character ('+') will be added to the filesystem.  For a detailed
description of the file system features, please see the man page
.BR ext4 (5).
.IP
The following filesystem features can be set or cleared using
.BR tune2fs :
.RS 1.2i
.TP
.B dir_index
Use hashed b-trees to speed up lookups for large directories.
.TP
.B dir_nlink
Allow more than 65000 subdirectories per directory.
.TP
.B encrypt
Enable file system level encryption.
.B Tune2fs
currently only supports setting this filesystem feature.
.TP
.B extent
Enable the use of extent trees to store the location of data blocks in inodes.
.B Tune2fs
currently only supports setting this filesystem feature.
.TP
.B extra_isize
Enable the extended inode fields used by ext4.
.TP
.B filetype
Store file type information in directory entries.
.TP
.B flex_bg
Allow bitmaps and inode tables for a block group to be placed
anywhere on the storage media.  \fBTune2fs\fR will not reorganize
the location of the inode tables and allocation bitmaps, as
.BR mke2fs (8)
will do when it creates a freshly formatted file system with
.B flex_bg
enabled.
.TP
.B has_journal
Use a journal to ensure filesystem consistency even across unclean shutdowns.
Setting the filesystem feature is equivalent to using the 
.B \-j
option.
.TP
.B huge_file
Support files larger than 2 terabytes in size.
.TP
.B large_file
Filesystem can contain files that are greater than 2GB.
.TP
.B metadata_csum
Store a checksum to protect the contents in each metadata block.
.TP
.B mmp
Enable or disable multiple mount protection (MMP) feature.
.TP
.B project
Enable project ID tracking.  This is used for project quota tracking.
.TP
.B quota
Enable internal file system quota inodes.
.TP
.B read-only
Force the kernel to mount the file system read-only.
.TP
.B resize_inode
Reserve space so the block group descriptor table may grow in the
future.
.B Tune2fs
only supports clearing this filesystem feature.
.TP
.B sparse_super
Limit the number of backup superblocks to save space on large filesystems.
.B Tune2fs
currently only supports setting this filesystem feature.
.TP
.B uninit_bg
Allow the kernel to initialize bitmaps and inode tables lazily, and to
keep a high watermark for the unused inodes in a filesystem, to reduce
.BR e2fsck (8)
time.  The first e2fsck run after enabling this feature will take the
full time, but subsequent e2fsck runs will take only a fraction of the
original time, depending on how full the file system is.
.RE
.IP
After setting or clearing 
.BR sparse_super ,
.BR uninit_bg ,
.BR filetype ,
or
.B resize_inode
filesystem features,
the file system may require being checked using
.BR e2fsck (8)
to return the filesystem to a consistent state.
.B Tune2fs
will print a message requesting that the system administrator run
.BR e2fsck (8)
if necessary.  After setting the 
.B dir_index
feature, 
.B e2fsck -D
can be run to convert existing directories to the hashed B-tree format.
Enabling certain filesystem features may prevent the filesystem from being
mounted by kernels which do not support those features.  In particular, the
.BR uninit_bg
and
.BR flex_bg
features are only supported by the ext4 filesystem.
.TP
.BI \-p " mmp_check_interval"
Set the desired MMP check interval in seconds. It is 5 seconds by default.
.TP
.BI \-r " reserved-blocks-count"
Set the number of reserved filesystem blocks.
.TP
.BI \-Q " quota-options"
Sets '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:
.RS 1.2i
.TP
.BR [^]usrquota
Sets/clears user quota inode in the superblock.
.TP
.BR [^]grpquota
Sets/clears group quota inode in the superblock.
.TP
.BR [^]prjquota
Sets/clears project quota inode in the superblock.
.RE
.TP
.BI \-T " time-last-checked"
Set the time the filesystem was last checked using
.BR  e2fsck .
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 filesystem, and then check the filesystem 
during off hours to make sure it hasn't been corrupted due to 
hardware problems, etc.  If the filesystem was clean, then this option can 
be used to set the last checked time on the original filesystem.  The format 
of 
.I time-last-checked
is the international date format, with an optional time specifier, i.e.
YYYYMMDD[HH[MM[SS]]].   The keyword 
.B now
is also accepted, in which case the last checked time will be set to the 
current time.
.TP
.BI \-u " user"
Set the user who can use the reserved filesystem blocks.
.I 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.
.TP
.BI \-U " UUID"
Set the universally unique identifier (UUID) of the filesystem to
.IR UUID .
The format of the UUID is a series of hex digits separated by hyphens, 
like this: 
"c1b9d5a2-f162-11cf-9ece-0020afc76f16".  
The 
.I UUID
parameter may also be one of the following:
.RS 1.2i
.TP
.I clear
clear the filesystem UUID
.TP
.I random
generate a new randomly-generated UUID
.TP
.I time
generate a new time-based UUID
.RE
.IP
The UUID may be used by
.BR mount (8),
.BR fsck (8),
and
.BR /etc/fstab (5)
(and possibly others) by specifying
.BI UUID= uuid
instead of a block special device name like
.BR /dev/hda1 .
.IP
See
.BR uuidgen (8)
for more information.
If the system does not have a good random number generator such as
.I /dev/random
or
.IR /dev/urandom ,
.B tune2fs
will automatically use a time-based UUID instead of a randomly-generated UUID.
.TP
.BI \-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 with e2undo(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 named
tune2fs-\fIdevice\fR.e2undo in the directory specified via the
\fIE2FSPROGS_UNDO_DIR\fR environment variable.

WARNING: The undo file cannot be used to recover from a power or system crash.
.SH BUGS
We haven't found any bugs yet.  That doesn't mean there aren't any...
.SH AUTHOR
.B tune2fs
was written by Remy Card <Remy.Card@linux.org>.  It is currently being
maintained by Theodore Ts'o <tytso@alum.mit.edu>.
.B 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>.
.SH AVAILABILITY
.B tune2fs
is part of the e2fsprogs package and is available from 
http://e2fsprogs.sourceforge.net.
.SH SEE ALSO
.BR debugfs (8),
.BR dumpe2fs (8),
.BR e2fsck (8),
.BR mke2fs (8),
.BR ext4 (5)
