Hi, I'm pleased to announce the release of Squashfs tools 4.5. This release marks 20 years since development started on Squashfs, and there are substantial new features: find-style actions, tar file reading, cpio style input, Sqfscat, etc. The release can be downloaded either from Sourceforge, or GitHub. https://sourceforge.net/projects/squashfs/files/latest/download https://github.com/plougher/squashfs-tools/archive/refs/tags/4.5.tar.gz The README with a summary of changes is below. Phillip Summary of changes (and sections below) --------------------------------------- 1. Major improvements in Mksquashfs =================================== 1.1 Mksquashfs now supports "Actions". These are modelled on "find" and allow compression, fragment packing, file exclusion and file attributes to be changed on a per-file basis (see section 4). 1.2 New sqfstar command which will create a Squashfs image from a tar archive (see section 5). 1.3 Tar style handling of source pathnames in Mksquashfs. If option is specified, Mksquashfs will not strip leading directories (see section 6). 1.4 Cpio style handling of source pathnames in Mksquashfs. If this option is specified, files will be read in from stdin. No leading directories will be stripped (see section 7). 1.5 New option to throttle the amount of CPU and I/O Mksquashfs uses (see section 8). 1.6 New Pseudo file definitions which support timestamps (see section 9). 1.7 New Pseudo file definitions to create File references (Hard Links) (see section 10). 1.8 New Pseudo file definitions to create Sockets/Fifos (see section 11). 1.9 Mksquashfs now allows no source directory ( specified as - ) to be specified, with all input from pseudo file definitions (see section 12). 1.10 New Pseudo file "R" definition which allows a Regular file to be created with data stored within the Pseudo file (see 2.5 below). 2. Major improvements in Unsquashfs =================================== 2.1 New Sqfscat command which outputs the contents of files to standard out (see section 13). 2.2 Symbolic links are now followed in extract files, if -follow-symlinks or -missing-symlinks option specified (see section 14). 2.3 Unsquashfs now supports "exclude" files in addition to "extract" files (see section 15). 2.4 Max depth traversal option added (see section 16). 2.5 Unsquashfs can now output a "Pseudo file" representing the input Squashfs filesystem. This can be altered and given as input to Mksquashfs to re-generate the filesystem without unpacking it (see section 17). 3. Minor improvements and bug fixes =================================== 3.1 The progress bar is now displayed and updated whilst the input is being scanned (blocks to be compressed will increase). This means on large (or slow to read) input sources, Mksquashfs will not appear to hang doing nothing. 3.2 New -one-file-system option in Mksquashfs, which tells Mksquashfs to not cross filesystem boundaries when scanning the sources. 3.3 New -no-hardlinks option in Mksquashfs, which makes Mksquashfs treat hardlinked files as duplicates instead. 3.4 New -help options in Mksquashfs and Unsquashfs which output to standard out, rather than standard error. 3.5 New -root-uid option in Mksquashfs, which allows the uid of the root directory to be set. 3.6 New -root-gid option in Mksquashfs, which allows the gid of the root directory to be set. 3.7 New -root-time option in Mksquashfs, which allows the time of the root directory to be set. 3.8 -no-exit-code option added to Unsquashfs which makes it not output an error exit code. 3.9 Exit code in Unsquashfs changed to distinguish between non-fatal errors (exit of 2), and fatal errors (exit code of 1). 3.10 Mksquashfs when appending, now writes the recovery file to the home directory ($HOME), rather than the current directory. A new option -recovery-path <name> has been added, which specifies that <name> is to be used as the recovery file directory. 3.11 Xattr id count added in Unsquashfs "-stat" output. 3.12 Unsquashfs "write outside directory" exploit fixed. 3.13 Error handling in Unsquashfs writer thread fixed. 3.14 Fix failure to truncate destination file when appending aborted in Mksquashfs. 3.15 Prevent Mksquashfs reading the destination file as input. 4. Mksquashfs Actions Introduction ================================== The new Mksquashfs Actions code allows an "action" to be executed on a file if one or more "tests" succeed. If you're familiar with the "find" command, then an action is similar to "-print", and a test is similar to say "-name" or "-type". To illustrate this it is useful to give two concrete examples. example 1: the fragment action % mksquashfs /home/phillip/github github.sqsh -action "fragment(cfiles) @ name(*.[ch])" -action "fragment(ofiles) @ name(*.o)" This example defines two "fragment actions" which control the packing of files within fragments. Specifically, it creates a specialised fragment called "cfiles" which packs files matching the wildcard name "*.[ch]". It also creates another specialised fragment called "ofiles" which packs files matching the wilcard name "*.o". Producing specialised fragments which only pack files which match a range of tests, can produce better compression and/or I/O performance as it can optimise similarity or access patterns. But it can also produce worse compression, and so you should always test the effect. Additionally, you should be able to see that an action definition is split into an action function before the "@", and one or more test functions after the @. Quoting is necessary here to protect it from interpretation by the shell. Also the spacing before and after the "@" isn't necessary and is used here for added readability. example 2: the uncompressed action % mksquashfs /home/phillip backup.sqsh -action "uncompressed @ ( name(*.jpg) || name(*.mpg) ) || ( name(*.img) && filesize(+1G) )" This is a more complex example. It tells Mksquashfs to not try and compress any file which matches the wildcard names "*.jpg" and "*.mpg". But it also tells Mksquashfs not to try and compress files which match the wildcard name "*.img" and are also 1 Gigabyte in size or larger. This example introduces the fact that tests can be combined using the logical operators && (and), || (or) and ! (not), and can be bracketed. Please see the ACTIONS-README file for syntax and extra information. 5. New Sqfstar command to create image from a tar archive ========================================================= Mksquashfs when run as "sqfstar" (either named as such, or via a hard or symbolic link) will read a tar archive from standard in (stdin), and create a Squashfs image from it. Syntax: sqfstar [options] image [list of exclude dirs/files] Where <image> is the output Squashfs filesystem. The tar archive should be uncompressed (pipe it though a decompressor if compressed). Sqfstar supports V7, ustar, bsdtar (libarchive), GNU tar and PAX extensions. Sparse file extensions are supported, including the "old GNU format, type S", and PAX formats, Versions 0.0, 0.1 and the current 1.0. Sqfstar supports extended attributes, and recognises the SCHILY xattr PAX extension (used by GNU tar), and the LIBARCHIVE xattr PAX extension (used by bsdtar). Files and directories may be excluded, and both anchored and non-anchored exclude files are supported (see section 3.5.2 in USAGE file and examples later). Wildcards (globbing) is supported by default. Sqfstar can also by invoked by running "mksquashfs source dest -tar", if the Sqfstar link isn't available. 5.1 Usage examples ------------------ % sqfstar image.sqfs < archive.tar Create a Squashfs image from archive.tar, using defaults (gzip compression, 128K blocks). % sqfstar -comp xz -b 1M image.sqfs < archive.tar As previous, but use XZ compression and 1Mbyte block sizes. % zcat archive.tgz | sqfstar image.sqfs Create a Squashfs image from a gzip compressed tar archive. % sqfstar -root-uid 0 -root-gid 0 image.sqfs < archive.tar Tar files do not supply a definition for the root directory, and the default is to make the directory owned/group owned by the user running Sqfstar. The above command sets the ownership/group ownership to root. % sqfstar -root-mode 0755 image.sqfs < archive.tar The default permissions for the root directory is 0777 (rwxrwxrwx). The above command sets the permissions to 0755 (rwxr-xr-x). % sqfstar image.sqsh dir1/file1 dir2/file2 < archive.tar Create a Squashfs image but exclude the files "file1" and "file2". % sqfstar image.sqsh "... *.[ch]" < archive.tar Create a Squashfs image but exclude any file matching "*.[ch]" anywhere in the archive. 5.2 Sqfstar options list ------------------------ The following is the full list of options supported by Sqfstar. Filesystem build options: -comp <comp> select <comp> compression Compressors available: gzip (default) -b <block_size> set data block to <block_size>. Default 128 Kbytes Optionally a suffix of K or M can be given to specify Kbytes or Mbytes respectively -reproducible build images that are reproducible (default) -not-reproducible build images that are not reproducible -mkfs-time <time> set mkfs time to <time> which is an unsigned int -fstime <time> synonym for mkfs-time -all-time <time> set all inode times to <time> which is an unsigned int -exports make the filesystem exportable via NFS -no-sparse don't detect sparse files -no-xattrs don't store extended attributes -xattrs store extended attributes (default) -noI do not compress inode table -noId do not compress the uid/gid table (implied by -noI) -noD do not compress data blocks -noF do not compress fragment blocks -noX do not compress extended attributes -no-fragments do not use fragments -no-tailends don't pack tail ends into fragments -no-duplicates do not perform duplicate checking -no-hardlinks do not hardlink files, instead store duplicates -all-root make all files owned by root -root-time <time> set root directory time to <time> -root-mode <mode> set root directory permissions to octal <mode> -root-uid <uid> set root directory owner to <uid> -root-gid <gid> set root directory group to <gid> -force-uid <uid> set all file uids to <uid> -force-gid <gid> set all file gids to <gid> -nopad do not pad filesystem to a multiple of 4K Filesystem filter options: -ef <exclude_file> list of exclude dirs/files. One per line -regex Allow POSIX regular expressions to be used in exclude dirs/files Sqfstar runtime options: -version print version, licence and copyright message -force force Sqfstar to write to block device or file -exit-on-error treat normally ignored errors as fatal -quiet no verbose output -info print files written to filesystem -no-progress don't display the progress bar -progress display progress bar when using the -info option -throttle <percentage> throttle the I/O input rate by the given percentage. This can be used to reduce the I/O and CPU consumption of Mksquashfs -limit <percentage> limit the I/O input rate to the given percentage. This can be used to reduce the I/O and CPU consumption of Mksquashfs (alternative to -throttle) -processors <number> Use <number> processors. By default will use number of processors available -mem <size> Use <size> physical memory. Currently set to 4096M Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively Miscellaneous options: -root-owned alternative name for -all-root -offset <offset> Skip <offset> bytes at the beginning of <dest>. Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively. Default 0 bytes. -o <offset> synonym for -offset -noInodeCompression alternative name for -noI -noIdTableCompression alternative name for -noId -noDataCompression alternative name for -noD -noFragmentCompression alternative name for -noF -noXattrCompression alternative name for -noX -help output this options text to stdout -h output this options text to stdout -Xhelp print compressor options for selected compressor 6. Tar style handling of source pathnames in Mksquashfs ========================================================= Mksquashfs has always stripped the leading directories of any source pathnames given on the command line. For example given the command line % mksquashfs dir-a/dir-b/dir-c/file1 dir-A/dir-B/file2 sqfs Mksquashfs will strip the leading directories, and put file1 and file2 into the same root directory. If file1 and file2 are directories it will place the directories into the same root directory, but, if only one directory is specified, it will put the contents of that directory into the root directory. Obviously, for a lot of the time this is what you want. But, if it isn't what you want it can be quite difficult to get Mksquashfs to do something different. A lot of people don't like this, and would prefer Mksquashfs acted like "tar", which does not strip leading directories. This allows you to create a directory hierarchy from the pathnames of the supplied files. In the above example, the tar archive would contain the pathnames "dir-a/dir-b/dir-c/file1" and "dir-A/dir-B/file2". Mksquashfs will now act like tar if given the option -no-strip, or -tarstyle. 7. Cpio style handling of source pathnames in Mksquashfs ======================================================== Mksquashfs now allows you to pipe the set of files to be added to the filesystem to standard in (stdin), if the -cpiostyle option is given. As with cpio, directories are not recursively scanned, and their contents added. Evey file to be added to the filesystem must be explicitly specified. Typically the list of files to be added will be produced via find, or a similar utility. For example % find /home/phillip/squashfs-tools | mksquashfs - img.sqfs -cpiostyle Will create an image containing everything in squashfs-tools and its sub-directories. Note, "-" is given as the source pathname in Mksquashfs, and indicates no commmand line sources. and the following will add just the files ending in .c, .h and .o. % find /home/phillip/squashfs-tools -name "*.[cho]" | mksquashfs - img.sqfs -cpiostyle 8. New option to throttle CPU and I/O Mksquashfs uses ===================================================== People have sometimes complained that Mksquashfs uses too much CPU and too much I/O, and can make a computer become very slow, or over-heat, and setting the processors option to 1 often doesn't have much effect. The reason for this is because Mksquashfs tries to run as fast as possible, as this is usually what people want. Due to this it is highly parallelised, and spawns multiple compression threads (for both blocks and fragments), and by default one each of those compression threads are spawned per core. In addition it also has separate reader and writer threads and large caches to ensure I/O through-put is maximised and performed in parallel with the compression threads (called read-ahead and write-behind). This means even when the "-processors 1" option is set, there is still a lot of parallel processing being performed, because the minmimum set of threads is a single block compression thread, a single fragment compression thread, and both a reader and writer thread. Unfortunately, these threads can easily still max out a single core, so that it is never idle. On a multi-core machine the "-processors 1" option usually produces a CPU load of around 130-180%. The solution adopted is to add an I/O "throttle", which will regulate the amount of I/O performed, and ultimately, how much CPU is consumed. This throttle can be set from 0 - 100, with the following two options added. -throttle <percentage> has the semantics of throttle the reader by X%. The higher the percentage, the greater the throughput of the reader thread is reduced. -limit <percentage> has the opposite sense of limit the output to X%. The higher the percentage, the greater the throughput of the reader thread. 9. New Pseudo file definitions with timestamps ============================================== The Pseudo file definitions previously supported did not allow the time of the file to be set. New extended pseudo file definitions have been added which take a <time> timestamp. These are distinquished from the previous definitions by using an upper-case type character. For example the "D" definition is identical to the previous "d" definition (it creates a directory), but it takes a <time> timestamp. The list of extended definitions are: filename D time mode uid gid filename M time mode uid gid filename B time mode uid gid major minor filename C time mode uid gid major minor filename F time mode uid gid command filename S time mode uid gid symlink <time> can be either an unsigned decimal integer (which represents the seconds since the epoch of 1970-01-01 01:00 UTC), or a "date string" which is parsed and converted into an integer since the epoch, by calling "date". Because most date strings have spaces, they will need to be quoted, and if entered on the command line, these quotes will need to be protected from the shell by backslashes, i.e. % mksquashfs x x.sqsh -p "file D \"1 jan 1980\" 0777 phillip phillip" Obviously anything "date" accepts as a valid string can be used, such as "yesterday", "last week" etc. 10. New Pseudo file definition to create File references (Hard Links) ===================================================================== The existing "f" Pseudo definition allows a regular file to be created from the output of a command (or shell). Often this is used to reference a file outside the source directories, by executing "cat", e.g. README f 0555 0 0 cat /home/phillip/latest-version/README Because this is quite a frequent use of the definition, a new faster "File reference" or Hard Link (in filesystem terms a File reference is a Hard Link) Pseudo definition has been added named 'l'. README l /home/phillip/latest-version/README Will create a reference to "/home/phillip/latest-version/README", and obviously the timestamp/mode and owership will be used. The definition also be used to create additional references to files within the source directories. For instance if "phillip/latest/README" was a file being added to the filesystem, then README l phillip/latest/README Will create a Hard Link (and increment the nlink count on the inode). In both cases, the Path to the file being referenced is the system filesystem path, and can be absolute (prefixed with /), or relative to the current working directory. There is an additional 'L' Pseudo definition, which closes a loophole in the above 'l' definition. The 'l' Pseudo definition cannot create references or Hard Links to files created by Pseudo definitions, because by definition they do not exist in the system filesystem. with 'L' the referenced file is expected to be a Pseudo file, and in this case the Path is taken to be from the root of the Squashfs filesystem being created, e.g. char-dev c 0555 0 0 1 2 link L char-dev Will create a Hard Link named "link" to the character device called "char-dev" created by the previous Pseudo definition. 11. New Pseudo file definitions to create Sockets/Fifos ======================================================= Two new definitions have been added which allows Sockets and Fifos to be created, which are: filename i mode uid gid [s|f] filename I time mode uid gid [s|f] The 'i' definition doesn't take a time value, whereas the 'I' definition does. To create a Unix domain socket, 's' should be used, i.e. filename i 0777 root root s and to create a FIFO, 'f' should be used, i.e. filename i 0777 root root f 12. Mksquashfs now allows no source directories ( specified as - ) ================================================================== Mksquashfs has removed the requirement to specify any physical source directories, and a Squashfs filesystem can now be built entirely with Pseudo definitions. For example the following command line % mksquashfs - img.sqfs -p "/ d 777 phillip users" -p "/hello l /tmp/typescript" -p "/link L hello" Will create a root directory, a file created by a reference to a file within the filesystem, and create a hard link to it. 13. New Sqfscat command which outputs the contents of files to standard out =========================================================================== Unsquashfs when run as "sqfscat" (either named as such, or via a hard or symbolic link) will output the contents of one or more files to standard out. The syntax and options supported are: SYNTAX: sqfscat [options] filesystem [files to cat] -v[ersion] print version, licence and copyright information -p[rocessors] <number> use <number> processors. By default will use number of processors available -o[ffset] <bytes> skip <bytes> at start of <dest>. Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively (default 0 bytes). -ig[nore-errors] treat errors writing files to output as non-fatal -st[rict-errors] treat all errors as fatal -no-exit[-code] don't set exit code (to nonzero) on non-fatal errors -da[ta-queue] <size> set data queue to <size> Mbytes. Default 256 Mbytes -fr[ag-queue] <size> set fragment queue to <size> Mbytes. Default 256 Mbytes -no-wild[cards] do not use wildcard matching in extract names -r[egex] treat extract names as POSIX regular expressions rather than use the default shell wildcard expansion (globbing) -h[elp] output this options text to stdout The pathnames of the files to be output, like cat, can contain symbolic links, and "." and ".." elements. Sqfscat is a short-cut to using the equivalent Unsquashfs -cat option, i.e. the following will behave the same: % sqfscat img file % unsquashfs -cat img file 14. Symbolic links are now "followed" in extract files ====================================================== Unsquashfs walks the extract file paths as it recursively extracts the Squashfs filesystem from top to bottom. During that recursive extraction symbolic links are obviously not followed (see below). The consequence of this is if an extract file ends in a symbolic link (leaf component) it is extracted and left as a dangling symlink, unless the real file it links to has also specified as an extract file. Additionally, if the extract file pathname traverses symbolic links while walking the pathname (i.e. the extract file pathname has embedded symbolic links), the extraction will stop at that point. One way of solving this problem is by following (or dereferencing) the symbolic link(s), and replacing them with what they actually link to, in a similar way to "cp -L". But this is dangerous, and can cause Unsquashfs to produce output which does not match the input Squashfs filesystem, which is something Unsquashfs should never do. The reason for this is whereas "cp -L" is derefencing the *input*, Unsquashfs is dereferencing the *output*. If a filesystem has a real filename, say a/b/c/hello_world and two symlinks a/symlink1 ---> b/c/hello_world a/symlink2 ---> b/c There are multiple different ways (or paths) to the *single* hello_world file. a/b/c/hello_world a/symlink1 a/symlink2/hello_world If Unsquashfs was given all three paths as extract files, and Unsquashfs dereferenced them on output, you will get *three* copies of the hello_world file, and two copies of directory "c". Superficially the output may look the same, but, it may not work the same, and obviously edits to the one hello_world file will not get reflected in the other copies. Any option that can be accidently or maliciously used to produce such an output is too dangerous to be added. Unsquashfs solves the problem in an equivalent way, but which does not alter the output, and so it is a completely safe option. If the -follow-symlinks option is specified, Unsquashfs will canonicalise the extract files to produce the canonical pathname (that is the "real" pathname without any symbolic links). It will then add all the symbolic links necessary to ensure that the extract file can be resolved. The -missing-symlinks option is similar to -follow-symlinks except it will cause Unsquashfs to abort if any symbolic link cannot be resolved. Note: as a side effect of the canonicalisation, with the above options enabled extract filenames can also now have ".", ".." elements within the pathnames. 15. Unsquashfs now supports "exclude" files in addition to "extract" files ========================================================================== Unsquashfs now allows exclude files to be specified, either on their own, or in addition to extract files. An exclude file is, obviously, the opposite of an extract file. Whereas an extract file limits the output of Unsquashfs to the files/directories matched by the extract file(s), exclude file(s) output the entire filesystem, with the sub-set of files matched by the exclude file(s) excluded. Often you want to output the filesystem where you're only interested in some files, which is where extract files are useful. But equally, you often want to to output the entire filesystem, but, with some unwanted files removed. An example of this, perhaps, is where you've inadvertantly, archived binaries (.o files etc.) and you're only interested in extracting the source code. In the above example, trying to remove the binaries (.o etc) when you've only got "extract" files capability becomes extremely messy. It is a lot easier to do that with "exclude" files. Unsquashfs now supports two ways of specifying exclude files. The most straightforward way is to tell Unsquashfs to treat extract files as exclude files. That is extract files are specified on the command line as a list of files after the options and filesystem image. Giving the -excludes option tells Unsquashfs to treat them as exclude files. To make this clearer, % unsquashfs img file1 file2 file3 Tells Unsquashfs to extract file1, file2 and file3. But, % unsquashfs -excludes img file1 file2 file3 Tells Unsquashfs to exclude file1, file2, and file3. The perhaps obvious problem with this, is it allows you to choose between "extract" files or "exclude" files. But, it doesn't allow you to have both "extract" files and "exclude" files on the command line. To get around this problem Unsquashfs supports another way of specifying exclude files. That is to use the option -exclude-list. This option allows a list of exclude files to specified, terminated by a ";". The necessity of using ";" to terminate the list is because this is a normal option, without it, any further entries on the command line would be interpreted as being part of the list. For example, the following are equivalent: % unsquashfs -excludes img file1 file2 file3 % unsquashfs -exclude-list file1 file2 file3 \; img Note the black-slashing of ";" to prevent it from being interpreted by the shell as a special character. Obviously, where the -exclude-list option comes into its own is when it is mixed with extract files, for example: % unsquashfs -exclude-list dir1/file1 dir2/file2 \; img dir1 dir2 This tells Unsquashfs to extract directories "dir1" and "dir2", and then to exclude the files "dir1/file1" and "dir2/file2". >From this it should be clear that the precedence is extract files and then exclude files, because it doesn't make any sense otherwise. Extract files define the set of directories/files to be extracted, and exclude files remove directories/files from that sub-set. 16. Max depth traversal option added ==================================== Unsquashfs has added a -max-depth <n> option, which will limit output and/or file listing to <n> depth directories, where the top level directory is depth 1, e.g. % unsquashfs -max-depth 3 -ll img Will limit the filesystem output listing to be 3 directories in depth. 17. Unsquashfs Pseudo file output ================================= If the Pseudo file (-pf) option is given, Unsquashfs will output a Pseudo file representation of the input filesystem. This pseudo file can be used as input to Mksquashfs to reproduce the Squashfs filesystem without having to unpack the input filesystem image. The Pseudo file output is designed to be editable, and the pseudo file entries can be altered (name, date, ownership etc.) or added/deleted before any new filesystem is rebuilt. The format of the pseudo file, is obviously, the same as the pseudo file definitions supported by Msquashfs. In this release (see sections 8, 9 and 10) this has been extended to fully support any file type and timestamp information (extended attributes are not yet supported). Regular files (with data) are supported with the new "R" pseudo definition, which is filename R time mode uid gid length offset <length> specifies the size of the file, and <offset> is a byte offset into the pseudo file where the data is stored. This offset is taken from the start of the data section (see below), rather than from the start of the file (this is allow the pseudo file entries to be edited without altering the data offsets). Data is deliberately stored out of line (i.e. unlike tar), to make the file more easily editable manually. An example pseudo file output for a filesystem consisting of a directory, two regular files, and a symbolic link might be / D 1625536033 1777 0 0 test D 1625536969 755 1000 100 test/hello_world R 1625535696 644 1000 100 12 0 test/regfile R 1625536928 644 1000 100 37 12 test/symlink S 1625535712 777 1000 100 hello_world # # START OF DATA - DO NOT MODIFY # Hello World This is the data contents of regfile Here you should be able see the most important aspects of the layout, the pseudo file entries appear at the start of the file, and the data is stored at the end. The two sections are separated by 3 special marker lines, containing the words "START OF DATA - DO NOT MODIFY". The following is a small example of how someone might edit and rebuild a Squashfs image. $ unsquashfs -pf pseudo test.sqsh $ sed -i "0,/# START OF DATA/s/\([^ ]* . [0-9]* [0-7]* \)[0-9]*/\11234/g" pseudo $ sed -i "0,/# START OF DATA/s/hello_world/hello/g" pseudo $ mksquashfs - test2.sqsh -pf pseudo This will change the ownership to uid 1234, and change the name of "hello_word" to "hello". 18. Compatibility ================= Mksquashfs 4.5 generates 4.0 filesystems. These filesystems are fully compatible/interchangable with filesystems generated by Mksquashfs 4.x and are mountable on 2.6.29 and later kernels.