mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-12-29 00:23:24 -05:00
162 lines
6.3 KiB
Plaintext
162 lines
6.3 KiB
Plaintext
|
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.
|