.\" -*- nroff -*-
.\" Copyright 2006 by Theodore Ts'o.  All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\"
.TH mke2fs.conf 5 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
mke2fs.conf \- Configuration file for mke2fs
.SH DESCRIPTION
.I mke2fs.conf
is the configuration file for
.BR mke2fs (8).
It controls the default parameters used by
.BR mke2fs (8)
when it is creating ext2, ext3, or ext4 file systems.
.PP
The
.I mke2fs.conf
file uses an INI-style format.  Stanzas, or top-level sections, are
delimited by square braces: [ ].  Within each section, each line
defines a relation, which assigns tags to values, or to a subsection,
which contains further relations or subsections.
.\" Tags can be assigned multiple values
An example of the INI-style format used by this configuration file
follows below:
.P
	[section1]
.br
		tag1 = value_a
.br
		tag1 = value_b
.br
		tag2 = value_c
.P
	[section 2]
.br
		tag3 = {
.br
			subtag1 = subtag_value_a
.br
			subtag1 = subtag_value_b
.br
			subtag2 = subtag_value_c
.br
		}
.br
		tag1 = value_d
.br
		tag2 = value_e
.br
	}
.P
Comments are delimited by a semicolon (';') or a hash ('#') character
at the beginning of the comment, and are terminated by the end of
line character.
.P
Tags and values must be quoted using double quotes if they contain
spaces.  Within a quoted string, the standard backslash interpretations
apply: "\en" (for the newline character),
"\et" (for the tab character), "\eb" (for the backspace character),
and "\e\e" (for the backslash character).
.P
Some relations expect a boolean value.  The parser is quite liberal on
recognizing ``yes'', '`y'', ``true'', ``t'', ``1'', ``on'', etc. as a
boolean true value, and ``no'', ``n'', ``false'', ``nil'', ``0'',
``off'' as a boolean false value.
.P
The following stanzas are used in the
.I mke2fs.conf
file.  They will be described in more detail in future sections of this
document.
.TP
.I [options]
Contains relations which influence how mke2fs behaves.
.TP
.I [defaults]
Contains relations which define the default parameters
used by
.BR mke2fs (8).
In general, these defaults may be overridden by a definition in the
.B fs_types
stanza, or by a command-line option provided by the user.
.TP
.I [fs_types]
Contains relations which define defaults that should be used for specific
file system and usage types.  The file system type and usage type can be
specified explicitly using
the
.BR \-t and \-T
options to
.BR mke2fs (8),
respectively.
.TP
.I [devices]
Contains relations which define defaults for specific devices.
.SH THE [options] STANZA
The following relations are defined in the
.I [options]
stanza.
.TP
.I proceed_delay
If this relation is set to a positive integer, then mke2fs will
wait
.I proceed_delay
seconds after asking the user for permission to proceed and
then continue, even if the
user has not answered the question.  Defaults to 0, which means to wait
until the user answers the question one way or another.
.TP
.I sync_kludge
If this relation is set to a positive integer, then while writing the
inode table, mke2fs will request the operating system flush out pending
writes to initialize the inode table every
.I sync_kludge
block groups.   This is needed to work around buggy kernels that don't
handle writeback throttling correctly.
.SH THE [defaults] STANZA
The following relations are defined in the
.I [defaults]
stanza.
.TP
.I creator_os
This relation specifies the "creator operating system" for the
file system unless it is overridden on the command line.
The default value is the OS for which the
.B mke2fs
executable was compiled.
.TP
.I fs_type
This relation specifies the default file system type if the user does not
specify it via the
.B \-t
option, or if
.B mke2fs
is not started using a program name of the form
.BI mkfs. fs-type\fR.
If both the user and the
.B mke2fs.conf
file do not specify a default file system type, mke2fs will use a
default file system type of
.I ext3
if a journal was requested via a command-line option, or
.I ext2
if not.
.TP
.I undo_dir
This relation specifies the directory where the undo file should be
stored.  It can be overridden via the
.B E2FSPROGS_UNDO_DIR
environment variable.  If the directory location is set to the value
.IR none ,
.B mke2fs
will not create an undo file.
.PP
In addition, any tags that can be specified in a per-file system tags
subsection as defined below (e.g.,
.IR blocksize ,
.IR hash_alg ,
.IR inode_ratio ,
.IR inode_size ,
.IR reserved_ratio ,
etc.) can also be specified in the
.I defaults
stanza to specify the default value to be used if the user does not
specify one on the command line, and the file system-type
specific section of the configuration file does not specify a default value.
.SH THE [fs_types] STANZA
Each tag in the
.I [fs_types]
stanza names a file system type or usage type which can be specified via the
.B \-t
or
.B \-T
options to
.BR mke2fs (8),
respectively.
.P
The
.B mke2fs
program constructs a list of fs_types by concatenating the file system
type (i.e., ext2, ext3, etc.) with the usage type list.  For most
configuration options,
.B mke2fs
will look for a subsection in the
.I [fs_types]
stanza corresponding with each entry in the constructed list, with later
entries overriding earlier file system or usage types.
For
example, consider the following
.B mke2fs.conf
fragment:
.P
[defaults]
.br
	base_features = sparse_super,filetype,resize_inode,dir_index
.br
	blocksize = 4096
.br
	inode_size = 256
.br
	inode_ratio = 16384
.br

.br
[fs_types]
.br
	ext3 = {
.br
		features = has_journal
.br
	}
.br
	ext4 = {
.br
		features = extents,flex_bg
.br
		inode_size = 256
.br
	}
.br
	small = {
.br
		blocksize = 1024
.br
		inode_ratio = 4096
.br
	}
.br
	floppy = {
.br
		features = ^resize_inode
.br
		blocksize = 1024
.br
		inode_size = 128
.br
	}
.P
If mke2fs started with a program name of
.BR mke2fs.ext4 ,
then the file system type of ext4 will be used.  If the file system is
smaller than 3 megabytes, and no usage type is specified, then
.B mke2fs
will use a default
usage type of
.IR floppy .
This results in an fs_types list of "ext4, floppy".   Both the ext4
subsection and the floppy subsection define an
.I inode_size
relation, but since the later entries in the fs_types list supersede
earlier ones, the configuration parameter for fs_types.floppy.inode_size
will be used, so the file system  will have an inode size of 128.
.P
The exception to this resolution is the
.I features
tag, which specifies a set of changes to the features used by the
file system, and which is cumulative.  So in the above example, first
the configuration relation defaults.base_features would enable an
initial feature set with the sparse_super, filetype, resize_inode, and
dir_index features enabled.  Then configuration relation
fs_types.ext4.features would enable the extents and flex_bg
features, and finally the configuration relation
fs_types.floppy.features would remove
the resize_inode feature, resulting in a file system feature set
consisting of the sparse_super, filetype, dir_index,
extents_and flex_bg features.
.P
For each file system type, the following tags may be used in that
fs_type's subsection.   These tags may also be used in the
.I default
section:
.TP
.I base_features
This relation specifies the features which are initially enabled for this
file system type.  Only one
.I base_features
will be used, so if there are multiple entries in the fs_types list
whose subsections define the
.I base_features
relation, only the last will be used by
.BR mke2fs (8).
.TP
.I enable_periodic_fsck
This boolean relation specifies whether periodic file system checks should be
enforced at boot time.  If set to true, checks will be forced every
180 days, or after a random number of mounts.  These values may
be changed later via the
.B -i
and
.B -c
command-line options to
.BR tune2fs (8).
.TP
.I errors
Change the behavior of the kernel code when errors are detected.
In all cases, a file system error will cause
.BR e2fsck (8)
to check the file system on the next boot.
.I errors
can be one of the following:
.RS 1.2i
.TP 1.2i
.B continue
Continue normal execution.
.TP
.B remount-ro
Remount file system read-only.
.TP
.B panic
Cause a kernel panic.
.RE
.TP
.I features
This relation specifies a comma-separated list of features edit
requests which modify the feature set
used by the newly constructed file system.  The syntax is the same as the
.B -O
command-line option to
.BR mke2fs (8);
that is, a feature can be prefixed by a caret ('^') symbol to disable
a named feature.  Each
.I feature
relation specified in the fs_types list will be applied in the order
found in the fs_types list.
.TP
.I force_undo
This boolean relation, if set to a value of true, forces
.B mke2fs
to always try to create an undo file, even if the undo file might be
huge and it might extend the time to create the file system image
because the inode table isn't being initialized lazily.
.TP
.I default_features
This relation specifies set of features which should be enabled or
disabled after applying the features listed in the
.I base_features
and
.I features
relations.  It may be overridden by the
.B -O
command-line option to
.BR mke2fs (8).
.TP
.I auto_64-bit_support
This relation is a boolean which specifies whether
.BR mke2fs (8)
should automatically add the 64bit feature if the number of blocks for
the file system requires this feature to be enabled.  The resize_inode
feature is also automatically disabled since it doesn't support 64-bit
block numbers.
.TP
.I default_mntopts
This relation specifies the set of mount options which should be enabled
by default.  These may be changed at a later time with the
.B -o
command-line option to
.BR tune2fs (8).
.TP
.I blocksize
This relation specifies the default blocksize if the user does not
specify a blocksize on the command line.
.TP
.I lazy_itable_init
This boolean relation specifies whether the inode table should
be lazily initialized.  It only has meaning if the uninit_bg feature is
enabled.  If lazy_itable_init is true and the uninit_bg feature is
enabled,  the inode table will
not be fully initialized by
.BR mke2fs (8).
This speeds up file system
initialization noticeably, but it requires the kernel to finish
initializing the file system in the background when the file system is
first mounted.
.TP
.I lazy_journal_init
This boolean relation specifies whether the journal inode should be
lazily initialized. It only has meaning if the has_journal feature is
enabled. If lazy_journal_init is true, the journal inode will not be
fully zeroed out by
.BR mke2fs .
This speeds up file system initialization noticeably, but carries some
small risk if the system crashes before the journal has been overwritten
entirely one time.
.TP
.I journal_location
This relation specifies the location of the journal.
.TP
.I num_backup_sb
This relation indicates whether file systems with the
.B sparse_super2
feature enabled should be created with 0, 1, or 2 backup superblocks.
.TP
.I packed_meta_blocks
This boolean relation specifies whether the allocation bitmaps, inode
table, and journal should be located at the beginning of the file system.
.TP
.I inode_ratio
This relation specifies the default inode ratio if the user does not
specify one on the command line.
.TP
.I inode_size
This relation specifies the default inode size if the user does not
specify one on the command line.
.TP
.I reserved_ratio
This relation specifies the default percentage of file system blocks
reserved for the super-user, if the user does not specify one on the command
line.
.TP
.I hash_alg
This relation specifies the default hash algorithm used for the
new file systems with hashed b-tree directories.  Valid algorithms
accepted are:
.IR legacy ,
.IR half_md4 ,
and
.IR tea .
.TP
.I flex_bg_size
This relation specifies the number of block groups that will be packed
together to create one large virtual block group on an ext4 file system.
This improves meta-data locality and performance on meta-data heavy
workloads.  The number of groups must be a power of 2 and may only be
specified if the flex_bg file system feature is enabled.
.TP
.I options
This relation specifies additional extended options which should be
treated by
.BR mke2fs (8)
as if they were prepended to the argument of the
.B -E
option.  This can be used to configure the default extended options used
by
.BR mke2fs (8)
on a per-file system type basis.
.TP
.I discard
This boolean relation specifies whether the
.BR mke2fs (8)
should attempt to discard device prior to file system creation.
.TP
.I set_raid_stride
This relation specifies whether the file sytem's RAID stride size is set
from the block device if available.  Valid values are:
.IR always ,
.IR disk ,
.IR never .
The default value is
.IR always .
.TP
.I set_raid_stripe
This relation specifies whether the file sytem's RAID stripe size is set
from the block device if available.  Valid values are:
.IR always ,
.IR disk ,
.IR never .
The default value is
.IR disk .
.TP
.I cluster_size
This relation specifies the default cluster size if the bigalloc file
system feature is enabled.  It can be overridden via the
.B \-C
command line option to
.BR mke2fs (8)
.TP
.I make_hugefiles
This boolean relation enables the creation of pre-allocated files as
part of formatting the file system.  The extent tree blocks for these
pre-allocated files will be placed near the beginning of the file
system, so that if all of the other metadata blocks are also configured
to be placed near the beginning of the file system (by disabling the
backup superblocks, using the packed_meta_blocks option, etc.), the data
blocks of the pre-allocated files will be contiguous.
.TP
.I hugefiles_dir
This relation specifies the directory where huge files are created,
relative to the file system root.
.TP
.I hugefiles_uid
This relation controls the user ownership for all of the files and
directories created by the
.I make_hugefiles
feature.
.TP
.I hugefiles_gid
This relation controls the group ownership for all of the files and
directories created by the
.I make_hugefiles
feature.
.TP
.I hugefiles_umask
This relation specifies the umask used when creating the files and
directories by the
.I make_hugefiles
feature.
.TP
.I num_hugefiles
This relation specifies the number of huge files to be created.  If this
relation is not specified, or is set to zero, and the
.I hugefiles_size
relation is non-zero, then
.I make_hugefiles
will create as many huge files as can fit to fill the entire file system.
.TP
.I hugefiles_slack
This relation specifies how much space should be reserved for other
files.
.TP
.I hugefiles_size
This relation specifies the size of the huge files.  If this relation is
not specified, the default is to fill the entire file system.
.TP
.I hugefiles_align
This relation specifies the alignment for the start block of the huge
files.  It also forces the size of huge files to be a multiple of the
requested alignment.  If this relation is not specified, no alignment
requirement will be imposed on the huge files.
.TP
.I hugefiles_align_disk
This relations specifies whether the alignment should be relative to the
beginning of the hard drive (assuming that the starting offset of the
partition is available to mke2fs).  The default value is false, which
will cause hugefile alignment to be relative to the beginning of the
file system.
.TP
.I hugefiles_name
This relation specifies the base file name for the huge files.
.TP
.I hugefiles_digits
This relation specifies the (zero-padded) width of the field for the
huge file number.
.TP
.I warn_y2038_dates
This boolean relation specifies whether mke2fs will issue a warning
when creating a file system with 128 byte inodes (and so therefore will
not support dates after January 19th, 2038).  The default value is true,
except for file systems created for the GNU Hurd since it only supports
128-byte inodes.
.TP
.I zero_hugefiles
This boolean relation specifies whether or not zero blocks will be
written to the hugefiles while
.BR mke2fs (8)
is creating them.  By default, zero blocks will be written to the huge
files to avoid stale data from being made available to potentially
untrusted user programs, unless the device supports a discard/trim
operation which will take care of zeroing the device blocks.  By setting
.I zero_hugefiles
to false, this step will always be skipped, which can be useful if it is
known that the disk has been previously erased, or if the user programs
that will have access to the huge files are trusted to not reveal stale
data.
.TP
.I encoding
This relation defines the file name encoding to be used if the casefold
feature is enabled.   Currently the only valid encoding is utf8-12.1 or
utf8, which requests the most recent Unicode version; since 12.1 is the only
available Unicode version, utf8 and utf8-12.1 have the same result.
.I encoding_flags
This relation defines encoding-specific flags.  For utf8 encodings, the
only available flag is strict, which will cause attempts to create file
names containing invalid Unicode characters to be rejected by the
kernel.  Strict mode is not enabled by default.
.SH THE [devices] STANZA
Each tag in the
.I [devices]
stanza names device name so that per-device defaults can be specified.
.TP
.I fs_type
This relation specifies the default parameter for the
.B \-t
option, if this option isn't specified on the command line.
.TP
.I usage_types
This relation specifies the default parameter for the
.B \-T
option, if this option isn't specified on the command line.
.SH FILES
.TP
.I /etc/mke2fs.conf
The configuration file for
.BR mke2fs (8).
.SH SEE ALSO
.BR mke2fs (8)
