Home | History | Annotate | Download | only in RELEASE-READMEs
      1 NOTE:  This the original README for version 2.0.  It is retained as it
      2 contains information about the fragment design.  A description of the new 2.0
      3 mksquashfs options has been added to the main README file, and that
      4 file should now be consulted for these.
      5 
      6 	SQUASHFS 2.0 - A squashed read-only filesystem for Linux
      7 
      8 	Copyright 2004 Phillip Lougher (plougher (a] users.sourceforge.net)
      9 
     10 	Released under the GPL licence (version 2 or later).
     11 
     12 Welcome to the final release of Squashfs version 2.0!  A lot of changes to the
     13 filesystem have been made under the bonnet (hood).  Squashfs 2.0 uses fragment
     14 blocks and larger blocks (64K) to improve compression ratio by about 5 - 20%
     15 over Squashfs 1.0 depending on the files being compressed.  Using fragment
     16 blocks allows Squashfs 2.0 to achieve better compression than cloop and similar
     17 compression to tgz files while retaining the I/O efficiency of a compressed
     18 filesystem.
     19 
     20 Detailed changes:
     21 
     22 1. Squashfs 2.0 has added the concept of fragment blocks (see later discussion).
     23    Files smaller than the file block size (64K in Squashfs 2.0) and optionally
     24    the remainder of files that do not fit fully into a block (i.e. the last 32K
     25    in a 96K file) are packed into shared fragments and compressed together.
     26    This achieves on average 5 - 20% better compression than Squashfs 1.x.
     27 
     28 2. The maximum block size has been increased to 64K.
     29 
     30 3. The maximum number of UIDs has been increased to 256 (from 48 in 1.x).
     31 
     32 4. The maximum number of GIDs has been increased to 256 (from 15 in 1.x).
     33 
     34 5. New mksquashfs -all-root, -root-owned, -force-uid, and -force-gid
     35    options.  These allow the uids/gids of files in the generated
     36    filesystem to be specified, overriding the uids/gids in the
     37    source filesystem.
     38 
     39 6. Initrds are now supported for kernels 2.6.x.
     40 
     41 7. Removal of sleep_on() function call in 2.6.x patch, to allow Squashfs
     42    to work on the Fedora rc2 kernel.
     43 
     44 8. AMD64, check-data and gid bug fixes.
     45 
     46 9. Numerous small bug fixes have been made.
     47 
     48 10. New patch for Linux 2.6.7.
     49 
     50 
     51 New Squashfs 2.0 options
     52 ------------------------
     53 
     54 -noF or -noFragmentCompression
     55 
     56 	Do not compress the fragments.  Added for compatibility with noI and
     57 	noD, probably not that useful.
     58 
     59 -no-fragments
     60 
     61 	Do not use fragment blocks, and rather generate a filesystem
     62 	similar to a Squashfs 1.x filesystem.  It will of course still
     63 	be a Squashfs 2.0 filesystem but without fragments, and so
     64 	it won't be mountable on a Squashfs 1.x system.
     65 
     66 -always-use-fragments
     67 
     68 	By default only small files less than the block size are packed into
     69 	fragment blocks.  The ends of files which do not fit fully into a block,
     70 	are NOT by default packed into fragments.  To illustrate this, a
     71 	100K file has an initial 64K block and a 36K remainder.  This
     72 	36K remainder is not packed into a fragment by default.  This is
     73 	because to do so leads to a 10 - 20% drop in sequential I/O
     74 	performance, as a disk head seek is needed to seek to the initial
     75 	file data and another disk seek is need to seek to the fragment
     76 	block.
     77 
     78 	Specify this option if you want file remainders to be packed into
     79 	fragment blocks.  Doing so may increase the compression obtained
     80 	BUT at the expense of I/O speed.
     81 
     82 -no-duplicates
     83 
     84 	Do not detect duplicate files.
     85 
     86 -all-root
     87 -root-owned
     88 
     89 	These options (both do exactly the same thing), force all file
     90 	uids/gids in the generated Squashfs filesystem to be root.
     91 	This allows root owned filesystems to be built without root access
     92 	on the host machine.
     93 
     94 -force-uid uid
     95 
     96 	This option forces all files in the generated Squashfs filesystem to
     97 	be owned by the specified uid.  The uid can be specified either by
     98 	name (i.e. "root") or by number.
     99 
    100 -force-gid gid
    101 
    102 	This option forces all files in the generated Squashfs filesystem to
    103 	be group owned by the specified gid.  The gid can be specified either by
    104 	name (i.e. "root") or by number.
    105 
    106 
    107 Compression improvements example
    108 --------------------------------
    109 
    110 The following is the compression results obtained compressing the 2.6.6
    111 linux kernel source using CRAMFS, Cloop (with iso filesystem), Squashfs 1.3 and
    112 Squashfs 2.0 (results generated using big-endian filesystems).
    113 
    114 In decreasing order of size:
    115 
    116 	CRAMFS		62791680 bytes (59.9M)
    117 	Squashfs 1.x	51351552 bytes (48.9M)
    118 	Cloop		46118681 bytes (44.0M)
    119 	Squashfs 2.0	45604854 bytes (43.5M)
    120 
    121 
    122 The Squashfs 1.x filesystem is 12.6% larger than the new 2.0 filesystem.
    123 The cloop filesystem is 1.1% larger than the Squashfs 2.0 filesystem.
    124 
    125 
    126 Fragment blocks in Squashfs 2.0
    127 -------------------------------
    128 
    129 Squashfs like all other compressed filesystems compresses files individually
    130 on a block by block basis.  This is performed to allow mounting and
    131 de-compression of files on a block by block basis without requiring the entire
    132 filesystem to be decompressed.  This is in contrast to data-based compression
    133 schemes which compress without understanding the underlying filesystem (i.e.
    134 cloop and tgz files) and which, therefore, do not compress files individually.
    135 Each approach has advantages and disadvantages, data-based systems have better
    136 compression because compression is always performed at the maximum block size
    137 (64K in cloop) irrespective of the size of each file (which could be less than
    138 the block size).  Compressed filesystems tend to be faster at I/O because
    139 they understand the filesystem and therefore employ better caching stategies
    140 and read less un-needed data from the filesystem.
    141 
    142 Fragment blocks in Squashfs 2.0 solves this problem by packing files (and
    143 optionally the ends of files) which are smaller than the block size into
    144 shared blocks, which are compressed together.  For example five files each of
    145 10K will be packed into one shared fragment of 50K and compressed together,
    146 rather than being compressed in five 10K blocks.
    147 
    148 This scheme produces a hybrid filesystem, retaining the I/O efficiency
    149 of a compressed filesystem, while obtaining the compression efficiency
    150 of data-based schemes by compressing small files together.
    151 
    152 
    153 Squashfs 1.x and Squashfs 2.0 compatibility
    154 -------------------------------------------
    155 
    156 Appending to Squashfs 1.x filesystems is not supported.  If you wish to append
    157 to 1.x filesystems, then either use the original mksquashfs, or convert them
    158 to Squashfs 2.0 by mounting the filesystem and running the 2.0 mksquashfs
    159 on the mounted filesystem.
    160 
    161 Mounting Squashfs 1.x filesystems IS supported by the 2.0 kernel patch.
    162