| 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. |