initial commit

This commit is contained in:
longpanda
2020-04-05 00:07:50 +08:00
parent 2090c6fa97
commit 05a1b863a6
487 changed files with 114253 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
Help sponsor Squashfs development!
Maintaining and improving Squashfs is a lot of work, but Squashfs is one of
the only widely used Linux file systems that has no company backing. Squashfs
development is funded soley by the author, partially supported by donations
from companies and individuals that want to improve Squashfs for themselves
and others.
There's lots of exciting new improvements to Squashfs in the pipeline, and
if your company is a serious user of Squashfs, please consider accelerating
development of Squashfs by donating.
Donatations can be made from the Squashfs sourceforge homepage, or if you
prefer by contacting the author privately.

View File

@@ -0,0 +1,177 @@
* Obsolete *
This file is now largely obsolete, considering
it refers to Squashfs 2.1 (which was released in 2006)
and older releases.
GENERAL INFORMATION ON PERFORMANCE TESTS
----------------------------------------
The following performance tests were based on two file sets: the
liveCD filesystem from the Ubuntu liveCD (Warty release), and the
liveCD filesystem from the Damn Small Linux liveCD (release 0.8.4).
The Ubuntu liveCD filesystem was used to test filesystem performance
from CDROM and hard disk for Zisofs, Cloop, Squashfs 2.0 and Squashfs2.1.
CRAMFS filesystem performance could not be tested for this filesystem
bacause it exceeds the maximum supported size of CRAMFS. To test
CRAMFS performance against Squashfs, the liveCD filesystem from
Damn Small Linux was used.
NOTE: the usual warnings apply to these results, they are provided for
illustrative purposes only, and due to different hardware and/or file data, you
may obtain different results. As such the results are provided "as is" without
any warranty (either express or implied) and you assume all risks as to their
quality and accuracy.
1. Ubuntu liveCD performance tests
ext3 uncompressed size 1.4 GB
Zisofs compressed size 589.81 MB
Cloop compressed size 471.89 MB
Squashfs2.0 compressed size 448.58 MB
Squashfs2.1 compressed size 448.58 MB
1.1 Performance tests from CDROM
1.1.1 Directory Lookup performance
Time taken to perform "ls -lR --color=alawys | cat > /dev/null" on filesystem
mounted from CDROM
Zisofs 49.88 seconds (User 2.60 secs, Sys 11.19 secs)
Cloop 20.80 seconds (User 2.71 secs, Sys 13.50 secs)
Squashfs2.0 16.56 seconds (User 2.42 secs, Sys 10.37 secs)
Squashfs2.1 10.14 seconds (User 2.48 secs, Sys 4.44 secs)
1.1.2 Sequential I/O performance
Time taken to perform "tar cf - | cat > /dev/null" on filesystem mounted
from CDROM
Zisofs 27 minutes 28.54 seconds (User 3.00 secs, Sys 1 min 4.80 secs)
Cloop 5 minutes 55.72 seconds (User 2.90 secs, Sys 3 min 37.90 secs)
Squashfs2.0 5 minutes 20.87 seconds (User 2.33 secs, Sys 56.98 secs)
Squashfs2.1 5 minutes 15.46 seconds (user 2.28 secs, Sys 51.12 secs)
1.1.3 Random I/O performance
Random access pattern generated by "find /mnt -type f -printf "%s %p\n" | sort
-g | awk '{ printf $2 }' > /tmp/sort
Time taken to perform "cpio -o --quiet -H newc < /tmp/sort > /dev/null"
on filesystem mounted from CDROM
Zisofs 101 minutes 29.65 seconds (User 5.33 secs, Sys 1 min 17.20 secs)
Cloop 35 minutes 27.51 seconds (user 5.93 secs, Sys 4 mins 30.23 secs)
Squashfs2.0 21 minutes 53.05 seconds (user 5.71 secs, Sys 2 mins 36.59 secs)
Squashfs2.1 21 minutes 46.99 seconds (User 5.80 secs, Sys 2 mins 31.88 secs)
1.2 Performance tests from Hard disk
1.2.1 Directory Lookup performance
Time taken to perform "ls -lR --color=alawys | cat > /dev/null" on filesystem
mounted from Hard disk
Zisofs 17.29 seconds (User 2.62 secs, Sys 11.08 secs)
Cloop 16.46 seconds (User 2.63 secs, Sys 13.41 secs)
Squashfs2.0 13.75 seconds (User 2.44 secs, Sys 11.00 secs)
Squashfs2.1 6.94 seconds (User 2.44 secs, Sys 4.48 secs)
1.2.2 Sequential I/O performance
Time taken to perform "tar cf - | cat > /dev/null" on filesystem mounted
from Hard disk
Zisofs 1 minute 21.47 seconds (User 2.73 secs, Sys 54.44 secs)
Cloop 1 minute 34.06 seconds (user 2.85 secs, Sys 1 min 12.13 secs)
Squashfs2.0 1 minute 21.22 seconds (User 2.42 secs, Sys 56.21 secs)
Squashfs2.1 1 minute 15.46 seconds (User 2.36 secs, Sys 49.78 secs)
1.2.3 Random I/O performance
Random access pattern generated by "find /mnt -type f -printf "%s %p\n" | sort
-g | awk '{ printf $2 }' > /tmp/sort
Time taken to perform "cpio -o --quiet -H newc < /tmp/sort > /dev/null"
on filesystem mounted from Hard disk
Zisofs 11 minutes 13.64 seconds (User 5.08 secs, Sys 52.62 secs)
Cloop 5 minutes 37.93 seconds (user 6 secs, Sys 2 mins 22.38 secs)
Squashfs2.0 5 minutes 7.11 seconds (user 5.63 secs, Sys 2 mins 35.23 secs)
Squashfs2.1 5 minutes 1.87 seconds (User 5.71 secs, Sys 2 mins 29.98 secs)
2. Damn Small Linux liveCD performance tests
ext3 uncompressed size 126 MB
CRAMFS compressed size 52.19 MB
Squashfs2.0 compressed size 46.52 MB
Squashfs2.1 compressed size 46.52 MB
2.1 Performance tests from CDROM
2.1.1 Directory Lookup performance
Time taken to perform "ls -lR --color=alawys | cat > /dev/null" on filesystem
mounted from CDROM
CRAMFS 10.85 seconds (User 0.39 secs, Sys 0.98 secs)
Squashfs2.0 2.97 seconds (User 0.36 secs, Sys 2.15 secs)
Squashfs2.1 2.43 seconds (User 0.40 secs, Sys 1.42 secs)
2.1.2 Sequential I/O performance
Time taken to perform "tar cf - | cat > /dev/null" on filesystem mounted
from CDROM
CRAMFS 55.38 seconds (User 0.34 secs, Sys 6.98 secs)
Squashfs2.0 35.99 seconds (User 0.30 secs, Sys 6.35 secs)
Squashfs2.1 33.83 seconds (User 0.26 secs, Sys 5.56 secs)
2.1.3 Random I/O performance
Random access pattern generated by "find /mnt -type f -printf "%s %p\n" | sort
-g | awk '{ printf $2 }' > /tmp/sort
Time taken to perform "cpio -o --quiet -H newc < /tmp/sort > /dev/null"
on filesystem mounted from CDROM
CRAMFS 3 minutes 1.68 seconds (User 0.54 secs, Sys 9.51 secs)
Squashfs2.0 1 minute 39.45 seconds (User 0.57 secs, Sys 13.14 secs)
Squashfs2.1 1 minute 38.41 seconds (User 0.58 secs, Sys 13.08 secs)
2.2 Performance tests from Hard disk
2.2.1 Directory Lookup performance
Time taken to perform "ls -lR --color=alawys | cat > /dev/null" on filesystem
mounted from Hard disk
CRAMFS 1.77 seconds (User 0.53 secs, Sys 1.21 secs)
Squashfs2.0 2.67 seconds (User 0.41 secs, Sys 2.25 secs)
Squashfs2.1 1.87 seconds (User 0.41 secs, Sys 1.46 secs)
2.2.2 Sequential I/O performance
Time taken to perform "tar cf - | cat > /dev/null" on filesystem mounted
from Hard disk
CRAMFS 6.80 seconds (User 0.36 secs, Sys 6.02 secs)
Squashfs2.0 7.23 seconds (User 0.29 secs, Sys 6.62 secs)
Squashfs2.1 6.53 seconds (User 0.31 secs, Sys 5.82 secs)
2.2.3 Random I/O performance
Random access pattern generated by "find /mnt -type f -printf "%s %p\n" | sort
-g | awk '{ printf $2 }' > /tmp/sort
Time taken to perform "cpio -o --quiet -H newc < /tmp/sort > /dev/null"
on filesystem mounted from Hard disk
CRAMFS 28.55 seconds (User 0.49 secs, Sys 6.49 secs)
Squashfs2.0 25.44 seconds (User 0.58 secs, Sys 13.17 secs)
Squashfs2.1 24.72 seconds (User 0.56 secs, Sys 13.15 secs)

View File

@@ -0,0 +1,161 @@
NOTE: This the original README for version 2.0. It is retained as it
contains information about the fragment design. A description of the new 2.0
mksquashfs options has been added to the main README file, and that
file should now be consulted for these.
SQUASHFS 2.0 - A squashed read-only filesystem for Linux
Copyright 2004 Phillip Lougher (plougher@users.sourceforge.net)
Released under the GPL licence (version 2 or later).
Welcome to the final release of Squashfs version 2.0! A lot of changes to the
filesystem have been made under the bonnet (hood). Squashfs 2.0 uses fragment
blocks and larger blocks (64K) to improve compression ratio by about 5 - 20%
over Squashfs 1.0 depending on the files being compressed. Using fragment
blocks allows Squashfs 2.0 to achieve better compression than cloop and similar
compression to tgz files while retaining the I/O efficiency of a compressed
filesystem.
Detailed changes:
1. Squashfs 2.0 has added the concept of fragment blocks (see later discussion).
Files smaller than the file block size (64K in Squashfs 2.0) and optionally
the remainder of files that do not fit fully into a block (i.e. the last 32K
in a 96K file) are packed into shared fragments and compressed together.
This achieves on average 5 - 20% better compression than Squashfs 1.x.
2. The maximum block size has been increased to 64K.
3. The maximum number of UIDs has been increased to 256 (from 48 in 1.x).
4. The maximum number of GIDs has been increased to 256 (from 15 in 1.x).
5. New mksquashfs -all-root, -root-owned, -force-uid, and -force-gid
options. These allow the uids/gids of files in the generated
filesystem to be specified, overriding the uids/gids in the
source filesystem.
6. Initrds are now supported for kernels 2.6.x.
7. Removal of sleep_on() function call in 2.6.x patch, to allow Squashfs
to work on the Fedora rc2 kernel.
8. AMD64, check-data and gid bug fixes.
9. Numerous small bug fixes have been made.
10. New patch for Linux 2.6.7.
New Squashfs 2.0 options
------------------------
-noF or -noFragmentCompression
Do not compress the fragments. Added for compatibility with noI and
noD, probably not that useful.
-no-fragments
Do not use fragment blocks, and rather generate a filesystem
similar to a Squashfs 1.x filesystem. It will of course still
be a Squashfs 2.0 filesystem but without fragments, and so
it won't be mountable on a Squashfs 1.x system.
-always-use-fragments
By default only small files less than the block size are packed into
fragment blocks. The ends of files which do not fit fully into a block,
are NOT by default packed into fragments. To illustrate this, a
100K file has an initial 64K block and a 36K remainder. This
36K remainder is not packed into a fragment by default. This is
because to do so leads to a 10 - 20% drop in sequential I/O
performance, as a disk head seek is needed to seek to the initial
file data and another disk seek is need to seek to the fragment
block.
Specify this option if you want file remainders to be packed into
fragment blocks. Doing so may increase the compression obtained
BUT at the expense of I/O speed.
-no-duplicates
Do not detect duplicate files.
-all-root
-root-owned
These options (both do exactly the same thing), force all file
uids/gids in the generated Squashfs filesystem to be root.
This allows root owned filesystems to be built without root access
on the host machine.
-force-uid uid
This option forces all files in the generated Squashfs filesystem to
be owned by the specified uid. The uid can be specified either by
name (i.e. "root") or by number.
-force-gid gid
This option forces all files in the generated Squashfs filesystem to
be group owned by the specified gid. The gid can be specified either by
name (i.e. "root") or by number.
Compression improvements example
--------------------------------
The following is the compression results obtained compressing the 2.6.6
linux kernel source using CRAMFS, Cloop (with iso filesystem), Squashfs 1.3 and
Squashfs 2.0 (results generated using big-endian filesystems).
In decreasing order of size:
CRAMFS 62791680 bytes (59.9M)
Squashfs 1.x 51351552 bytes (48.9M)
Cloop 46118681 bytes (44.0M)
Squashfs 2.0 45604854 bytes (43.5M)
The Squashfs 1.x filesystem is 12.6% larger than the new 2.0 filesystem.
The cloop filesystem is 1.1% larger than the Squashfs 2.0 filesystem.
Fragment blocks in Squashfs 2.0
-------------------------------
Squashfs like all other compressed filesystems compresses files individually
on a block by block basis. This is performed to allow mounting and
de-compression of files on a block by block basis without requiring the entire
filesystem to be decompressed. This is in contrast to data-based compression
schemes which compress without understanding the underlying filesystem (i.e.
cloop and tgz files) and which, therefore, do not compress files individually.
Each approach has advantages and disadvantages, data-based systems have better
compression because compression is always performed at the maximum block size
(64K in cloop) irrespective of the size of each file (which could be less than
the block size). Compressed filesystems tend to be faster at I/O because
they understand the filesystem and therefore employ better caching stategies
and read less un-needed data from the filesystem.
Fragment blocks in Squashfs 2.0 solves this problem by packing files (and
optionally the ends of files) which are smaller than the block size into
shared blocks, which are compressed together. For example five files each of
10K will be packed into one shared fragment of 50K and compressed together,
rather than being compressed in five 10K blocks.
This scheme produces a hybrid filesystem, retaining the I/O efficiency
of a compressed filesystem, while obtaining the compression efficiency
of data-based schemes by compressing small files together.
Squashfs 1.x and Squashfs 2.0 compatibility
-------------------------------------------
Appending to Squashfs 1.x filesystems is not supported. If you wish to append
to 1.x filesystems, then either use the original mksquashfs, or convert them
to Squashfs 2.0 by mounting the filesystem and running the 2.0 mksquashfs
on the mounted filesystem.
Mounting Squashfs 1.x filesystems IS supported by the 2.0 kernel patch.

View File

@@ -0,0 +1,18 @@
Information for amd64 users
---------------------------
All previous releases of Squashfs (2.0-alpha and older) generate incorrect
filesystems on amd64 machines. These filesystems work correctly on amd64
machines, but cannot be mounted on non-amd64 machines. Likewise, filesystems
generated on non amd64 machines could not be mounted on amd64 machines.
This bug was caused by the different size of the "time_t" definition used in
SquashFS filesystem structures.
This bug is now fixed in this release. However, all amd64 filesystems
generated by previous releases will not be mountable on amd64 machines
with this release. If you have pre-existing amd64 generated filesystems,
it is important that you recreate the filesystem. This can be performed
by mounting the filesystem using a kernel with the original patch
(i.e. a 2.0-alpha or older patch) and running the SquashFS 2.0
(i.e. this release) mksquashfs tool to create a new SquashFS filesystem.

View File

@@ -0,0 +1,87 @@
SQUASHFS 2.1 - A squashed read-only filesystem for Linux
Copyright 2004 Phillip Lougher (plougher@users.sourceforge.net)
Released under the GPL licence (version 2 or later).
Welcome to Squashfs version 2.1-r2. Squashfs 2.1 introduces indexed
directories which considerably speed up directory lookup (ls, find etc.) for
directories which are greater than 8K in size. All directories are now also
sorted alphabetically which further speeds up directory lookup. Many smaller
improvements have also been made to this release, please see the CHANGES file
entry for detailed changes.
1. DIRECTORY SPEED IMPROVEMENT EXAMPLES
---------------------------------------
To give an indication of the directory speed improvements a number of test
results are shown here. There is in addition a new PERFORMANCE.README file
which gives details of I/O and lookup performance for Squashfs 2.1 against
the Zisofs, Cloop and CRAMFS filesystems.
example 1:
Filesystems generated from a single directory of 72,784 files (2.6 MB
directory size). Each file is 10 bytes in size (the test is directory
lookup and so the file size isn't an issue). The ext3 uncompressed
directory size is 288 MB (presumably because of one file per block).
Zisofs compressed size 153.50 MB
Cloop (isofs) compressed size 1.74 MB
Squashfs2.1 compressed size 612 KB (0.60 MB)
Time taken to perform "ls -lR --color=always | cat > /dev/null" on
filesystems mounted on hard disk.
Zisofs 35 minutes 7.895 seconds (User 7.868 secs, Sys 34 mins 5.621 secs)
Cloop 35 minutes 12.765 seconds (User 7.771 secs, Sys 34 mins 3.869 secs)
Squashfs2.1 19 seconds (User 5.119 secs, Sys 14.547 secs)
example 2:
Filesystems were generated from the Ubuntu Warty livecd (original uncompressed
size on ext3 is 1.4 GB).
Zisofs compressed size 589.81 MB
Cloop (isofs) compressed size 471.19 MB
Squashfs2.0 compressed size 448.58 MB
Squashfs2.1 compressed size 448.58 MB
Time taken to perform "ls -lR --color=always | cat > /dev/null" on
filesystems mounted on hard disk.
Zisofs 49.875 seconds (User time 2.589 secs, Sys 11.194 secs)
Cloop 20.797 seconds (User time 2.706 secs, Sys 13.496 secs)
Squashfs2.0 16.556 seconds (User time 2.424 secs, Sys 10.371 secs)
Squashfs2.1 10.143 seconds (User time 2.475 secs, Sys 4.440 secs)
NOTE: the usual warnings apply to these results, they are provided for
illustrative purposes only, and due to different hardware and/or file data, you
may obtain different results. As such the results are provided "as is" without
any warranty (either express or implied) and you assume all risks as to their
quality and accuracy.
2. NEW MKSQUASHFS OPTIONS
-------------------------
There is only one extra option "-2.0". This tells mksquashfs to generate
a filesystem which is mountable with Squashfs version 2.0.
3. APPENDING AND MOUNTING SQUASHFS 2.0 FILESYSTEMS
--------------------------------------------------
Mounting 2.0 filesystems is supported by Squashfs 2.1. In addition
mksquashfs v2.1 can append to 2.0 filesystems, although the generated
filesystem will still be a 2.0 filesystem.
4. DONATIONS
------------
If you find Squashfs useful then please consider making a donation,
particularly if you use Squashfs in a commercial product. Please consider
giving something back especially if you're making money from it.
Off the Squashfs subject somewhat I'm currently looking for another
job doing Linux kernel or filesystems work. If you know of any such
work that can be performed from the UK then please get in touch. Thanks.

View File

@@ -0,0 +1,60 @@
SQUASHFS 3.0 - A squashed read-only filesystem for Linux
Copyright 2002-2006 Phillip Lougher <phillip@lougher.org.uk>
Released under the GPL licence (version 2 or later).
Welcome to the first release of Squashfs version 3.0. Squashfs 3.0 has the
the following improvements to 2.x.
1. Filesystems are no longer limited to 4 GB. In
theory 2^64 or 4 exabytes is now supported.
2. Files are no longer limited to 4 GB. In theory the maximum
file size is 4 exabytes.
3. Metadata (inode table and directory tables) are no longer
restricted to 16 Mbytes.
4. Hardlinks are now suppported.
5. Nlink counts are now supported.
6. Readdir now returns '.' and '..' entries.
7. Special support for files larger than 256 MB has been added to
the Squashfs kernel code for faster read access.
8. Inode numbers are now stored within the inode rather than being
computed from inode location on disk (this is not so much an
improvement, but a change forced by the previously listed
improvements).
There is a new Unsquashfs utility (in squashfs-tools) than can be used to
decompress a filesystem without mounting it.
Squashfs 3.0 supports 2.x filesystems. Support for 1.x filesystems
will be added in the future.
1. UNSQUASHFS
-------------
Unsquashfs has the following options:
SYNTAX: unsquashfs [-ls | -dest] filesystem
-version print version, licence and copyright information
-info print files as they are unsquashed
-ls list filesystem only
-dest <pathname> unsquash to <pathname>, default "squashfs-root"
The "-ls" option can be used to list the contents of a filesystem without
decompressing the filesystem data itself.
The "-info" option forces Unsquashfs to print each file as it is decompressed.
The "-dest" option specifies the directory that is used to decompress
the filesystem data. If this option is not given then the filesystem is
decompressed to the directory "squashfs-root" in the current working directory.
Unsquashfs can decompress 3.0 filesystems. Support for 2.x and 1.x
filesystems will be added in the future.

View File

@@ -0,0 +1,158 @@
SQUASHFS 3.1 - A squashed read-only filesystem for Linux
Copyright 2002-2006 Phillip Lougher <phillip@lougher.org.uk>
Released under the GPL licence (version 2 or later).
Welcome to Squashfs version 3.1-r2. Squashfs 3.1 has major improvements to
the Squashfs tools (Mksquashfs and Unsquashfs), some major bug fixes, new
kernel patches, and various other smaller improvements and bug fixes.
Please see the CHANGES file for a detailed list.
1. MKSQUASHFS
-------------
Mksquashfs has been rewritten and it is now multi-threaded. It offers
the following improvements:
1. Parallel compression. By default as many compression and fragment
compression threads are created as there are available processors.
This significantly speeds up performance on SMP systems.
2. File input and filesystem output is peformed in parallel on separate
threads to maximise I/O performance. Even on single processor systems
this speeds up performance by at least 10%.
3. Appending has been significantly improved, and files within the
filesystem being appended to are no longer scanned and checksummed. This
significantly improves append time for large filesystems.
4. File duplicate checking has been optimised, and split into two separate
phases. Only files which are considered possible duplicates after the
first phase are checksummed and cached in memory.
5. The use of swap memory was found to significantly impact performance. The
amount of memory used to cache the file is now a command line option, by default
this is 512 Mbytes.
1.1 NEW COMMAND LINE OPTIONS
----------------------------
The new Mksquashfs program has a couple of extra command line options
which can be used to control the new features:
-processors <processors>
This specifies the number of processors used by Mksquashfs.
By default this is the number of available processors.
-read_queue <size in Mbytes>
This specifies the size of the file input queue used by the reader thread.
This defaults to 64 Mbytes.
-write_queue <size in Mbytes>
This specifies the size of the filesystem output queue used by the
writer thread. It also specifies the maximum cache used in file
duplicate detection (the output queue is shared between these tasks).
This defaults to 512 Mbytes.
1.2 PERFORMANCE RESULTS
-----------------------
The following results give an indication of the speed improvements. Two
example filesystems were tested, a liveCD filesystem (about 1.8 Gbytes
uncompressed), and my home directory consisting largely of text files
(about 1.3 Gbytes uncompressed). Tests were run on a single core
and a dual core system.
Dual Core (AMDx2 3800+) system:
Source directories on ext3.
LiveCD, old mksquashfs:
real 11m48.401s
user 9m27.056s
sys 0m15.281s
LiveCD, new par_mksquashfs:
real 4m8.736s
user 7m11.771s
sys 0m27.749s
"Home", old mksquashfs:
real 4m34.360s
user 3m54.007s
sys 0m32.155s
"Home", new par_mksquashfs:
real 1m27.381s
user 2m7.304s
sys 0m17.234s
Single Core PowerBook (PowerPC G4 1.5 GHz Ubuntu Linux)
Source directories on ext3.
LiveCD, old mksquashs:
real 11m38.472s
user 9m6.137s
sys 0m23.799s
LiveCD, par_mksquashfs:
real 10m5.572s
user 8m59.921s
sys 0m16.145s
"Home", old mksquashfs:
real 3m42.298s
user 2m49.478s
sys 0m13.675s
"Home", new par_mksquashfs:
real 3m9.178s
user 2m50.699s
sys 0m9.069s
I'll be interested in any performance results obtained, especially from SMP
machines larger than my dual-core AMD box, as this will give an indication of
the scalability of the code. Obviously, I'm also interested in any problems,
deadlocks, low performance etc.
2. UNSQUASHFS
-------------
Unsquashfs now allows you to specify the filename or directory that is to be
extracted from the Squashfs filesystem, rather than always extracting the
entire filesystem. It also has a new "-force" option, and all options can be
specified in a short form (-i rather than -info).
The Unsquashfs usage info is now:
SYNTAX: ./unsquashfs [options] filesystem [directory or file to extract]
-v[ersion] print version, licence and copyright information
-i[nfo] print files as they are unsquashed
-l[s] list filesystem only
-d[est] <pathname> unsquash to <pathname>, default "squashfs-root"
-f[orce] if file already exists then overwrite
To extract a subset of the filesystem, the filename or directory
tree that is to be extracted can now be specified on the command line. The
file/directory should be specified using the full path to the file/directory
as it appears within the Squashfs filesystem. The file/directory will also be
extracted to that position within the specified destination directory.
The new "-force" option forces Unsquashfs to output to the destination
directory even if files or directories already exist. This allows you
to update an existing directory tree, or to Unsquashfs to a partially
filled directory. Without the "-force" option, Unsquashfs will
refuse to overwrite any existing files, or to create any directories if they
already exist. This is done to protect data in case of mistakes, and
so the "-force" option should be used with caution.

View File

@@ -0,0 +1,33 @@
SQUASHFS 3.2 - A squashed read-only filesystem for Linux
Copyright 2002-2007 Phillip Lougher <phillip@lougher.org.uk>
Released under the GPL licence (version 2 or later).
Welcome to Squashfs version 3.2. Squashfs 3.2 has support for NFS exporting,
some improvements to the Squashfs tools (Mksquashfs and Unsquashfs), some
major bug fixes, new kernel patches, and various other smaller improvements
and bug fixes. Please see the CHANGES file for a detailed list.
1. MKSQUASHFS
-------------
New command line options:
-no-exports
Squashfs now supports NFS exports. By default the additional
information necessary is added to the filesystem by Mksquashfs. If you
do not wish this extra information, then this option can be specified.
This will save a couple of bytes per file, and the filesystem
will be identical to Squashfs 3.1.
-no-progress
Mksquashfs by default now displays a progress bar. This option disables
it.
2. UNSQUASHFS
-------------
Unsquashfs now supports Squashfs 2.x filesystems.

View File

@@ -0,0 +1,169 @@
SQUASHFS 3.3 - A squashed read-only filesystem for Linux
Copyright 2002-2007 Phillip Lougher <phillip@lougher.demon.co.uk>
Released under the GPL licence (version 2 or later).
Welcome to another release of Squashfs. This is the 22nd release in just
over five years of work. Squashfs 3.3 has lots of nice improvements,
both to the filesystem itself (bigger blocks, and sparse files), but
also to the Squashfs-tools Mksquashfs and Unsquashfs. As usual the
CHANGES file has a detailed list of all the improvements.
Following is a description of the changes to the Squashfs tools, usage
guides to the new options, and a summary of the new options.
1. MKSQUASHFS - EXTENDED EXCLUDE FILE HANDLING
----------------------------------------------
1. Extended wildcard pattern matching now supported in exclude files
Enabled by specifying -wildcards option
Supports both anchored and non-anchored exclude files.
1.1 Anchored excludes
Similar to existing exclude files except with wildcards. Exclude
file matches from root of source directories.
Examples:
1. mksquashfs example image.sqsh -wildcards -e 'test/*.gz'
Exclude all files matching "*.gz" in the top level directory "test".
2. mksquashfs example image.sqsh -wildcards -e '*/[Tt]est/example*'
Exclude all files beginning with "example" inside directories called
"Test" or "test", that occur inside any top level directory.
Using extended wildcards, negative matching is also possible.
3. mksquashfs example image.sqsh -wildcards -e 'test/!(*data*).gz'
Exclude all files matching "*.gz" in top level directory "test",
except those with "data" in the name.
1.2 Non-anchored excludes
By default excludes match from the top level directory, but it is
often useful to exclude a file matching anywhere in the source directories.
For this non-anchored excludes can be used, specified by pre-fixing the
exclude with "...".
Examples:
1. mksquashfs example image.sqsh -wildcards -e '... *.gz'
Exclude files matching "*.gz" anywhere in the source directories.
For example this will match "example.gz", "test/example.gz", and
"test/test/example.gz".
2. mksquashfs example image.sqsh -wildcards -e '... [Tt]est/*.gz'
Exclude files matching "*.gz" inside directories called "Test" or
"test" that occur anywhere in the source directories.
Again, using extended wildcards, negative matching is also possible.
3. mksquashfs example image.sqsh -wildcards -e '... !(*data*).gz'
Exclude all files matching "*.gz" anywhere in the source directories,
except those with "data" in the name.
2. Regular expression pattern matching now supported in exclude files
Enabled by specifying -regex option. Identical behaviour to wild
card pattern matching, except patterns are considered to be regular
expressions.
Supports both anchored and non-anchored exclude files.
2. MKSQUASHFS - NEW RECOVERY FILE FEATURE
-----------------------------------------
Recovery files are now created when appending to existing Squashfs
filesystems. This allows the original filesystem to be recovered
if Mksquashfs aborts unexpectedly (i.e. power failure).
The recovery files are called squashfs_recovery_xxx_yyy, where
"xxx" is the name of the filesystem being appended to, and "yyy" is a
number to guarantee filename uniqueness (the PID of the parent Mksquashfs
process).
Normally if Mksquashfs exits correctly the recovery file is deleted to
avoid cluttering the filesystem. If Mksquashfs aborts, the "-recover"
option can be used to recover the filesystem, giving the previously
created recovery file as a parameter, i.e.
mksquashfs dummy image.sqsh -recover squashfs_recovery_image.sqsh_1234
The writing of the recovery file can be disabled by specifying the
"-no-recovery" option.
3. UNSQUASHFS - EXTENDED EXTRACT FILE HANDLING
----------------------------------------------
1. Multiple extract files can now be specified on the command line, and the
files/directories to be extracted can now also be given in a file.
To specify a file containing the extract files use the "-e[f]" option.
2. Extended wildcard pattern matching now supported in extract files
Enabled by default. Similar to existing extract files except with
wildcards.
Examples:
1. unsquashfs image.sqsh 'test/*.gz'
Extract all files matching "*.gz" in the top level directory "test".
2. unsquashfs image.sqsh '[Tt]est/example*'
Extract all files beginning with "example" inside top level directories
called "Test" or "test".
Using extended wildcards, negative matching is also possible.
3. unsquashfs image.sqsh 'test/!(*data*).gz'
Extract all files matching "*.gz" in top level directory "test",
except those with "data" in the name.
3. Regular expression pattern matching now supported in extract files
Enabled by specifying -r[egex] option. Identical behaviour to wild
card pattern matching, except patterns are considered to be regular
expressions.
4. UNSQUASHFS - EXTENDED FILENAME PRINTING
------------------------------------------
Filename printing has been enhanced and Unquashfs can now display filenames
with file attributes ('ls -l' style output).
New options:
-ll[s]
list filesystem with file attributes, but don't unsquash
-li[nfo]
print files as they are unsquashed with file attributes
5. UNSQUASHFS - MISCELLANEOUS OPTIONS
-------------------------------------
-s[tat]
Display the filesystem superblock information. This is useful to
discover the filesystem version, byte ordering, whether it has an
NFS export table, and what options were used to compress
the filesystem.

View File

@@ -0,0 +1,48 @@
SQUASHFS 4.0 - A squashed read-only filesystem for Linux
Copyright 2002-2009 Phillip Lougher <phillip@lougher.demon.co.uk>
Released under the GPL licence (version 2 or later).
Welcome to Squashfs 4.0. This is an initial tools only release to
support users of the 2.6.29 kernel, following the mainlining of Squashfs
earlier this year.
Later releases will probably contain kernel patches supporting 4.0
layouts for earlier kernels.
New Mksquashfs options
----------------------
Mksquashfs now supports pseudo files, these allow fake 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.
Two 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 device nodes are specified using 7 arguments
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 444 0 0 200 200
Directories are specified using 5 arguments
Filename type mode uid gid
Where type is d.

View File

@@ -0,0 +1,265 @@
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.

View File

@@ -0,0 +1,57 @@
SQUASHFS 4.2 - A squashed read-only filesystem for Linux
Copyright 2002-2011 Phillip Lougher <phillip@lougher.demon.co.uk>
Released under the GPL licence (version 2 or later).
Welcome to Squashfs 4.2. This is a tools only release, support for Squashfs
filesystems is in mainline (2.6.29 and later).
New features in Squashfs-tools 4.2
----------------------------------
1. Support for XZ compression
2. Support for compressor specific options
Compatiblity
------------
Mksquashfs 4.2 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.
XZ compression
--------------
Squashfs now supports XZ compression.
XZ support is in 2.6.38 and newer kernels.
New Mksquashfs options
----------------------
-X<compressor-option>
Compression algorithms can now support compression specific options. These
options are prefixed by -X, and are passed to the compressor for handling.
The compression specific options supported by each compressor can be
found by typing mksquashfs without any arguments. They are displayed at the
end of the help message, e.g.
Compressors available and compressor specific options:
gzip (no options) (default)
lzo (no options)
xz
-Xbcj filter1,filter2,...,filterN
Compress using filter1,filter2,...,filterN in turn
(in addition to no filter), and choose the best compression.
Available filters: x86, arm, armthumb, powerpc, sparc, ia64
-Xdict-size <dict-size>
Use <dict-size> as the XZ dictionary size. The dictionary size
can be specified as a percentage of the block size, or as an
absolute value. The dictionary size must be less than or equal
to the block size and 8192 bytes or larger. It must also be
storable in the xz header as either 2^n or as 2^n+2^(n+1).
Example dict-sizes are 75%, 50%, 37.5%, 25%, or 32K, 16K, 8K
etc.

View File

@@ -0,0 +1,182 @@
SQUASHFS 4.3 - A squashed read-only filesystem for Linux
Copyright 2002-2014 Phillip Lougher <phillip@lougher.demon.co.uk>
Released under the GPL licence (version 2 or later).
Welcome to Squashfs 4.3. This is the first release in over 3 years, and
there are substantial improvements to stability, new compression options
and compressors, speed optimisations, and new options for Mksquashfs/Unsquashfs.
This is a tools only release, support for Squashfs filesystems is
in mainline (2.6.29 and later).
Changes in Squashfs-tools 4.3
-----------------------------
1. Stability improvements. Better checking of user input for out of
range/invalid values. Better handling of corrupted Squashfs filesystems
(Mksquashfs append mode, and Unsquashfs). Better handling of buffer
overflow/underflow.
2. GZIP compressor now supports compression options, allowing different
compression levels to be used.
3. Rewritten LZO compressor with compression options, allowing different
LZO algorithms and different compression levels to be used.
4. New LZ4 compressor (note not yet in mainline kernel)
5. Better default memory usage for Mksquashfs. Mksquashfs by default now
uses 25% of physical memory.
6. Duplicate checking in Mksquashfs further optimised. With certain
"problem filesystems" greater than 2x performance improvement.
Filesystems with a lot of duplicates should see at least 10-20% speed
improvement.
7. The -stat option in Unsquashfs now displays the compression options
used to generate the original filesystem. Previously -stat only displayed
the compression algorithm used.
8. The file being compressed/uncompressed in Mksquashfs/Unsquashfs is now
displayed if CTRL-\ (SIGQUIT from keyboard) typed.
9. The status of the internal queues/caches in Mksquashfs/Unsquashfs is
now displayed if CTRL-\ (SIGQUIT from keyboard) is typed twice within
one second. Normally only useful for "power users", but it can be
used to discover if there's any bottlenecks affecting performance
(the bottleneck will normally be the compressors/fragment compressors).
10. Miscellaneous new options for Mksquashfs/Unsquashfs to fine tune behaviour.
11. Fixes for CVE-2012-4024 and CVE-2012-4025.
Compatiblity
------------
Mksquashfs 4.3 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.
Compressors
-----------
New compression options and compressors are now supported.
The new options and compressors are:
1. gzip
-Xcompression-level <compression-level>
<compression-level> should be 1 .. 9 (default 9)
-Xwindow-size <window-size>
<window-size> should be 8 .. 15 (default 15)
-Xstrategy strategy1,strategy2,...,strategyN
Compress using strategy1,strategy2,...,strategyN in turn
and choose the best compression.
Available strategies: default, filtered, huffman_only,
run_length_encoded and fixed
2. lzo
-Xalgorithm <algorithm>
Where <algorithm> is one of:
lzo1x_1
lzo1x_1_11
lzo1x_1_12
lzo1x_1_15
lzo1x_999 (default)
-Xcompression-level <compression-level>
<compression-level> should be 1 .. 9 (default 8)
Only applies to lzo1x_999 algorithm
3. lz4
-Xhc
Compress using LZ4 High Compression
The compression specific options are, obviously, specific to the compressor
in question, and you should read the compressor documentation and check
their web sites to understand their behaviour.
In general the defaults used by Mksquashfs for each compressor are optimised
to give the best performance for each compressor, where what constitutes
best depends on the compressor. For gzip/xz best means highest compression
(trying multiple filters/strategies can improve compression, but this is
extremely expensive computationally, and hence, not suitable for the defaults),
for LZO/LZ4 best means a tradeoff between compression and (de)-compression
overhead (LZO/LZ4 by definition are intended for weaker processors).
New Mksquashfs options
----------------------
1. -mem <size>
Set the amount of memory used by Mksquashfs to <size> bytes. G/M and K
post-fixes are supported.
By default Mksquashfs uses 25% of the physical memory. Increasing
this with the -mem option can increase performance (note it does not have
any effect on compression). Reducing it can prevent thrashing if the
system is busy and there is not 25% of physical memory free (again, note
it does not have any effect on compression).
2. -exit-on-error
By default Mksquashfs treats certain errors as benign, if these
errors occur Mksquashfs prints the error on the console but continues.
These errors are typically failure to read a file from the source filesystem.
This is deliberate, in many cases users prefer Mksquashfs to flag
the error but continue rather than abort what may be hours of compression.
But there are times where failure to read any file is considered critical,
and users (especially in the case of automated scripts where the
errors output to the console may be missed) prefer Mksquashfs to exit.
The new -exit-on-error option can be used in this scenario. This option
makes Mksquashfs treat all benign errors as fatal.
3. -progress
By default if -info is specified, the progress bar is disabled as it gets
in the way. Occasionally you might want the progress bar enabled whilst
-info is enabled. This option forces Mksquashfs to output the progress
bar when -info is specified.
4. -Xhelp
Display the usage text for the currently selected compressor.
New Unsquashfs options
----------------------
1. -u[ser-xattrs]
Only write user xattrs. This forces Unsquashfs to ignore system xattrs.
This is useful when Unsquashing a filesystem as a non-root user, and the
filesystem contains system xattrs which are only writable by root.
Major bugs fixed
----------------
1. If Mksquashfs ran out of space in the destination filesystem, this
would not cause Mksquashfs to immediately abort, and Mksquashfs would
continue to process the source filesystem. Mksquashfs now immediately
aborts on out of space in the destination filesystem.
2. Unsquashfs ignored the maximum number of open files limit, and if that
was lower than the default limit for Linux, it would run out of file
descriptors. Unsquashfs now limits the number of open files to the
limit currently in force (e.g. specified by setrlimit).
3. If huge numbers of dynamic pseudo files were specified, Mksquashfs
could exceed the maximum number of open files limit. This was because
Mksquashfs created all the dynamic file processes up front before
commencing source filesystem reading and compression. Mksquashfs
now creates the dynamic file processes on demand whilst reading
and compressing the source filesystem, thus limiting the number of
dynamic pseudo file processes in existence at any one time.
4. When outputting Unsquashfs used to set the permissions of directories
as it recursively descended. This in hindsight had an obvious oversight,
if a directory had only read permission (or was otherwise restricted), then
Unsquashfs would fail to write its contents when descending into it. Fixed
by setting directory permissions as Unsquashfs recursively unwinds.

View File

@@ -0,0 +1,74 @@
# Pseudo file example
# 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 file examples
# Run mkquashfs . /tmp/img -pf pseudo-file.examples
# to see their effect
# Creating dynamic file examples
# Create a file "dmesg" containing the output from dmesg.
dmesg f 444 root root dmesg
# Create 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.
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 "release x.x"; \
echo "-dev #"$ver `date` "Build host" `hostname`
# Copy 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, this allows input from these special
# files to be captured and placed in the Squashfs filesystem.
input f 444 root root dd if=/dev/sda1 bs=1024 count=10
# Creating a block or character device examples
# Create a character device "chr_dev" with major:minor 100:1 and
# a block device "blk_dev" with major:minor 200:200, both with root
# uid/gid and a mode of rw-rw-rw.
chr_dev c 666 root root 100 1
blk_dev b 666 0 0 200 200
# Creating a directory example
# create a directory "pseudo_dir" with root uid/gid and mode of r--r--r--.
pseudo_dir d 444 root root
# Modifying attributes of an existing file exmaple
# Change the attributes of the file "INSTALL" in the filesystem to have
# root uid/gid and a mode of rw-rw-rw, overriding the attributes obtained
# from the source filesystem.
INSTALL m 666 root root