.\" -*- 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 \-D
]
[
.B \-f
.I fragment-size
]
[
.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
]
.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
.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 " 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 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.
@QUOTA_MAN_COMMENT@.TP
@QUOTA_MAN_COMMENT@.BI quotatype
@QUOTA_MAN_COMMENT@Specify which quota type ('usr' or 'grp') is to be
@QUOTA_MAN_COMMENT@initialized. This option has effect only if the
@QUOTA_MAN_COMMENT@.B quota
@QUOTA_MAN_COMMENT@feature is set. Without this extended option, the default
@QUOTA_MAN_COMMENT@behavior is to initialize both user and group quotas.
.RE
.TP
.BI \-f " fragment-size"
Specify the size of fragments in bytes.
.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 numer 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 useful if all of
the superblock and backup superblocks are corrupted, and a last-ditch
recovery method is desired.  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.  It is critical to
specify the correct filesystem blocksize when using this option,
or there is no chance of recovery.
.\" .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"
Create the filesystem with the specified UUID.
.TP
.B \-v
Verbose execution.
.TP
.B \-V
Print the version number of
.B mke2fs
and exit.
.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 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 BUGS
.B mke2fs
accepts the
.B \-f
option but currently ignores it because the second
extended file system does not support fragments yet.
.br
There may be other ones.  Please, report them to the author.
.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)
