Signed-off-by: Yifan Zhao <[email protected]>
---
The mkfs.erofs documentation has long been overdue for an update.
This patch attempts to refresh the documentation, but I'm still not
entirely clear about a significant portion of the options, particularly
the interactions among the --clean, --incremental, and their interaction
with rebuild mode. I hope others can help review this patch.

 man/mkfs.erofs.1 | 220 +++++++++++++++++++++++++++++++++++++++++++----
 mkfs/main.c      |   2 +-
 2 files changed, 206 insertions(+), 16 deletions(-)

diff --git a/man/mkfs.erofs.1 b/man/mkfs.erofs.1
index 4316214..eee068d 100644
--- a/man/mkfs.erofs.1
+++ b/man/mkfs.erofs.1
@@ -17,7 +17,19 @@ achieve high performance for embedded devices with limited 
memory since it has
 unnoticable memory overhead and page cache thrashing.
 .PP
 mkfs.erofs is used to create such EROFS filesystem \fIDESTINATION\fR image file
-from \fISOURCE\fR directory or tarball.
+from various \fISOURCE\fR, where \fISOURCE\fR can be:
+.RS
+.IP \(bu 2
+a local directory
+.IP \(bu 2
+a (zipped) tarball
+.IP \(bu 2
+an S3 bucket or a prefix within it
+.IP \(bu 2
+an OCI image reference
+.IP \(bu 2
+other EROFS image(s), see \fIREBUILD MODE\fR below
+.RE
 .SH OPTIONS
 .TP
 .BI "\-z " compression-algorithm \fR[\fP, # \fR][\fP: ... \fR]\fP
@@ -52,6 +64,9 @@ feature, usually prefix the extended option name with a caret 
('^') character.
 The following extended options are supported:
 .RS 1.2i
 .TP
+.BI 48bit
+Enable 48-bit block addressing to support larger block addresses. (Linux 
v6.15+)
+.TP
 .BI all-fragments
 Forcely record the whole files into a special inode for better compression and
 it may take an argument as the pcluster size of the packed inode in bytes.
@@ -63,6 +78,10 @@ the filesystem. May further reduce image size when used with
 .BR -E\ fragments .
 (Linux v6.1+)
 .TP
+.BI dot-omitted
+Omit the "." (dot) directory entry in all directories to reduce metadata
+overhead.
+.TP
 .BI force-inode-compact
 Force generation of compact (32-byte) inodes.
 .TP
@@ -102,6 +121,15 @@ for those images, however, there could be other use cases 
too.
 Disable "inplace decompression" and "compacted indexes",
 for compatibility with Linux pre-v5.4.
 .TP
+.BI nosbcrc
+Disable CRC32 checksum for the filesystem superblock.
+.TP
+.BI plain-xattr-prefixes
+Store long extended attribute name prefixes directly on disk rather than in
+special inodes. By default, long xattr name prefixes are placed in 
metabox_inode
+(if metabox is enabled) or packed_inode (if fragments is enabled). This option
+forces them to be stored as plain on-disk structures.
+.TP
 .B xattr-name-filter
 Enable a name filter for extended attributes to optimize negative lookups.
 (Linux v6.6+).
@@ -116,12 +144,29 @@ Set the volume label for the filesystem to
 .IR volume-label .
 The maximum length of the volume label is 15 bytes.
 .TP
+.BI "\-m " #\fR[\fP: algorithm \fR]\fP
+Enable metadata compression with #-byte clusters in a metabox inode;
+optionally specify an algorithm (defaults to data compression algorithm if 
omitted).
+.TP
+.BI "\-\-MZ\fR[\fP=<0|[id]>\fR]\fP"
+Put inode metadata ('i') and/or directory data ('d') into the separate 
metadata zone.
+This improves spatial locality of metadata layout within the image, which is 
beneficial
+for on-demand metadata access.
+.TP
 .BI "\-T " #
 Specify a UNIX timestamp for image creation time for reproducible builds.
 If \fI--mkfs-time\fR is not specified, it will behave as \fI--all-time\fR:
 setting all files to the specified UNIX timestamp instead of using the
 modification times of the source files.
 .TP
+.B \-\-all-time
+(used together with \fB-T\fR) set all files to the fixed timestamp. This is the
+default.
+.TP
+.B \-\-mkfs-time
+(used together with \fB-T\fR) the given timestamp is only applied to the build
+time.
+.TP
 .BI "\-U " UUID
 Set the universally unique identifier (UUID) of the filesystem to
 .IR UUID .
@@ -142,9 +187,11 @@ generate a new randomly-generated UUID
 .B \-\-all-root
 Make all files owned by root.
 .TP
-.B \-\-all-time
-(used together with \fB-T\fR) set all files to the fixed timestamp. This is the
-default.
+.BI "\-\-async-queue-limit=" #
+Specify the maximum number of entries in the multi-threaded job queue.
+.TP
+.BI "\-\-aufs"
+Replace aufs special files with overlayfs metadata.
 .TP
 .BI "\-\-blobdev " file
 Specify an extra blob device to store chunk-based data.
@@ -152,6 +199,27 @@ Specify an extra blob device to store chunk-based data.
 .BI "\-\-chunksize " #
 Generate chunk-based files with #-byte chunks.
 .TP
+.BI "\-\-clean=" MODE
+Run full clean build (default) with the given \fIMODE\fR:
+
+\fIMODE\fR may be one of \fBdata\fR, \fBrvsp\fR, or \fB0\fR.
+
+\fBdata\fR: Import complete file data from the source into the destination
+image, creating a fully self-contained EROFS image. This mode is useful when
+you need a standalone image that doesn't depend on external blob devices.
+
+\fBrvsp\fR: (Only works with \fI--tar\fR or \fIREBUILD MODE\fR) Reserve space 
for file data in the destination image without
+copying the actual content. The file data will need to be filled in later
+through other means. This is useful for creating sparse images or when the
+actual data will be populated separately.
+
+\fB0\fR: (Only works with \fI--s3\fR) Fill all inode data with zeros.
+.TP
+.BI "\-\-incremental=" MODE
+Run an incremental build where DESTINATION is an existing EROFS image,
+and the data specified by SOURCE will be incrementally appended to the image.
+\fIMODE\fR has the same meaning as in \fB\-\-clean\fR above.
+.TP
 .BI "\-\-compress-hints " file
 Apply a per-file compression strategy. Each line in
 .I file
@@ -159,9 +227,11 @@ is defined by
 tokens separated by spaces in the following form.  Optionally, instead of
 the given primary algorithm, alternative algorithms can be specified with
 \fIalgorithm-index\fR explicitly:
-.RS 1.2i
+.sp
+.in +4n
 <pcluster-size-in-bytes> [algorithm-index] <match-pattern>
-.RE
+.in
+.sp
 .IR match-pattern s
 are extended regular expressions, matched against absolute paths within
 the output filesystem, with no leading /.
@@ -216,11 +286,8 @@ When this option is used together with
 the final file gids are
 set to \fIGID\fR + \fIGID-OFFSET\fR.
 .TP
-\fB\-V\fR, \fB\-\-version\fR
-Print the version number and exit.
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-Display help string and exit.
+.BI "\-\-hard-dereference"
+Dereference hardlinks and add links as separate inodes.
 .TP
 .B "\-\-ignore-mtime"
 Ignore the file modification time whenever it would cause \fBmkfs.erofs\fR to
@@ -231,18 +298,68 @@ can reduce total metadata size. Implied by
 .BI "\-\-max-extent-bytes " #
 Specify maximum decompressed extent size in bytes.
 .TP
-.B \-\-mkfs-time
-(used together with \fB-T\fR) the given timestamp is only applied to the build
-time.
+.BI "\-\-mount-point=" path
+Specify the prefix of target filesystem path (default: /).
+.TP
+.BI "\-\-oci\fR[\fP=<f|i>\fR]\fP"
+Generate a full (f) or index-only (i) image from OCI remote source.
+Additional options can be specified:
+.RS 1.2i
+.TP
+.BI platform= platform
+Specify the platform (default: linux/amd64).
+.TP
+.BI layer= #
+Specify the layer index to extract (0-based; omit to extract all layers).
+.TP
+.BI blob= digest
+Specify the blob digest to extract (omit to extract all layers).
+.TP
+.BI username= username
+Username for authentication (optional).
+.TP
+.BI password= password
+Password for authentication (optional).
+.TP
+.B insecure
+Use HTTP instead of HTTPS (optional).
+.RE
+.TP
+.BI "\-\-offset=" #
+Skip # bytes at the beginning of the image.
+.TP
+.BI "\-\-ovlfs-strip\fR[\fP=<0|1>\fR]\fP"
+Strip overlayfs metadata in the target image (e.g. whiteouts).
 .TP
 .B "\-\-preserve-mtime"
-Use extended inodes instead of compact inodes if the file modification time
+Use extended inodes instead of compact inodes if the file modifi1cation time
 would overflow compact inodes. This is the default. Overrides
 .BR --ignore-mtime .
 .TP
 .B "\-\-quiet"
 Quiet execution (do not write anything to standard output.)
 .TP
+.BI "\-\-root-xattr-isize=" #
+Ensure the inline xattr size of the root directory is # bytes at least.
+.TP
+.BI "\-\-s3=" endpoint
+Generate an image from S3-compatible object store.
+Additional options can be specified:
+.RS 1.2i
+.TP
+.BI passwd_file= file
+S3FS-compatible password file, with the format of "accessKey:secretKey" in the 
first line.
+.TP
+.BI urlstyle= style
+S3 API calling style (vhost or path) (default: vhost).
+.TP
+.BI sig= version
+S3 API signature version (2 or 4) (default: 2).
+.TP
+.BI region= code
+Region code in which endpoint belongs to (required for sig=4).
+.RE
+.TP
 .BI "\-\-sort=" MODE
 Inode data sorting order for tarballs as input.
 
@@ -271,6 +388,10 @@ filesystem with other data-only layers.
 to a tarball except that file data is not present after each file header.
 It can improve performance especially when \fISOURCE\fR is not seekable.
 .TP
+.BI "\-\-gzinfo\fR[\fP=" file \fR]\fP
+(used together with \fI--tar\fR) Generate AWS SOCI-compatible zinfo to support 
random gzip access.
+Source file must be a gzip-compressed tarball.
+.TP
 .BI "\-\-uid-offset=" UIDOFFSET
 Add \fIUIDOFFSET\fR to all file UIDs.
 When this option is used together with
@@ -290,11 +411,80 @@ be dumped together.
 Generate a VMDK descriptor file to merge sub-filesystems, which can be used
 for tar index or rebuild mode.
 .TP
+.BI "\-\-workers=" #
+Set the number of worker threads to # (default: 12).
+.TP
+.BI "\-\-xattr-inode-digest=" name
+Specify extended attribute name to record inode digests.
+.TP
 .BI "\-\-xattr-prefix=" PREFIX
 Specify a customized extended attribute namespace prefix for space saving,
 e.g. "trusted.overlay.".  You may give multiple
 .B --xattr-prefix
 options (Linux v6.4+).
+.TP
+.BI "\-\-zD\fR[\fP=<0|1>\fR]\fP"
+Specify directory compression: 0=disable [default], 1=enable.
+.TP
+.BI "\-\-zfeature-bits=" #
+Toggle filesystem compression features according to given bits #.
+Each bit in the value corresponds to a specific compression feature:
+.RS 1.2i
+.nf
+.ft CW
+  7 6 5 4 3 2 1 0  (bit position)
+  | | | | | | | |
+  | | | | | | | +-- Bit 0 (1)   : legacy-compress
+  | | | | | | +---- Bit 1 (2)   : ztailpacking
+  | | | | | +------ Bit 2 (4)   : fragments
+  | | | | +-------- Bit 3 (8)   : all-fragments
+  | | | +---------- Bit 4 (16)  : dedupe
+  | | +------------ Bit 5 (32)  : fragdedupe
+  | +-------------- Bit 6 (64)  : 48bit
+  +---------------- Bit 7 (128) : dot-omitted
+.ft
+.fi
+.RE
+.IP
+For example,
+.B --zfeature-bits=6
+(binary: 0000 0110) enables ztailpacking (bit 1) and fragments (bit 2).
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Print the version number and exit.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display help string and exit.
+.TP
+.B REBUILD MODE
+.B Rebuild mode
+is an experimental feature that allows
+.B mkfs.erofs
+to generate a new EROFS image from one or more existing EROFS images passed as
+\fISOURCE\fR(s).
+This mode is particularly useful for merging multiple EROFS images or creating
+index-only metadata images that reference data in the source images.
+
+When SOURCE contains one or more EROFS image files,
+.B mkfs.erofs
+automatically enters rebuild mode. The behavior is controlled by the
+.B \-\-clean
+or
+.B \-\-incremental
+options, which determine how file data is handled:
+.RS 1.2i
+.TP
+.I Default mode (blob index)
+The generated image contains only metadata (inodes, dentries, and xattrs).
+File data is referenced through chunk-based indexes pointing to the original
+source images, which act as external blob devices. This creates a compact
+metadata layer suitable for layered filesystem scenarios, similar to container
+image layers.
+.TP
+.I rvsp mode
+\fB\-\-clean=rvsp\fR or \fB\-\-incremental=rvsp\fR: Reserve space for file
+data without copying actual content, useful for creating sparse images.
+.RE
 .SH AUTHOR
 This version of \fBmkfs.erofs\fR is written by Li Guifu <[email protected]>,
 Miao Xie <[email protected]> and Gao Xiang <[email protected]> with
diff --git a/mkfs/main.c b/mkfs/main.c
index a948b2e..2cb1c6d 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -169,7 +169,7 @@ static void usage(int argc, char **argv)
        }
        printf(
                " -C#                    specify the size of compress physical 
cluster in bytes\n"
-               " -EX[,...]              X=extended options\n"
+               " -EX[,...]              X=extended options, see mkfs.erofs(1) 
manual for details\n"
                " -L volume-label        set the volume label (maximum 15 
bytes)\n"
                " -m#[:X]                enable metadata compression (# = 
physical cluster size in bytes;\n"
                "                                                     X = 
another compression algorithm for metadata)\n"
-- 
2.47.3


Reply via email to