.\" -*- 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 MKE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
mke2fs \- create an ext2/ext3/ext4 filesystem
.SH SYNOPSIS
.B mke2fs
[
.B \-c
|
.B \-l
.I filename
]
[
.B \-b
.I block-size
]
[
.B \-C
.I cluster-size
]
[
.B \-d
.I root-directory
]
[
.B \-D
]
[
.B \-g
.I blocks-per-group
]
[
.B \-G
.I number-of-groups
]
[
.B \-i
.I bytes-per-inode
]
[
.B \-I
.I inode-size
]
[
.B \-j
]
[
.B \-J
.I journal-options
]
[
.B \-N
.I number-of-inodes
]
[
.B \-n
]
[
.B \-m
.I reserved-blocks-percentage
]
[
.B \-o
.I creator-os
]
[
.B \-O
[^]\fIfeature\fR[,...]
]
[
.B \-q
]
[
.B \-r
.I fs-revision-level
]
[
.B \-E
.I extended-options
]
[
.B \-v
]
[
.B \-F
]
[
.B \-L
.I volume-label
]
[
.B \-M
.I last-mounted-directory
]
[
.B \-S
]
[
.B \-t
.I fs-type
]
[
.B \-T
.I usage-type
]
[
.B \-U
.I UUID
]
[
.B \-V
]
[
.B \-e
.I errors-behavior
]
[
.B \-z
.I undo_file
]
.I device
[
.I fs-size
]
@JDEV@.sp
@JDEV@.B "mke2fs \-O journal_dev"
@JDEV@[
@JDEV@.B \-b
@JDEV@.I block-size
@JDEV@]
.\" No external-journal specific journal options yet (size is ignored)
.\" @JDEV@[
.\" @JDEV@.B \-J
.\" @JDEV@.I journal-options
.\" @JDEV@]
@JDEV@[
@JDEV@.B \-L
@JDEV@.I volume-label
@JDEV@]
@JDEV@[
@JDEV@.B \-n
@JDEV@]
@JDEV@[
@JDEV@.B \-q
@JDEV@]
@JDEV@[
@JDEV@.B \-v
@JDEV@]
@JDEV@.I external-journal
@JDEV@[
@JDEV@.I fs-size
@JDEV@]
.SH DESCRIPTION
.B mke2fs
is used to create an ext2, ext3, or ext4 filesystem, usually in a disk
partition (or file) named by
.IR device .
.PP
The file system size is specified by
.IR fs-size .
If
.I fs-size
does not have a suffix, it is interpreted as power-of-two kilobytes,
unless the
.B \-b
.I blocksize
option is specified, in which case
.I fs-size
is interpreted as the number of
.I blocksize
blocks.   If the fs-size is suffixed by 'k', 'm', 'g', 't'
(either upper-case or lower-case), then it is interpreted in
power-of-two kilobytes, megabytes, gigabytes, terabytes, etc.
If
.I fs-size
is omitted,
.B mke2fs
will create the file system based on the device size.
.PP
If
.B mke2fs
is run as
.B mkfs.XXX
(i.e.,
.BR mkfs.ext2 ,
.BR mkfs.ext3 ,
or
.BR mkfs.ext4 )
the option
.B \-t
.I XXX
is implied; so
.B mkfs.ext3
will create a file system for use with ext3,
.B mkfs.ext4
will create a file system for use with ext4, and so on.
.PP
The defaults of the parameters for the newly created filesystem, if not
overridden by the options listed below, are controlled by the
.B /etc/mke2fs.conf
configuration file.  See the
.BR mke2fs.conf (5)
manual page for more details.
.SH OPTIONS
.TP
.BI \-b " block-size"
Specify the size of blocks in bytes.  Valid block-size values are 1024,
2048 and 4096 bytes per block.  If omitted,
block-size is heuristically determined by the filesystem size and
the expected usage of the filesystem (see the
.B \-T
option).  If
.I block-size
is preceded by a negative sign ('-'), then
.B mke2fs
will use heuristics to determine the
appropriate block size, with the constraint that the block size will be
at least
.I block-size
bytes.  This is useful for certain hardware devices which require that
the blocksize be a multiple of 2k.
.TP
.B \-c
Check the device for bad blocks before creating the file system.  If
this option is specified twice, then a slower read-write
test is used instead of a fast read-only test.
.TP
.B \-C " cluster-size"
Specify the size of cluster in bytes for filesystems using the bigalloc
feature.  Valid cluster-size values are from 2048 to 256M bytes per
cluster.  This can only be specified if the bigalloc feature is
enabled.  (See the
.B ext4 (5)
man page for more details about bigalloc.)   The default cluster size if
bigalloc is enabled is 16 times the block size.
.TP
.BI \-d " root-directory"
Copy the contents of the given directory into the root directory of the
filesystem.
.TP
.B \-D
Use direct I/O when writing to the disk.  This avoids mke2fs dirtying a
lot of buffer cache memory, which may impact other applications running
on a busy server.  This option will cause mke2fs to run much more
slowly, however, so there is a tradeoff to using direct I/O.
.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
.B \-E
option used to be
.B \-R
in earlier versions of
.BR mke2fs .
The
.B \-R
option is still accepted for backwards compatibility, but is deprecated.
The following extended options are supported:
.RS 1.2i
.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 the next disk, which is sometimes referred to as the
.I chunk size.
This mostly affects placement of filesystem metadata like bitmaps at
.B mke2fs
time to avoid placing them on a single disk, which can hurt performance.
It may also be used by the 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 stride-size * N, where
N is the number of data-bearing disks in the RAID (e.g. for RAID 5 there is one
parity disk, so N will be the number of disks in the array minus 1).
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 offset= offset
Create the filesystem at an offset from the beginning of the device or
file.  This can be useful when creating disk images for virtual machines.
.TP
.BI resize= max-online-resize
Reserve enough space so that the block group descriptor table can grow
to support a filesystem that has
.I max-online-resize
blocks.
.TP
.B lazy_itable_init\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
If enabled and the uninit_bg feature is enabled, the inode table will
not be fully initialized by
.BR mke2fs .
This speeds up filesystem
initialization noticeably, but it requires the kernel to finish
initializing the filesystem in the background when the filesystem is
first mounted.  If the option value is omitted, it defaults to 1 to
enable lazy inode table zeroing.
.TP
.B lazy_journal_init\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
If enabled, the journal inode will not be fully zeroed out by
.BR mke2fs .
This speeds up filesystem initialization noticeably, but carries some
small risk if the system crashes before the journal has been overwritten
entirely one time.  If the option value is omitted, it defaults to 1 to
enable lazy journal inode zeroing.
.TP
.BI no_copy_xattrs
Normally
.B mke2fs
will copy the extended attributes of the files in the directory
hierarchy specified via the (optional)
.B \-d
option.  This will disable the copy and leaves the files in the newly
created file system without any extended attributes.
.TP
.BI num_backup_sb= <0|1|2>
If the
.B sparse_super2
file system feature is enabled this option controls whether there will
be 0, 1, or 2 backup superblocks created in the file system.
.TP
.B packed_meta_blocks\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
Place the allocation bitmaps and the inode table at the beginning of the
disk.  This option requires that the flex_bg file system feature to be
enabled in order for it to have effect, and will also create the journal
at the beginning of the file system.  This option is useful for flash
devices that use SLC flash at the beginning of the disk.
It also maximizes the range of contiguous data blocks, which
can be useful for certain specialized use cases, such as supported
Shingled Drives.
.TP
.BI root_owner [=uid:gid]
Specify the numeric user and group ID of the root directory.  If no UID:GID
is specified, use the user and group ID of the user running \fBmke2fs\fR.
In \fBmke2fs\fR 1.42 and earlier the UID and GID of the root directory were
set by default to the UID and GID of the user running the mke2fs command.
The \fBroot_owner=\fR option allows explicitly specifying these values,
and avoid side-effects for users that do not expect the contents of the
filesystem to change based on the user running \fBmke2fs\fR.
.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
.BI discard
Attempt to discard blocks at mkfs time (discarding blocks initially is useful
on solid state devices and sparse / thin-provisioned storage). When the device
advertises that discard also zeroes data (any subsequent read after the discard
and before write returns zero), then mark all not-yet-zeroed inode tables as
zeroed. This significantly speeds up filesystem initialization. This is set
as default.
.TP
.BI nodiscard
Do not attempt to discard blocks at mkfs time.
.TP
.BI quotatype
Specify the which  quota types (usrquota, grpquota, prjquota) which
should be enabled in the created file system.  The argument of this
extended option should be a colon separated list.  This option has
effect only if the
.B quota
feature is set.   The default quota types to be initialized if this
option is not specified is both user and group quotas.  If the project
feature is enabled that project quotas will be initialized as well.
.RE
.TP
.B \-F
Force
.B mke2fs
to create a filesystem, even if the specified device is not a partition
on a block special device, or if other parameters do not make sense.
In order to force
.B mke2fs
to create a filesystem even if the filesystem appears to be in use
or is mounted (a truly dangerous thing to do), this option must be
specified twice.
.TP
.BI \-g " blocks-per-group"
Specify the number of blocks in a block group.  There is generally no
reason for the user to ever set this parameter, as the default is optimal
for the filesystem.  (For administrators who are creating
filesystems on RAID arrays, it is preferable to use the
.I stride
RAID parameter as part of the
.B \-E
option rather than manipulating the number of blocks per group.)
This option is generally used by developers who
are developing test cases.
.IP
If the bigalloc feature is enabled, the
.B \-g
option will specify the number of clusters in a block group.
.TP
.BI \-G " number-of-groups"
Specify the number of block groups that will be packed together to
create a larger virtual block group (or "flex_bg group") in an
ext4 filesystem.  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
.B flex_bg
filesystem feature is enabled.
.TP
.BI \-i " bytes-per-inode"
Specify the bytes/inode ratio.
.B mke2fs
creates an inode for every
.I bytes-per-inode
bytes of space on the disk.  The larger the
.I bytes-per-inode
ratio, the fewer inodes will be created.  This value generally shouldn't
be smaller than the blocksize of the filesystem, since in that case more
inodes would be made than can ever be used.  Be warned that it is not
possible to change this ratio on a filesystem after it is created, so be
careful deciding the correct value for this parameter.  Note that resizing
a filesystem changes the number of inodes to maintain this ratio.
.TP
.BI \-I " inode-size"
Specify the size of each inode in bytes.
The
.I inode-size
value must be a power of 2 larger or equal to 128.  The larger the
.I inode-size
the more space the inode table will consume, and this reduces the usable
space in the filesystem and can also negatively impact performance.
It is not
possible to change this value after the filesystem is created.
.IP
In kernels after 2.6.10 and some
earlier vendor kernels it is possible to utilize inodes larger than
128 bytes to store
extended attributes for improved performance.
Extended attributes
stored in large inodes are not visible with older kernels, and such
filesystems will not be mountable with 2.4 kernels at all.
.IP
The default inode size is controlled by the
.BR mke2fs.conf (5)
file.  In the
.B mke2fs.conf
file shipped with e2fsprogs, the default inode size is 256 bytes for
most file systems, except for small file systems where the inode size
will be 128 bytes.
.TP
.B \-j
Create the filesystem with an ext3 journal.  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.
.TP
.BI \-J " journal-options"
Create the ext3 journal using options specified on the command-line.
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 an internal journal (i.e., stored inside 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 or half the total
file system size (whichever is smaller)
.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 already have been 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 have been created with the
@JDEV@same block size as the new filesystem.
@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
.BI \-l " filename"
Read the bad blocks list from
.IR filename .
Note that the block numbers in the bad block list must be generated
using the same block size as used by
.BR mke2fs .
As a result, the
.B \-c
option to
.B mke2fs
is a much simpler and less error-prone method of checking a disk for bad
blocks before formatting it, as
.B mke2fs
will automatically pass the correct parameters to the
.B badblocks
program.
.TP
.BI \-L " new-volume-label"
Set the volume label for the filesystem to
.IR new-volume-label .
The maximum length of the
volume label is 16 bytes.
.TP
.BI \-m " reserved-blocks-percentage"
Specify the percentage of the filesystem blocks reserved for
the super-user.  This avoids fragmentation, and allows root-owned
daemons, such as
.BR syslogd (8),
to continue to function correctly after non-privileged processes are
prevented from writing to the filesystem.  The default percentage
is 5%.
.TP
.BI \-M " last-mounted-directory"
Set the last mounted directory for the filesystem.  This might be useful
for the sake of utilities that key off of the last mounted directory to
determine where the filesystem should be mounted.
.TP
.B \-n
Causes
.B mke2fs
to not actually create a filesystem, but display what it
would do if it were to create a filesystem.  This can be used to
determine the location of the backup superblocks for a particular
filesystem, so long as the
.B mke2fs
parameters that were passed when the
filesystem was originally created are used again.  (With the
.B \-n
option added, of course!)
.TP
.BI \-N " number-of-inodes"
Overrides the default calculation of the number of inodes that should be
reserved for the filesystem (which is based on the number of blocks and
the
.I bytes-per-inode
ratio).  This allows the user to specify the number
of desired inodes directly.
.TP
.BI \-o " creator-os"
Overrides the default value of the "creator operating system" field of the
filesystem.  The creator field is set by default to the name of the OS the
.B mke2fs
executable was compiled for.
.TP
.B "\-O \fR[^]\fIfeature\fR[,...]"
Create a filesystem with the given features (filesystem options),
overriding the default filesystem options.  The features that are
enabled by default are specified by the
.I base_features
relation, either in the
.I [defaults]
section in the
.B /etc/mke2fs.conf
configuration file,
or in the
.I [fs_types]
subsections for the usage types as specified by the
.B \-T
option, further modified by the
.I features
relation found in the
.I [fs_types]
subsections for the filesystem and usage types.  See the
.BR mke2fs.conf (5)
manual page for more details.
The filesystem type-specific configuration setting found in the
.I [fs_types]
section will override the global default found in
.IR [defaults] .
.sp
The filesystem feature set will be further edited
using either the feature set specified by this option,
or if this option is not given, by the
.I default_features
relation for the filesystem type being created, or in the
.I [defaults]
section of the configuration file.
.sp
The filesystem feature set is comprised of a list of features, separated
by commas, that are to be enabled.  To disable a feature, simply
prefix the feature name with a caret ('^') character.
Features with dependencies will not be removed successfully.
The pseudo-filesystem feature "none" will clear all filesystem features.
.TP
For more information about the features which can be set, please see
the manual page
.BR ext4 (5).
.TP
.B \-q
Quiet execution.  Useful if
.B mke2fs
is run in a script.
.TP
.BI \-r " revision"
Set the filesystem revision for the new filesystem.  Note that 1.2
kernels only support revision 0 filesystems.  The default is to
create revision 1 filesystems.
.TP
.B \-S
Write superblock and group descriptors only.  This is an extreme
measure to be taken only in the very unlikely case that all of
the superblock and backup superblocks are corrupted, and a last-ditch
recovery method is desired by experienced users.  It causes
.B mke2fs
to reinitialize the superblock and group descriptors, while not
touching the inode table and the block and inode bitmaps.  The
.B e2fsck
program should be run immediately after this option is used, and there
is no guarantee that any data will be salvageable.  Due to the wide
variety of possible options to
.BR mke2fs
that affect the on-disk layout, it is critical to specify exactly
the same format options, such as blocksize, fs-type, feature flags, and
other tunables when using this option, or the filesystem will be further
corrupted.  In some cases, such as filesystems that have been resized,
or have had features enabled after format time, it is impossible to
overwrite all of the superblocks correctly, and at least some filesystem
corruption will occur.  It is best to run this on a full copy of the
filesystem so other options can be tried if this doesn't work.
.\" .TP
.\" .BI \-t " test"
.\" Check the device for bad blocks before creating the file system
.\" using the specified test.
.TP
.BI \-t " fs-type"
Specify the filesystem type (i.e., ext2, ext3, ext4, etc.) that is
to be created.
If this option is not specified,
.B mke2fs
will pick a default either via how
the command was run (for example, using a name of the form mkfs.ext2,
mkfs.ext3, etc.) or via a default as defined by the
.B /etc/mke2fs.conf
file.   This option controls which filesystem options are used by
default, based on the
.B fstypes
configuration stanza in
.BR /etc/mke2fs.conf .
.sp
If the
.B \-O
option is used to explicitly add or remove filesystem options that
should be set in the newly created filesystem, the
resulting filesystem may not be supported by the requested
.IR fs-type .
(e.g., "\fBmke2fs \-t ext3 \-O extent /dev/sdXX\fR" will create a
filesystem that is not supported by the ext3 implementation as found in
the Linux kernel; and "\fBmke2fs \-t ext3 \-O ^has_journal /dev/hdXX\fR"
will create a filesystem that does not have a journal and hence will not
be supported by the ext3 filesystem code in the Linux kernel.)
.TP
.BI \-T " usage-type[,...]"
Specify how the filesystem is going to be used, so that
.B mke2fs
can choose optimal filesystem parameters for that use.  The usage
types that are supported are defined in the configuration file
.BR /etc/mke2fs.conf .
The user may specify one or more usage types
using a comma separated list.
.sp
If this option is is not specified,
.B mke2fs
will pick a single default usage type based on the size of the filesystem to
be created.  If the filesystem size is less than 3 megabytes,
.B mke2fs
will use the filesystem type
.IR floppy .
If the filesystem size is greater than or equal to 3 but less than
512 megabytes,
.BR mke2fs (8)
will use the filesystem type
.IR small .
If the filesystem size is greater than or equal to 4 terabytes but less than
16 terabytes,
.BR mke2fs (8)
will use the filesystem type
.IR big .
If the filesystem size is greater than or equal to 16 terabytes,
.BR mke2fs (8)
will use the filesystem type
.IR huge .
Otherwise,
.BR mke2fs (8)
will use the default filesystem type
.IR default .
.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
.TP
.B \-v
Verbose execution.
.TP
.B \-V
Print the version number of
.B mke2fs
and exit.
.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
mke2fs-\fIdevice\fR.e2undo in the directory specified via the
\fIE2FSPROGS_UNDO_DIR\fR environment variable or the \fIundo_dir\fR directive
in the configuration file.

WARNING: The undo file cannot be used to recover from a power or system crash.
.SH ENVIRONMENT
.TP
.BI MKE2FS_SYNC
If set to non-zero integer value, its value is used to determine how often
.BR sync (2)
is called during inode table initialization.
.TP
.BI MKE2FS_CONFIG
Determines the location of the configuration file (see
.BR mke2fs.conf (5)).
.TP
.BI MKE2FS_FIRST_META_BG
If set to non-zero integer value, its value is used to determine first meta
block group. This is mostly for debugging purposes.
.TP
.BI MKE2FS_DEVICE_SECTSIZE
If set to non-zero integer value, its value is used to determine logical
sector size of the
.IR device .
.TP
.BI MKE2FS_DEVICE_PHYS_SECTSIZE
If set to non-zero integer value, its value is used to determine physical
sector size of the
.IR device .
.TP
.BI MKE2FS_SKIP_CHECK_MSG
If set, do not show the message of filesystem automatic check caused by
mount count or check interval.
.SH AUTHOR
This version of
.B mke2fs
has been written by Theodore Ts'o <tytso@mit.edu>.
.SH AVAILABILITY
.B mke2fs
is part of the e2fsprogs package and is available from
http://e2fsprogs.sourceforge.net.
.SH SEE ALSO
.BR mke2fs.conf (5),
.BR badblocks (8),
.BR dumpe2fs (8),
.BR e2fsck (8),
.BR tune2fs (8),
.BR ext4 (5)
