Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MAKEFS(8)		    System Manager's Manual		     MAKEFS(8)

NAME
       makefs  --  create a file system	image from a directory tree or a mtree
       manifest

SYNOPSIS
       makefs  [-DxZ]	[-B   endian]	[-b   free-blocks]   [-d   debug-mask]
	      [-F    mtree-specfile]   [-f   free-files]   [-M	 minimum-size]
	      [-m maximum-size]	[-N userdb-dir]	[-O  offset]  [-o  fs-options]
	      [-R    roundup-size]    [-S    sector-size]    [-s   image-size]
	      [-T timestamp] [-t  fs-type]  image-file	directory  |  manifest
	      [extra-directory ...]

DESCRIPTION
       The utility makefs creates a file system	image into image-file from the
       directory  tree	directory or from the mtree manifest manifest.	If any
       optional	directory trees	are passed in the  extra-directory  arguments,
       then  the  directory  tree  of  each  argument  will be merged into the
       directory or manifest first before creating image-file.	No special de-
       vices or	privileges are required	to perform this	task.

       The options are as follows:

       -B endian
	     Set the byte order	of the image to	endian.	 Valid byte orders are
	     `4321', `big', or `be' for	big endian, and	`1234',	 `little',  or
	     `le'  for little endian.  Some file systems may have a fixed byte
	     order; in those cases this	argument will be ignored.

       -b free-blocks
	     Ensure that a minimum of free-blocks free blocks exist in the im-
	     age.  An optional `%' suffix may be  provided  to	indicate  that
	     free-blocks indicates a percentage	of the calculated image	size.

       -D    Treat duplicate paths in an mtree manifest	as warnings not	error.
	     If	 this  flag is specified more than once, warnings about	dupli-
	     cate paths	are not	printed	at all.

       -d debug-mask
	     Enable various levels of debugging, depending upon	which bits are
	     set in debug-mask.	 This option is	intended for source debugging.
	     debug-mask	is a bit map defined in	the header file	makefs.h.  See
	     the source	for usage, and look for	defines	starting with DEBUG_.

       -F mtree-specfile
	     This is almost certainly not the option you are looking  for.  To
	     create an image from a list of files in an	mtree format manifest,
	     specify  it  as the last argument on the command line, not	as the
	     argument to -F.

	     Use mtree-specfile	as an mtree(8) `specfile' specification.  This
	     option has	no effect when the image is created from a mtree mani-
	     fest rather than a	directory.

	     If	a specfile entry exists	in the	underlying  file  system,  its
	     permissions  and  modification  time will be used unless specifi-
	     cally overridden by the specfile.	An error will be raised	if the
	     type of entry in the specfile conflicts with that of an  existing
	     entry.

	     In	the opposite case (where a specfile entry does not have	an en-
	     try  in  the underlying file system) the following	occurs:	If the
	     specfile entry is marked optional,	the specfile entry is ignored.
	     Otherwise,	the entry will be created in the image,	and it is nec-
	     essary to specify at least	the following parameters in the	 spec-
	     file:  type,  mode, gname,	or gid,	and uname or uid, and link (in
	     the case of symbolic links).  If time is not provided,  the  cur-
	     rent  time	 will  be used.	 If flags is not provided, the current
	     file flags	will be	used.  Missing regular file  entries  will  be
	     created as	zero-length files.

       -f free-files
	     Ensure  that a minimum of free-files free files (inodes) exist in
	     the image.	 An optional `%' suffix	may be	provided  to  indicate
	     that  free-files  indicates  a percentage of the calculated image
	     size.

       -M minimum-size
	     Set the minimum size of the file system image to minimum-size.

       -m maximum-size
	     Set the maximum size of the file system  image  to	 maximum-size.
	     An	 error	will  be  raised if the	target file system needs to be
	     larger than this to accommodate the provided directory tree.

       -N userdb-dir
	     Use the user database text	file master.passwd and group  database
	     text  file	 group	from userdb-dir, rather	than using the results
	     from the system's getpwnam(3) and getgrnam(3) (and	 related)  li-
	     brary calls.

       -O offset
	     Instead  of creating the filesystem at the	beginning of the file,
	     start at offset.  Valid only for ffs and msdos.

       -o fs-options
	     Set file system specific options.	fs-options is  a  comma	 sepa-
	     rated  list  of  options.	Valid file system specific options are
	     detailed below.

       -p    Deprecated.  Create a sparse file for ffs.	 This is the  same  as
	     the preferred -Z flag.

       -R roundup-size
	     Round  the	 image	up  to roundup-size.  roundup-size should be a
	     multiple of the file system block size.  This option only applies
	     to	the ffs	file system type.

       -S sector-size
	     Set the file system sector	size to	sector-size.  Defaults to 512.

       -s image-size
	     Set the size of the file system image  to	image-size.   This  is
	     equivalent	 to setting both the minimum (-M) and the maximum (-m)
	     sizes to the same value.  For ffs and msdos the  image-size  does
	     not include the offset.  offset is	not included in	that size.

       -T timestamp
	     Specify a timestamp to be set for all filesystem files and	direc-
	     tories  created  so  that	repeatable  builds  are	possible.  The
	     timestamp can be a	pathname, where	 the  timestamps  are  derived
	     from  that	file, or an integer value interpreted as the number of
	     seconds from the Epoch.  Timestamps in a mtree(5) specfile	(spec-
	     ified with	-F) are	used even if a default timestamp is specified.
	     However, the timestamps in	an mtree manifest are ignored if a de-
	     fault timestamp is	specified.

       -t fs-type
	     Create an fs-type file system image.  The following  file	system
	     types are supported:

		   ffs	   BSD fast file system	(default).

		   cd9660  ISO 9660 file system.

		   msdos   FAT12, FAT16, or FAT32 file system.

		   zfs	   ZFS pool containing one or more file	systems.

       -x    Exclude file system nodes not explicitly listed in	the specfile.

       -Z    Create a sparse file for ffs.  This is useful for virtual machine
	     images.

       Where  sizes are	specified, a decimal number of bytes is	expected.  Two
       or more numbers may be separated	by an "x" to indicate a	product.  Each
       number may have one of the following optional suffixes:
	     b	  Block; multiply by 512
	     k	  Kibi;	multiply by 1024 (1 KiB)
	     m	  Mebi;	multiply by 1048576 (1 MiB)
	     g	  Gibi;	multiply by 1073741824 (1 GiB)
	     t	  Tebi;	multiply by 1099511627776 (1 TiB)
	     w	  Word;	multiply by the	number of bytes	in an integer

   FFS-specific	options
       ffs images have ffs-specific optional parameters	that may be  provided.
       Each  of	 the options consists of a keyword, an equal sign (`='), and a
       value.  The following keywords are supported:

	     avgfilesize   Expected average file size.
	     avgfpdir	   Expected number of files per	directory.
	     bsize	   Block size.
	     density	   Bytes per inode.  If	unset, will allocate the mini-
			   mum number of inodes	to represent the filesystem if
			   no free space has been requested  (free  blocks  or
			   minimum  size  set);	 otherwise  the	 larger	of the
			   newfs defaults or what is required by the free  in-
			   ode parameters if set.
	     fsize	   Fragment size.
	     label	   Label name of the image.
	     maxbpg	   Maximum blocks per file in a	cylinder group.
	     minfree	   Minimum % free.
	     optimization  Optimization	preference; one	of `space' or `time'.
	     extent	   Maximum extent size.
	     maxbpcg	   Maximum total number	of blocks in a cylinder	group.
	     version	   UFS version.	 1 for FFS (default), 2	for UFS2.
	     softupdates   0 for disable (default), 1 for enable

   CD9660-specific options
       cd9660  images  have  ISO9660-specific  optional	parameters that	may be
       provided.  The arguments	consist	of a keyword and, optionally, an equal
       sign (`='), and a value.	 The following keywords	are supported:

	     allow-deep-trees	   Allow the directory structure to exceed the
				   maximum specified in	the spec.
	     allow-illegal-chars   Allow  illegal  characters  in   filenames.
				   This	option is not implemented.
	     allow-lowercase	   Allow  lowercase  characters	 in filenames.
				   This	option is not implemented.
	     allow-max-name	   Allow 37 instead of 33 characters for file-
				   names by omitting the version id.
	     allow-multidot	   Allow multiple dots in a filename.
	     applicationid	   Application ID of the image.
	     bootimagedir	   Boot	image directory.  This option  is  not
				   implemented.
	     chrp-boot		   Write  an  MBR partition table to the image
				   to allow older CHRP hardware	to boot.
	     boot-load-segment	   Set load segment for	the boot image.
	     bootimage		   Filename of a  boot	image  in  the	format
				   "sysid;filename",  where  "sysid" is	one of
				   `efi',  `i386',  `mac68k',	`macppc',   or
				   `powerpc'.
	     generic-bootimage	   Load	 a  generic  boot image	into the first
				   32K of the cd9660 image.
	     hard-disk-boot	   Boot	image is a hard	disk image.
	     isolevel		   An integer representing the ISO 9660	inter-
				   change level	where "level" is either	`1' or
				   `2'.	 "level" `3' is	not implemented.
	     keep-bad-images	   Do  not  discard  images  whose  write  was
				   aborted  due	 to  an	 error.	 For debugging
				   purposes.
	     label		   Label name of the image.
	     no-boot		   Boot	image is not bootable.
	     no-emul-boot	   Boot	image is a "no emulation" ElTorito im-
				   age.
	     no-trailing-padding   Do not  pad	the  image  (apparently	 Linux
				   needs the padding).
	     omit-trailing-period  Omit	trailing periods in filenames.
	     platformid		   Set	platform ID of section header entry of
				   the boot image.
	     preparer		   Preparer ID of the image.
	     publisher		   Publisher ID	of the image.
	     rockridge		   Use RockRidge extensions (for longer	 file-
				   names, etc.).
	     verbose		   Turns on verbose output.
	     volumeid		   Volume set identifier of the	image.

   msdos-specific options
       msdos  images have MS-DOS-specific optional parameters that may be pro-
       vided.  The arguments consist of	a keyword, an equal sign (`='),	and  a
       value.	The  following	keywords are supported (see newfs_msdos(8) for
       more details):

	     backup_sector	   Location of the backup boot sector.
	     block_size		   Block size.
	     bootstrap		   Bootstrap file.
	     bytes_per_sector	   Bytes per sector.
	     create_size	   Create file size.
	     directory_entries	   Directory entries.
	     drive_heads	   Drive heads.
	     fat_type		   FAT type (12, 16, or	32).
	     floppy		   Preset drive	parameters for standard	format
				   floppy disks	(160, 180, 320,	360, 640, 720,
				   1200, 1232, 1440, or	2880).
	     hidden_sectors	   Hidden sectors.
	     info_sector	   Location of the info	sector.
	     media_descriptor	   Media descriptor.
	     num_FAT		   Number of FATs.
	     OEM_string		   OEM string.
	     offset		   Offset in device.  This option will be  ig-
				   nored if -O is set to a positive number.
	     reserved_sectors	   Reserved sectors.
	     sectors_per_cluster   Sectors per cluster.
	     sectors_per_fat	   Sectors per FAT.
	     sectors_per_track	   Sectors per track.
	     size		   File	System size.
	     volume_id		   Volume ID.
	     volume_label	   Volume Label.

   zfs-specific	options
       The  image  created by makefs contains a	ZFS pool with a	single vdev of
       type `disk'.  The root dataset is always	created	 implicitly  and  con-
       tains  the  entire  input directory tree	unless additional datasets are
       specified using the options described below.

       To keep images reproducible, the	pool GUID and other random identifiers
       will always be the same across runs of makefs.  This means that when  a
       pool  is	first imported,	its GUID should	be reset using zpool-reguid(8)
       to avoid	conflicting with other pools also generated by makefs;	other-
       wise,  it will not be possible to import	other pools.  This can be con-
       figured from /etc/rc.conf using the zpool_reguid	variable.

       The arguments consist of	a keyword, an equal sign (`='),	and  a	value.
       The following keywords are supported:

	     ashift		   The	base-2	logarithm of the minimum block
				   size.  Typical values are 9	(512B  blocks)
				   and	12 (4KB	blocks).  The default value is
				   12.
	     bootfs		   The name of the bootable  dataset  for  the
				   pool.   Specifying  this  option causes the
				   `bootfs' property to	be set in the  created
				   pool.
	     mssize		   The	size of	metaslabs in the created pool.
				   By default, makefs allocates	large  (up  to
				   512MB)  metaslabs with the expectation that
				   the image will be auto-expanded upon	 first
				   use.	   This	  option  allows  the  default
				   heuristic to	be overridden.
	     verify-txgs	   Prompt OpenZFS to verify pool metadata dur-
				   ing import.	This is	disabled by default as
				   it may significantly	increase import	times.
	     poolguid		   Use the specified  64-bit  integer  as  the
				   pool	 GUID.	 If  this option is not	speci-
				   fied, the pool  GUID	 will  be  random  but
				   fixed across	multiple identical invocations
				   of makefs.  This option is useful for test-
				   ing but not required	for reproducibility.
	     poolname		   The name of the ZFS pool.  This option must
				   be specified.
	     rootpath		   An  implicit	 path  prefix added to dataset
				   mountpoints.	 By default it is /<poolname>.
				   For creating	bootable pools,	 the  rootpath
				   should  be  set to /.  At least one dataset
				   must	have a mountpoint equal	to rootpath.
	     fs			   Create an additional	dataset.  This	option
				   may be specified multiple times.  The argu-
				   ment	   value   must	  be   of   the	  form
				   <dataset>[;<prop1=v1>[;<prop2=v2>[;...]]],
				   where dataset is the	name  of  the  dataset
				   and	must  belong  to the pool's namespace.
				   For example,	with a pool name of `test' all
				   dataset names must be prefixed by  `test/'.
				   A  dataset  must exist at each level	of the
				   pool's namespace.  For example,  to	create
				   `test/foo/bar',  `test/foo' must be created
				   as well.

				   The dataset mountpoints determine  how  the
				   datasets  are populated with	files from the
				   staged directory tree.   Conceptually,  all
				   datasets  are  mounted before any are popu-
				   lated with files.  The root of  the	staged
				   directory tree is mapped to rootpath.

				   Dataset   properties,   as	described   in
				   zfsprops(7),	may be specified following the
				   dataset name.  The following	properties may
				   be set for a	dataset:

					 atime
					 canmount
					 compression
					 exec
					 mountpoint
					 setuid
				   Note	that makefs does  not  implement  com-
				   pression  of	 files	included in the	image,
				   regardless of the value of the  compression
				   property.

SEE ALSO
       mtree(5),   rc.conf(5),	 zfsconcepts(7),  zfsprops(7),	zpoolprops(7),
       mtree(8), newfs(8), zpool-reguid(8)

HISTORY
       The makefs utility appeared in NetBSD 1.6.  It was  ported  to  FreeBSD
       and first appeared in FreeBSD 8.0.

AUTHORS
       Luke Mewburn <lukem@NetBSD.org> (original program),
       Daniel Watt,
       Walter Deignan,
       Ryan Gabrys,
       Alan Perez-Rathke,
       Ram Vedam (cd9660 support),
       Christos	Zoulas (msdos support),
       Mark Johnston (zfs support).

FreeBSD	ports 15.quarterly	January	5, 2026			     MAKEFS(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=makefs&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help