	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.
