MAN-J
Man PagesPricing
LoginGet Started
mke2fs(8)
Original
English • 600 lines
MKE2FS(8)		    System Manager's Manual		     MKE2FS(8)

NAME
       mke2fs - create an ext2/ext3/ext4 file system

SYNOPSIS
       mke2fs [ -c | -l filename ] [ -b block-size ] [ -C cluster-size ] [ -d
       root-directory|tarball ] [ -D ] [ -g blocks-per-group ] [ -G
       number-of-groups ] [ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [ -J
       journal-options ] [ -N number-of-inodes ] [ -n ] [ -m
       reserved-blocks-percentage ] [ -o creator-os ] [ -O [^]feature[,...] ]
       [ -q ] [ -E extended-options ] [ -v ] [ -F ] [ -L volume-label ] [ -M
       last-mounted-directory ] [ -S ] [ -t fs-type ] [ -T usage-type ] [ -U
       UUID ] [ -V ] [ -e errors-behavior ] [ -z undo_file ] device [ fs-size
       ]

       mke2fs -O journal_dev [ -b block-size ] [ -L volume-label ] [ -n ] [ -q
       ] [ -v ] external-journal [ fs-size ]

DESCRIPTION
       mke2fs is used to create an ext2, ext3, or ext4 file system, usually in
       a disk partition (or file) named by device.

       The file system size is specified by fs-size.  If fs-size does not have
       a suffix, it is interpreted as power-of-two kilobytes, unless the -b
       blocksize option is specified, in which case fs-size is interpreted as
       the number of 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
       fs-size is omitted, mke2fs will create the file system based on the
       device size.

       If mke2fs is run as mkfs.XXX (i.e., mkfs.ext2, mkfs.ext3, or mkfs.ext4)
       the option -t XXX is implied; so mkfs.ext3 will create a file system
       for use with ext3, mkfs.ext4 will create a file system for use with
       ext4, and so on.

       The defaults of the parameters for the newly created file system, if
       not overridden by the options listed below, are controlled by the
       /etc/mke2fs.conf configuration file.  See the mke2fs.conf(5) manual
       page for more details.

OPTIONS
       -b block-size
	      Specify the size of blocks in bytes.  Valid block-size values
	      are powers of two from 1024 up to 65536 (however note that the
	      kernel is able to mount only file systems with block-size
	      smaller or equal to the system page size - 4k on x86 systems, up
	      to 64k on ppc64 or aarch64 depending on kernel configuration).
	      If omitted, block-size is heuristically determined by the file
	      system size and the expected usage of the file system (see the
	      -T option).  In most common cases, the default block size is 4k.
	      If block-size is preceded by a negative sign ('-'), then mke2fs
	      will use heuristics to determine the appropriate block size,
	      with the constraint that the block size will be at least
	      block-size bytes.	 This is useful for certain hardware devices
	      which require that the blocksize be a multiple of 2k.

       -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.

       -C  cluster-size
	      Specify the size of cluster in bytes for file systems using the
	      bigalloc feature.	 Valid cluster-size values range from 2 to
	      32768 times the filesystem blocksize and must be a power of 2.
	      The cluster-size can only be specified if the bigalloc feature
	      is enabled.  (See the ext4 (5) man page for more details about
	      bigalloc.)   The default cluster size if bigalloc is enabled is
	      16 times the block size.

       -d root-directory|tarball
	      Copy the contents of the given directory or tarball into the
	      root directory of the file system. Tarball input is only
	      available if mke2fs was compiled with libarchive support enabled
	      and if the libarchive shared library is available at run-time.
	      The special value "-" will read a tarball from standard input.

       -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.

       -e error-behavior
	      Change the behavior of the kernel code when errors are detected.
	      In all cases, a file system error will cause e2fsck(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.

       -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 -E option used to be -R in earlier versions of
	      mke2fs.  The -R option is still accepted for backwards
	      compatibility, but is deprecated.	 The following extended
	      options are supported:

		   assume_storage_prezeroed[= <0 to disable, 1 to enable>]
			  If enabled, mke2fs assumes that the storage device
			  has been prezeroed, skips zeroing the journal and
			  inode tables, and annotates the block group flags to
			  signal that the inode table has been zeroed.

		   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 file
			  system initialization. This is set as default.

		   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, the encoding defined
			  in mke2fs.conf(5) is used.

		   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.	To disable a flag, add it to
			  the list with the prefix "no".

			  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.

		   lazy_itable_init[= <0 to disable, 1 to enable>]
			  If enabled and the uninit_bg feature is enabled, the
			  inode table will not be fully initialized by mke2fs.
			  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.  If the option
			  value is omitted, it defaults to 1 to enable lazy
			  inode table zeroing.

		   lazy_journal_init[= <0 to disable, 1 to enable>]
			  If enabled, the journal inode will not be fully
			  zeroed out by 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.  If the option
			  value is omitted, it defaults to 1 to enable lazy
			  journal inode zeroing.

		   mmp_update_interval=interval
			  Adjust the initial MMP update interval to interval
			  seconds.  Specifying an interval of 0 means to use
			  the default interval.	 The specified interval must
			  be less than 300 seconds.  Requires that the mmp
			  feature be enabled.  nodiscard Do not attempt to
			  discard blocks at mkfs time.

		   no_copy_xattrs
			  Normally mke2fs will copy the extended attributes of
			  the files in the directory hierarchy specified via
			  the (optional) -d option.  This will disable the
			  copy and leaves the files in the newly created file
			  system without any extended attributes.

		   num_backup_sb=<0|1|2>
			  If the 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.

		   offset=offset
			  Create the file system at an offset from the
			  beginning of the device or file.  This can be useful
			  when creating disk images for virtual machines.

		   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.

		   packed_meta_blocks[= <0 to disable, 1 to enable>]
			  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.

		   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 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.

		   resize=max-online-resize
			  Reserve enough space so that the block group
			  descriptor table can grow to support a file system
			  that has max-online-resize blocks.

		   revision=fs-revision
			  Specify the file system revision number.   Revision
			  0 file systems provide compatibility with pre-1.2
			  Linux kernels (dating from before 1995).   This is
			  only needed for testing or people who want to use
			  very early, historical Linux systems.	 The current
			  default (supported by all modern Linux systems) is
			  revision 1.

		   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 mke2fs.  In mke2fs
			  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
			  root_owner= option allows explicitly specifying
			  these values, and avoid side-effects for users that
			  do not expect the contents of the file system to
			  change based on the user running mke2fs.

		   root_perms[=permissions]
			  Specify the root directory permissions in octal
			  format. If no permissions are specified then the
			  root directory permissions would be set in
			  accordance with the default filesystem umask.

		   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
			  the next disk, which is sometimes referred to as the
			  chunk size.  This mostly affects placement of file
			  system metadata like bitmaps at mke2fs time to avoid
			  placing them on a single disk, which can hurt
			  performance.	It may also be used by the 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 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.

		   test_fs
			  Set a flag in the file system superblock indicating
			  that it may be mounted using experimental kernel
			  code, such as the ext4dev file system.

       -F     Force mke2fs to create a file system, 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 mke2fs to
	      create a file system even if the file system appears to be in
	      use or is mounted (a truly dangerous thing to do), this option
	      must be specified twice.

       -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 file system.  (For administrators
	      who are creating file systems on RAID arrays, it is preferable
	      to use the stride RAID parameter as part of the -E option rather
	      than manipulating the number of blocks per group.)  This option
	      is generally used by developers who are developing test cases.

	      If the bigalloc feature is enabled, the -g option will specify
	      the number of clusters in a block group.

       -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 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.

       -i bytes-per-inode
	      Specify the bytes/inode ratio.  mke2fs creates an inode for
	      every bytes-per-inode bytes of space on the disk.	 The larger
	      the bytes-per-inode ratio, the fewer inodes will be created.
	      This value generally shouldn't be smaller than the blocksize of
	      the file system, 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 file system after it is created, so be
	      careful deciding the correct value for this parameter.  Note
	      that resizing a file system changes the number of inodes to
	      maintain this ratio.

       -I inode-size
	      Specify the size of each inode in bytes.	The inode-size value
	      must be a power of 2 larger or equal to 128.  The larger the
	      inode-size the more space the inode table will consume, and this
	      reduces the usable space in the file system and can also
	      negatively impact performance.  It is not possible to change
	      this value after the file system is created.

	      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.

	      The default inode size is controlled by the mke2fs.conf(5) file.
	      In the mke2fs.conf file shipped with e2fsprogs, the default
	      inode size is 256 bytes for all file systems, except for the GNU
	      Hurd since it only supports 128-byte inodes.

       -j     Create the file system with an ext3 journal.  If the -J option
	      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.

       -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:

		   device=external-journal
			  Attach the file system to the journal block device
			  located on external-journal.	The external journal
			  must already have been created using the command

			  mke2fs -O journal_dev external-journal

			  Note that external-journal must have been created
			  with the same block size as the new file system.  In
			  addition, while there is support for attaching
			  multiple file systems to a single external journal,
			  the Linux kernel and e2fsck(8) do not currently
			  support shared external journals yet.

			  Instead of specifying a device name directly,
			  external-journal can also be specified by either
			  LABEL=label or UUID=UUID to locate the external
			  journal by either 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.  See also the -L option of
			  tune2fs(8).

		   fast_commit_size=fast-commit-size
			  Create an additional fast commit journal area of
			  size fast-commit-size kilobytes.  This option is
			  only valid if fast_commit feature is enabled on the
			  file system. If this option is not specified and if
			  fast_commit feature is turned on, fast commit area
			  size defaults to journal-size / 64 megabytes. The
			  total size of the journal with fast_commit feature
			  set is journal-size + ( fast-commit-size * 1024)
			  megabytes. 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).

		   location=journal-location
			  Specify the location of the journal.	The argument
			  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.

		   size=journal-size
			  Create an internal journal (i.e., stored inside the
			  file system) of size journal-size megabytes.	The
			  size of the journal must be at least 1024 file
			  system blocks (i.e., 1MB if using 1k blocks, 4MB if
			  using 4k blocks, etc.)  and may be no more than
			  10,240,000 file system blocks or half the total file
			  system size (whichever is smaller)

	      Only one of the size or device options can be given for a file
	      system.

       -l filename
	      Read the bad blocks list from filename.  Note that the block
	      numbers in the bad block list must be generated using the same
	      block size as used by mke2fs.  As a result, the -c option to
	      mke2fs is a much simpler and less error-prone method of checking
	      a disk for bad blocks before formatting it, as mke2fs will
	      automatically pass the correct parameters to the badblocks
	      program.

       -L new-volume-label
	      Set the volume label for the file system to new-volume-label.
	      The maximum length of the volume label is 16 bytes.

       -m reserved-blocks-percentage
	      Specify the percentage of the file system blocks reserved for
	      the super-user.  This avoids fragmentation, and allows root-
	      owned daemons, such as syslogd(8), to continue to function
	      correctly after non-privileged processes are prevented from
	      writing to the file system.  The default percentage is 5%.

       -M last-mounted-directory
	      Set the last mounted directory for the file system.  This might
	      be useful for the sake of utilities that key off of the last
	      mounted directory to determine where the file system should be
	      mounted.

       -n     Causes mke2fs to not actually create a file system, but display
	      what it would do if it were to create a file system.  This can
	      be used to determine the location of the backup superblocks for
	      a particular file system, so long as the mke2fs parameters that
	      were passed when the file system was originally created are used
	      again.  (With the -n option added, of course!)

       -N number-of-inodes
	      Overrides the default calculation of the number of inodes that
	      should be reserved for the file system (which is based on the
	      number of blocks and the bytes-per-inode ratio).	This allows
	      the user to specify the number of desired inodes directly.

       -o creator-os
	      Overrides the default value of the "creator operating system"
	      field of the file system.	 The creator field is set by default
	      to the name of the OS the mke2fs executable was compiled for.

       -O [^]feature[,...]
	      Create a file system with the given features (file system
	      options), overriding the default file system options.  The
	      features that are enabled by default are specified by the
	      base_features relation, either in the [defaults] section in the
	      /etc/mke2fs.conf configuration file, or in the [fs_types]
	      subsections for the usage types as specified by the -T option,
	      further modified by the features relation found in the
	      [fs_types] subsections for the file system and usage types.  See
	      the mke2fs.conf(5) manual page for more details.	The file
	      system type-specific configuration setting found in the
	      [fs_types] section will override the global default found in
	      [defaults].

	      The file system feature set will be further edited using either
	      the feature set specified by this option, or if this option is
	      not given, by the default_features relation for the file system
	      type being created, or in the [defaults] section of the
	      configuration file.

	      The file system 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-file system feature "none" will clear
	      all file system features.

	      For more information about the features which can be set, please
	      see the manual page ext4(5).

       -q     Quiet execution.	Useful if mke2fs is run in a script.  -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 mke2fs to reinitialize the superblock and group
	      descriptors, while not touching the inode table and the block
	      and inode bitmaps.  The 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 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 file system will be further corrupted.  In some
	      cases, such as file systems 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
	      file system corruption will occur.  It is best to run this on a
	      full copy of the file system so other options can be tried if
	      this doesn't work.

       -t fs-type
	      Specify the file system type (i.e., ext2, ext3, ext4, etc.) that
	      is to be created.	 If this option is not specified, 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 /etc/mke2fs.conf file.	 This option
	      controls which file system options are used by default, based on
	      the fstypes configuration stanza in /etc/mke2fs.conf.

	      If the -O option is used to explicitly add or remove file system
	      options that should be set in the newly created file system, the
	      resulting file system may not be supported by the requested
	      fs-type.	(e.g., "mke2fs -t ext3 -O extent /dev/sdXX" will
	      create a file system that is not supported by the ext3
	      implementation as found in the Linux kernel; and "mke2fs -t ext3
	      -O ^has_journal /dev/hdXX" will create a file system that does
	      not have a journal and hence will not be supported by the ext3
	      file system code in the Linux kernel.)

       -T usage-type[,...]
	      Specify how the file system is going to be used, so that mke2fs
	      can choose optimal file system parameters for that use.  The
	      usage types that are supported are defined in the configuration
	      file /etc/mke2fs.conf.  The user may specify one or more usage
	      types using a comma separated list.

	      If this option is is not specified, mke2fs will pick a single
	      default usage type based on the size of the file system to be
	      created.	If the file system size is less than 3 megabytes,
	      mke2fs will use the file system type floppy.  If the file system
	      size is greater than or equal to 3 but less than 512 megabytes,
	      mke2fs(8) will use the file system type small.  If the file
	      system size is greater than or equal to 4 terabytes but less
	      than 16 terabytes, mke2fs(8) will use the file system type big.
	      If the file system size is greater than or equal to 16
	      terabytes, mke2fs(8) will use the file system type huge.
	      Otherwise, mke2fs(8) will use the default file system type
	      default.

       -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 UUID

		   random generate a new randomly-generated UUID

		   time	  generate a new time-based UUID

       -v     Verbose execution.

       -V     Print the version number of mke2fs and exit.

       -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-device.e2undo in the directory specified via the
	      E2FSPROGS_UNDO_DIR environment variable or the undo_dir
	      directive in the configuration file.

	      WARNING: The undo file cannot be used to recover from a power or
	      system crash.

ENVIRONMENT
       MKE2FS_SYNC
	      If set to non-zero integer value, its value is used to determine
	      how often sync(2) is called during inode table initialization.

       MKE2FS_CONFIG
	      Determines the location of the configuration file (see
	      mke2fs.conf(5)).

       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.

       MKE2FS_DEVICE_SECTSIZE
	      If set to non-zero integer value, its value is used to determine
	      logical sector size of the device.

       MKE2FS_DEVICE_PHYS_SECTSIZE
	      If set to non-zero integer value, its value is used to determine
	      physical sector size of the device.

       MKE2FS_SKIP_CHECK_MSG
	      If set, do not show the message of file system automatic check
	      caused by mount count or check interval.

AUTHOR
       This version of mke2fs has been written by Theodore Ts'o
       <tytso@mit.edu>.

AVAILABILITY
       mke2fs is part of the e2fsprogs package and is available from
       http://e2fsprogs.sourceforge.net.

SEE ALSO
       mke2fs.conf(5), badblocks(8), dumpe2fs(8), e2fsck(8), tune2fs(8),
       ext4(5)

E2fsprogs version 1.47.3	   July 2025			     MKE2FS(8)

mke2fs(8)

mke2fs \- create an ext2/ext3/ext4 file system

0popularity

System Information

E2fsprogs version 1.47.3 1.0.0
Updated July 2025
Maintained by Unknown

Actions