mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-11-11 13:10:38 +00:00
266 lines
8.2 KiB
Groff
266 lines
8.2 KiB
Groff
SQUASHFS 4.1 - A squashed read-only filesystem for Linux
|
|
|
|
Copyright 2002-2010 Phillip Lougher <phillip@lougher.demon.co.uk>
|
|
|
|
Released under the GPL licence (version 2 or later).
|
|
|
|
Welcome to Squashfs 4.1. This is a tools only release, support for Squashfs
|
|
file systems is in mainline (2.6.29 and later).
|
|
|
|
New features in Squashfs-tools 4.1
|
|
----------------------------------
|
|
|
|
1. Support for extended attributes
|
|
2. Support for LZMA and LZO compression
|
|
3. New pseudo file features
|
|
|
|
Compatiblity
|
|
------------
|
|
|
|
Mksquashfs 4.1 generates 4.0 filesystems. These filesystems are fully
|
|
compatible/interchangable with filesystems generated by Mksquashfs 4.0 and are
|
|
mountable on 2.6.29 and later kernels.
|
|
|
|
Extended attributes (xattrs)
|
|
----------------------------
|
|
|
|
Squashfs file systems now have extended attribute support. The
|
|
extended attribute implementation has the following features:
|
|
|
|
1. Layout can store up to 2^48 bytes of compressed xattr data.
|
|
2. Number of xattrs per inode unlimited.
|
|
3. Total size of xattr data per inode 2^48 bytes of compressed data.
|
|
4. Up to 4 Gbytes of data per xattr value.
|
|
5. Inline and out-of-line xattr values supported for higher performance
|
|
in xattr scanning (listxattr & getxattr), and to allow xattr value
|
|
de-duplication.
|
|
6. Both whole inode xattr duplicate detection and individual xattr value
|
|
duplicate detection supported. These can obviously nest, file C's
|
|
xattrs can be a complete duplicate of file B, and file B's xattrs
|
|
can be a partial duplicate of file A.
|
|
7. Xattr name prefix types stored, allowing the redundant "user.", "trusted."
|
|
etc. characters to be eliminated and more concisely stored.
|
|
8. Support for files, directories, symbolic links, device nodes, fifos
|
|
and sockets.
|
|
|
|
Extended attribute support is in 2.6.35 and later kernels. File systems
|
|
with extended attributes can be mounted on 2.6.29 and later kernels, the
|
|
extended attributes will be ignored with a warning.
|
|
|
|
LZMA and LZO compression
|
|
------------------------
|
|
|
|
Squashfs now supports LZMA and LZO compression.
|
|
|
|
LZO support is in 2.6.36 and newer kernels. LZMA is not yet in mainline.
|
|
|
|
New Mksquashfs options
|
|
----------------------
|
|
|
|
-comp <comp>
|
|
|
|
Select <comp> compression.
|
|
|
|
The compression algorithms supported by the build of Mksquashfs can be
|
|
found by typing mksquashfs without any arguments. The compressors available
|
|
are displayed at the end of the help message, e.g.
|
|
|
|
Compressors available:
|
|
gzip (default)
|
|
lzma
|
|
lzo
|
|
|
|
The default compression used when -comp isn't specified on the command line
|
|
is indicated by "(default)".
|
|
|
|
-no-xattrs
|
|
Don't store extended attributes
|
|
|
|
-xattrs
|
|
Store extended attributes
|
|
|
|
The default behaviour of Mksquashfs with respect to extended attribute
|
|
storage is build time selectable. The Mksquashfs help message indicates
|
|
whether extended attributes are stored or not, e.g.
|
|
|
|
-no-xattrs don't store extended attributes
|
|
-xattrs store extended attributes (default)
|
|
|
|
shows that extended attributes are stored by default, and can be disabled
|
|
by the -no-xattrs option.
|
|
|
|
-no-xattrs don't store extended attributes (default)
|
|
-xattrs store extended attributes
|
|
|
|
shows that extended attributes are not stored by default, storage can be
|
|
enabled by the -xattrs option.
|
|
|
|
|
|
-noX
|
|
-noXattrCompression
|
|
Don't compress extended attributes
|
|
|
|
|
|
New Unsquashfs options
|
|
----------------------
|
|
|
|
-n[o-xattrs]
|
|
Don't extract xattrs in filesystem
|
|
|
|
-x[attrs]
|
|
Extract xattrs in filesystem
|
|
|
|
The default behaviour of Unsquashfs with respect to extended attributes
|
|
is build time selectable. The Unsquashfs help message indicates whether
|
|
extended attributes are stored or not, e.g.
|
|
|
|
-no[-xattrs] don't extract xattrs in file system
|
|
-x[attrs] extract xattrs in file system (default)
|
|
|
|
shows that xattrs are extracted by default.
|
|
|
|
-no[-xattrs] don't extract xattrs in file system (default)
|
|
-x[attrs] extract xattrs in file system
|
|
|
|
shows that xattrs are not extracted by default.
|
|
|
|
|
|
New pseudo file support
|
|
-----------------------
|
|
|
|
Mksquashfs supports pseudo files, these allow fake files, directories, character
|
|
and block devices to be specified and added to the Squashfs filesystem being
|
|
built, rather than requiring them to be present in the source directories.
|
|
This, for example, allows device nodes to be added to the filesystem without
|
|
requiring root access.
|
|
|
|
Mksquashfs 4.1 adds support for "dynamic pseudo files" and a modify operation.
|
|
Dynamic pseudo files allow files to be dynamically created when Mksquashfs
|
|
is run, their contents being the result of running a command or piece of
|
|
shell script. The modifiy operation allows the mode/uid/gid of an existing
|
|
file in the source filesystem to be modified.
|
|
|
|
Two Mksquashfs options are supported, -p allows one pseudo file to be specified
|
|
on the command line, and -pf allows a pseudo file to be specified containing a
|
|
list of pseduo definitions, one per line.
|
|
|
|
Pseudo operations
|
|
-----------------
|
|
|
|
1. Creating a dynamic file
|
|
--------------------------
|
|
|
|
Pseudo definition
|
|
|
|
Filename f mode uid gid command
|
|
|
|
mode is the octal mode specifier, similar to that expected by chmod.
|
|
|
|
uid and gid can be either specified as a decimal number, or by name.
|
|
|
|
command can be an executable or a piece of shell script, and it is executed
|
|
by running "/bin/sh -c command". The stdout becomes the contents of
|
|
"Filename".
|
|
|
|
Examples:
|
|
|
|
Running a basic command
|
|
-----------------------
|
|
|
|
/somedir/dmesg f 444 root root dmesg
|
|
|
|
creates a file "/somedir/dmesg" containing the output from dmesg.
|
|
|
|
Executing shell script
|
|
----------------------
|
|
|
|
RELEASE f 444 root root \
|
|
if [ ! -e /tmp/ver ]; then \
|
|
echo 0 > /tmp/ver; \
|
|
fi; \
|
|
ver=`cat /tmp/ver`; \
|
|
ver=$((ver +1)); \
|
|
echo $ver > /tmp/ver; \
|
|
echo -n `cat /tmp/release`; \
|
|
echo "-dev #"$ver `date` "Build host" `hostname`
|
|
|
|
Creates a file RELEASE containing the release name, date, build host, and
|
|
an incrementing version number. The incrementing version is a side-effect
|
|
of executing the shell script, and ensures every time Mksquashfs is run a
|
|
new version number is used without requiring any other shell scripting.
|
|
|
|
The above example also shows that commands can be split across multiple lines
|
|
using "\". Obviously as the script will be presented to the shell as a single
|
|
line, a semicolon is need to separate individual shell commands within the
|
|
shell script.
|
|
|
|
Reading from a device (or fifo/named socket)
|
|
--------------------------------------------
|
|
|
|
input f 444 root root dd if=/dev/sda1 bs=1024 count=10
|
|
|
|
Copies 10K from the device /dev/sda1 into the file input. Ordinarily Mksquashfs
|
|
given a device, fifo, or named socket will place that special file within the
|
|
Squashfs filesystem, the above allows input from these special files to be
|
|
captured and placed in the Squashfs filesystem.
|
|
|
|
2. Creating a block or character device
|
|
---------------------------------------
|
|
|
|
Pseudo definition
|
|
|
|
Filename type mode uid gid major minor
|
|
|
|
Where type is either
|
|
b - for block devices, and
|
|
c - for character devices
|
|
|
|
mode is the octal mode specifier, similar to that expected by chmod.
|
|
|
|
uid and gid can be either specified as a decimal number, or by name.
|
|
|
|
For example:
|
|
|
|
/dev/chr_dev c 666 root root 100 1
|
|
/dev/blk_dev b 666 0 0 200 200
|
|
|
|
creates a character device "/dev/chr_dev" with major:minor 100:1 and
|
|
a block device "/dev/blk_dev" with major:minor 200:200, both with root
|
|
uid/gid and a mode of rw-rw-rw.
|
|
|
|
3. Creating a directory
|
|
-----------------------
|
|
|
|
Pseudo definition
|
|
|
|
Filename d mode uid gid
|
|
|
|
mode is the octal mode specifier, similar to that expected by chmod.
|
|
|
|
uid and gid can be either specified as a decimal number, or by name.
|
|
|
|
For example:
|
|
|
|
/pseudo_dir d 666 root root
|
|
|
|
creates a directory "/pseudo_dir" with root uid/gid and mode of rw-rw-rw.
|
|
|
|
4. Modifying attributes of an existing file
|
|
-------------------------------------------
|
|
|
|
Pseudo definition
|
|
|
|
Filename m mode uid gid
|
|
|
|
mode is the octal mode specifier, similar to that expected by chmod.
|
|
|
|
uid and gid can be either specified as a decimal number, or by name.
|
|
|
|
For example:
|
|
|
|
dmesg m 666 root root
|
|
|
|
Changes the attributes of the file "dmesg" in the filesystem to have
|
|
root uid/gid and a mode of rw-rw-rw, overriding the attributes obtained
|
|
from the source filesystem.
|