1	SQUASHFS 4.3 - A squashed read-only filesystem for Linux
2
3	Copyright 2002-2014 Phillip Lougher <phillip@lougher.demon.co.uk>
4
5	Released under the GPL licence (version 2 or later).
6
7Welcome to Squashfs 4.3.  This is the first release in over 3 years, and
8there are substantial improvements to stability, new compression options
9and compressors, speed optimisations, and new options for Mksquashfs/Unsquashfs.
10
11This is a tools only release, support for Squashfs filesystems is
12in mainline (2.6.29 and later).
13
14Changes in Squashfs-tools 4.3
15-----------------------------
16
171. Stability improvements.  Better checking of user input for out of
18   range/invalid values.  Better handling of corrupted Squashfs filesystems
19   (Mksquashfs append mode, and Unsquashfs).  Better handling of buffer
20   overflow/underflow.
21
222. GZIP compressor now supports compression options, allowing different
23   compression levels to be used.
24
253. Rewritten LZO compressor with compression options, allowing different
26   LZO algorithms and different compression levels to be used.
27
284. New LZ4 compressor (note not yet in mainline kernel)
29
305. Better default memory usage for Mksquashfs.  Mksquashfs by default now
31   uses 25% of physical memory.
32
336. Duplicate checking in Mksquashfs further optimised.  With certain
34   "problem filesystems" greater than 2x performance improvement.
35   Filesystems with a lot of duplicates should see at least 10-20% speed
36   improvement.
37
387. The -stat option in Unsquashfs now displays the compression options
39   used to generate the original filesystem.  Previously -stat only displayed
40   the compression algorithm used.
41
428. The file being compressed/uncompressed in Mksquashfs/Unsquashfs is now
43   displayed if CTRL-\ (SIGQUIT from keyboard) typed.
44
459. The status of the internal queues/caches in Mksquashfs/Unsquashfs is
46   now displayed if CTRL-\ (SIGQUIT from keyboard) is typed twice within
47   one second.  Normally only useful for "power users", but it can be
48   used to discover if there's any bottlenecks affecting performance
49   (the bottleneck will normally be the compressors/fragment compressors).
50
5110. Miscellaneous new options for Mksquashfs/Unsquashfs to fine tune behaviour.
52
5311. Fixes for CVE-2012-4024 and CVE-2012-4025.
54
55Compatiblity
56------------
57
58Mksquashfs 4.3 generates 4.0 filesystems.  These filesystems are fully
59compatible/interchangable with filesystems generated by Mksquashfs 4.0 and are
60mountable on 2.6.29 and later kernels.
61
62Compressors
63-----------
64
65New compression options and compressors are now supported.
66
67The new options and compressors are:
68
691. gzip
70	  -Xcompression-level <compression-level>
71		<compression-level> should be 1 .. 9 (default 9)
72	  -Xwindow-size <window-size>
73		<window-size> should be 8 .. 15 (default 15)
74	  -Xstrategy strategy1,strategy2,...,strategyN
75		Compress using strategy1,strategy2,...,strategyN in turn
76		and choose the best compression.
77		Available strategies: default, filtered, huffman_only,
78		run_length_encoded and fixed
79
802. lzo
81	  -Xalgorithm <algorithm>
82		Where <algorithm> is one of:
83			lzo1x_1
84			lzo1x_1_11
85			lzo1x_1_12
86			lzo1x_1_15
87			lzo1x_999 (default)
88	  -Xcompression-level <compression-level>
89		<compression-level> should be 1 .. 9 (default 8)
90		Only applies to lzo1x_999 algorithm
91
923. lz4
93	  -Xhc
94		Compress using LZ4 High Compression
95
96The compression specific options are, obviously, specific to the compressor
97in question, and you should read the compressor documentation and check
98their web sites to understand their behaviour.
99
100In general the defaults used by Mksquashfs for each compressor are optimised
101to give the best performance for each compressor, where what constitutes
102best depends on the compressor.  For gzip/xz best means highest compression
103(trying multiple filters/strategies can improve compression, but this is
104extremely expensive computationally, and hence, not suitable for the defaults),
105for LZO/LZ4 best means a tradeoff between compression and (de)-compression
106overhead (LZO/LZ4 by definition are intended for weaker processors).
107
108New Mksquashfs options
109----------------------
110
1111. -mem <size>
112
113  Set the amount of memory used by Mksquashfs to <size> bytes.  G/M and K
114  post-fixes are supported.
115
116  By default Mksquashfs uses 25% of the physical memory.  Increasing
117  this with the -mem option can increase performance (note it does not have
118  any effect on compression).  Reducing it can prevent thrashing if the
119  system is busy and there is not 25% of physical memory free (again, note
120  it does not have any effect on compression).
121
1222. -exit-on-error
123
124  By default Mksquashfs treats certain errors as benign, if these
125  errors occur Mksquashfs prints the error on the console but continues.
126  These errors are typically failure to read a file from the source filesystem.
127  This is deliberate, in many cases users prefer Mksquashfs to flag
128  the error but continue rather than abort what may be hours of compression.
129
130  But there are times where failure to read any file is considered critical,
131  and users (especially in the case of automated scripts where the
132  errors output to the console may be missed) prefer Mksquashfs to exit.
133
134  The new -exit-on-error option can be used in this scenario.  This option
135  makes Mksquashfs treat all benign errors as fatal.
136
1373. -progress
138
139  By default if -info is specified, the progress bar is disabled as it gets
140  in the way.  Occasionally you might want the progress bar enabled whilst
141  -info is enabled.  This option forces Mksquashfs to output the progress
142  bar when -info is specified.
143
1444. -Xhelp
145
146  Display the usage text for the currently selected compressor.
147
148New Unsquashfs options
149----------------------
150
1511. -u[ser-xattrs]
152
153  Only write user xattrs.  This forces Unsquashfs to ignore system xattrs.
154  This is useful when Unsquashing a filesystem as a non-root user, and the
155  filesystem contains system xattrs which are only writable by root.
156
157Major bugs fixed
158----------------
159
1601. If Mksquashfs ran out of space in the destination filesystem, this
161   would not cause Mksquashfs to immediately abort, and Mksquashfs would
162   continue to process the source filesystem.  Mksquashfs now immediately
163   aborts on out of space in the destination filesystem.
164
1652. Unsquashfs ignored the maximum number of open files limit, and if that
166   was lower than the default limit for Linux, it would run out of file
167   descriptors.  Unsquashfs now limits the number of open files to the
168   limit currently in force (e.g. specified by setrlimit).
169
1703. If huge numbers of dynamic pseudo files were specified, Mksquashfs
171   could exceed the maximum number of open files limit.  This was because
172   Mksquashfs created all the dynamic file processes up front before
173   commencing source filesystem reading and compression.  Mksquashfs
174   now creates the dynamic file processes on demand whilst reading
175   and compressing the source filesystem, thus limiting the number of
176   dynamic pseudo file processes in existence at any one time.
177
1784. When outputting Unsquashfs used to set the permissions of directories
179   as it recursively descended.  This in hindsight had an obvious oversight,
180   if a directory had only read permission (or was otherwise restricted), then
181   Unsquashfs would fail to write its contents when descending into it.  Fixed
182   by setting directory permissions as Unsquashfs recursively unwinds.
183