4.7 03 JUNE 2025 Parallel file reading, new help system, new
reproducible filesystem image options, removal
of "fragment block stall"
1. Mksquashfs now reads files in parallel from the input directories
1.1 This can significantly increase I/O when reading lots of
small files, and/or the input media benefits from parallel
reading e.g. modern SSD drives, or network filesystems etc.
1.2 In cases where speed of I/O is the bottleneck in Mksquashfs,
this can make Mksquashfs run significantly faster, in some
cases Mksquashfs can be more than ten times faster.
1.3 New -small-readers option to specify number of parallel
small file reader threads (files less than a block size).
Default 4 threads.
1.4 New -block-readers option to specify number of parallel
block reader threads (files one block or larger). Default
4 threads.
1.5 New -single-reader option to specify a single reader thread,
similar to previous Mksquashfs versions.
2. Rewritten and improved help system (Mksquashfs/Unsquashfs)
2.1 Help text now uses the full width of the terminal (rather
than being pre-formatted to 80 columns).
2.2 The help text is now automatically paged (using pager, less
or more).
2.3 The tools now print a summary on failure to parse the
command line (or encountering other errors that prevent the
tool from running), rather than displaying the help text.
2.4 The help text can be displayed in full, by section, or by
option using regex matching.
2.5 New -help-all option to display all help text
2.6 New -help-section option to display help for a particular
section
2.7 New -help-option to display all options matching regex.
2.8 New -help-comp option to display compressor options for
given compressor.
3. New options for building reproducible filesystems (Mksquash/Sqfstar)
3.1 Low level timestamp setting options extended:
-mkfs-time inode sets filesystem creation time to the
latest inode timestamp
-inode-time inode sets all inode timestamps to the
latest inode timestamp
-root-time inode sets the root directory timestamp to
the latest inode timestamp
3.2 New easier to remember shorthand options
-repro builds a reproducible filesystem image, it is
shorthand for -mkfs-time inode.
-repro-time <time> builds a reproducible image, it is
shorthand for specifying -mkfs-time <time>
and -inode-time <time>.
4. Elimination of "fragment block stall" and -(not-)reproducible options
A technical issue called "the fragment block stall" has been
eliminated in this release in a way that generates a
reproducible ordering of files in the filesystem image. This
can increase performance by 20% or more, in addition to the
parallel reader performance improvements.
This "fragment block stall" was introduced in release 4.4 (2019)
to produce a reproducible ordering of files in the filesystem,
but which led to a reduction in parallelisation and performance.
Due to this reduction, the previous behaviour was retained and
enabled using the -not-reproducible option. As the "fragment
block stall" has now been removed, the options -not-reproducible
and -reproducible now do nothing, but are still recognised for
backwards compatibility.
5. Other improvements for Mksquashfs/Sqfstar
3.1 New -force-file-mode option, which sets all file
(non-directory) permissions to the given mode.
3.2 New -force-dir-mode option, which sets all directory
permissions to the given mode.
3.3 -root-mode and above new -force-file-mode/-force-dir-mode
options now take a symbolic mode in addition to an octal
mode.
3.4 New -info-file option, which prints files written to the
filesystem to a file rather than stdout. Allows -info-file
to be used in conjunction with the progress bar.
3.5 New -pseudo-dir (or -pd) option which supplies a default
directory if any directories in a pseudo file definition
pathname doesn't exist.
3.6 New pseudo file 'h' definition which creates a hard link to
a file, and follows symbolic links.
3.7 Previously if a directory was missing (or not a directory)
in a Pseudo file definition pathname, the pseudo file
definition would be ignored. This has been hardened to a
fatal error.
6. Other improvements for Unsquashfs/Sqfscat
4.1 New -mem option, which sets the amount of memory to be used,
K, M and G can be used to specify Kbytes, Mbytes and Gbytes.
4.2 New -mem-percent option, which sets the anount of memory to
be used as percentage of available physical memory.
4.3 Memory specified is limited to 75% of physical memory or
less.
7. New environment variable SQFS_CMDLINE (Mksquashfs/Unsquashfs)
If set, this is used as the directory to write the file
sqfs_cmdline which contains the command line arguments given to
Mksquashfs etc. Intended to be used to debug scripts/discover
what is being passed to Mksquashfs.