1MKSQUASHFS(1) User Commands MKSQUASHFS(1)
2
3
4
6 mksquashfs - tool to create and append to squashfs filesystems
7
9 mksquashfs source1 source2 ... FILESYSTEM [OPTIONS] [-e list of ex‐
10 clude dirs/files]
11
13 Squashfs is a highly compressed read-only filesystem for Linux. It
14 uses either gzip/xz/lzo/lz4/zstd compression to compress both files,
15 inodes and directories. Inodes in the system are very small and all
16 blocks are packed to minimise data overhead. Block sizes greater than
17 4K are supported up to a maximum of 1Mbytes (default block size 128K).
18
19 Squashfs is intended for general read-only filesystem use, for archival
20 use (i.e. in cases where a .tar.gz file may be used), and in con‐
21 strained block device/memory systems (e.g. embedded systems) where low
22 overhead is needed.
23
25 Filesystem build options:
26 -tar read uncompressed tar file from standard in (stdin).
27
28 -no-strip
29 act like tar, and do not strip leading directories from source
30 files.
31
32 -tarstyle
33 alternative name for -no-strip.
34
35 -cpiostyle
36 act like cpio, and read files from standard in (stdin).
37
38 -cpiostyle0
39 like -cpiostyle, but filenames are null terminated.
40
41 -comp COMP
42 select COMP compression. Compressors available: gzip (default),
43 lzo, lz4, xz, zstd, lzma.
44
45 -b BLOCK_SIZE
46 set data block to BLOCK_SIZE. Default 128 Kbytes. Optionally a
47 suffix of K or M can be given to specify Kbytes or Mbytes re‐
48 spectively.
49
50 -reproducible
51 build filesystems that are reproducible (default).
52
53 -not-reproducible
54 build filesystems that are not reproducible.
55
56 -mkfs-time TIME
57 set filesystem creation timestamp to TIME, which is an unsigned
58 32-bit int indicating seconds since the epoch (1970-01-01).
59
60 -fstime TIME
61 synonym for mkfs-time.
62
63 -all-time TIME
64 set all file timestamps to TIME, which is an unsigned 32-bit int
65 indicating seconds since the epoch (1970-01-01).
66
67 -no-exports
68 don't make filesystem exportable via NFS (-tar default).
69
70 -exports
71 make filesystem exportable via NFS (default).
72
73 -no-sparse
74 don't detect sparse files.
75
76 -no-xattrs
77 don't store extended attributes.
78
79 -xattrs
80 store extended attributes (default).
81
82 -noI do not compress inode table.
83
84 -noId do not compress the uid/gid table (implied by -noI).
85
86 -noD do not compress data blocks.
87
88 -noF do not compress fragment blocks.
89
90 -noX do not compress extended attributes.
91
92 -no-tailends
93 don't pack tail ends into fragments (default).
94
95 -tailends
96 pack tail ends into fragments.
97
98 -no-fragments
99 do not use fragments.
100
101 -always-use-fragments
102 use fragment blocks for files larger than block size.
103
104 -no-duplicates
105 do not perform duplicate checking.
106
107 -no-hardlinks
108 do not hardlink files, instead store duplicates.
109
110 -all-root
111 make all files owned by root.
112
113 -root-time TIME
114 set root directory time to TIME.
115
116 -root-mode MODE
117 set root directory permissions to octal MODE.
118
119 -root-uid UID
120 set root directory owner to UID.
121
122 -root-gid GID
123 set root directory group to GID.
124
125 -force-uid UID
126 set all file uids to UID.
127
128 -force-gid GID
129 set all file gids to GID.
130
131 -keep-as-directory
132 if one source directory is specified, create a root directory
133 containing that directory, rather than the contents of the di‐
134 rectory.
135
136 -action ACTION@EXPRESSION
137 evaluate EXPRESSION on every file, and execute ACTION if it re‐
138 turns TRUE.
139
140 -log-action ACTION@EXPRESSION
141 as above, but log expression evaluation results and actions per‐
142 formed.
143
144 -true-action ACTION@EXPRESSION
145 as above, but only log expressions which return TRUE.
146
147 -false-action ACTION@EXPRESSION
148 as above, but only log expressions which return FALSE.
149
150 -action-file FILE
151 as action, but read actions from FILE.
152
153 -log-action-file FILE
154 as -log-action, but read actions from FILE.
155
156 -true-action-file FILE
157 as -true-action, but read actions from FILE.
158
159 -false-action-file FILE
160 as -false-action, but read actions from FILE.
161
162 Filesystem filter options:
163 -p PSEUDO-DEFINITION
164 Add pseudo file definition. The definition should be quoted.
165
166 -pf PSEUDO-FILE
167 Add list of pseudo file definitions. Pseudo file definitions in
168 pseudo-files should not be quoted.
169
170 -sort SORT_FILE
171 sort files according to priorities in SORT_FILE. One file or
172 dir with priority per line. Priority -32768 to 32767, default
173 priority 0.
174
175 -ef EXCLUDE_FILE
176 list of exclude dirs/files. One per line.
177
178 -wildcards
179 Allow extended shell wildcards (globbing) to be used in exclude
180 dirs/files.
181
182 -regex Allow POSIX regular expressions to be used in exclude
183 dirs/files.
184
185 -one-file-system
186 Do not cross filesystem boundaries when scanning sources.
187
188 Filesystem append options:
189 -noappend
190 do not append to existing filesystem.
191
192 -root-becomes NAME
193 when appending source files/directories, make the original root
194 become a subdirectory in the new root called NAME, rather than
195 adding the new source items to the original root.
196
197 Mksquashfs runtime options:
198 -version
199 print version, licence and copyright message.
200
201 -exit-on-error
202 treat normally ignored errors as fatal.
203
204 -recover NAME
205 recover filesystem data using recovery file NAME.
206
207 -no-recovery
208 don't generate a recovery file.
209
210 -recovery-path NAME
211 use NAME as the directory to store the recovery file.
212
213 -quiet no verbose output.
214
215 -info print files written to filesystem.
216
217 -no-progress
218 don't display the progress bar.
219
220 -progress
221 display progress bar when using the -info option.
222
223 -throttle PERCENTAGE
224 throttle the I/O input rate by the given percentage. This can be
225 used to reduce the I/O and CPU consumption of Mksquashfs.
226
227 -limit PERCENTAGE
228 limit the I/O input rate to the given percentage. This can be
229 used to reduce the I/O and CPU consumption of Mksquashfs (alter‐
230 native to -throttle).
231
232 -processors NUMBER
233 Use NUMBER processors. By default will use number of processors
234 available.
235
236 -mem SIZE
237 Use SIZE physical memory. Optionally a suffix of K, M or G can
238 be given to specify Kbytes, Mbytes or Gbytes respectively.
239
240 Expert options (these may make the filesystem unmountable):
241 -nopad do not pad filesystem to a multiple of 4K.
242
243 -offset OFFSET
244 Skip OFFSET bytes at the beginning of FILESYSTEM. Optionally a
245 suffix of K, M or G can be given to specify Kbytes, Mbytes or
246 Gbytes respectively. Default 0 bytes.
247
248 -o OFFSET
249 synonym for -offset.
250
251 Miscellaneous options:
252 -root-owned
253 alternative name for -all-root.
254
255 -noInodeCompression
256 alternative name for -noI.
257
258 -noIdTableCompression
259 alternative name for -noId.
260
261 -noDataCompression
262 alternative name for -noD.
263
264 -noFragmentCompression
265 alternative name for -noF.
266
267 -noXattrCompression
268 alternative name for -noX.
269
270 -help output this options text to stdout.
271
272 -h output this options text to stdout.
273
274 -Xhelp print compressor options for selected compressor.
275
277 -p "filename d mode uid gid"
278 create a directory.
279
280 -p "filename m mode uid gid"
281 modify filename.
282
283 -p "filename b mode uid gid major minor"
284 create a block device.
285
286 -p "filename c mode uid gid major minor"
287 create a character device.
288
289 -p "filename f mode uid gid command"
290 create file from stdout of command.
291
292 -p "filename s mode uid gid symlink"
293 create a symbolic link.
294
295 -p "filename i mode uid gid [s|f]"
296 create a socket (s) or FIFO (f).
297
298 -p "filename l linkname"
299 create a hard-link to linkname.
300
301 -p "filename L pseudo_filename"
302 same, but link to pseudo file.
303
304 -p "filename D time mode uid gid"
305 create a directory with timestamp time.
306
307 -p "filename M time mode uid gid"
308 modify a file with timestamp time.
309
310 -p "filename B time mode uid gid major minor"
311 create block device with timestamp time.
312
313 -p "filename C time mode uid gid major minor"
314 create char device with timestamp time.
315
316 -p "filename F time mode uid gid command"
317 create file with timestamp time.
318
319 -p "filename S time mode uid gid symlink"
320 create symlink with timestamp time.
321
322 -p "filename I time mode uid gid [s|f]"
323 create socket/fifo with timestamp time.
324
326 gzip (default):
327 -Xcompression-level COMPRESSION-LEVEL
328 COMPRESSION-LEVEL should be 1 .. 9 (default 9).
329
330 -Xwindow-size WINDOW-SIZE
331 WINDOW-SIZE should be 8 .. 15 (default 15).
332
333 -Xstrategy strategy1,strategy2,...,strategyN
334 Compress using strategy1,strategy2,...,strategyN in turn and
335 choose the best compression. Available strategies: default, fil‐
336 tered, huffman_only, run_length_encoded and fixed.
337
338 lzo:
339 -Xalgorithm ALGORITHM
340 Where ALGORITHM is one of: lzo1x_1, lzo1x_1_11, lzo1x_1_12,
341 lzo1x_1_15, lzo1x_999 (default).
342
343 -Xcompression-level COMPRESSION-LEVEL
344 COMPRESSION-LEVEL should be 1 .. 9 (default 8) Only applies to
345 lzo1x_999 algorithm.
346
347 lz4:
348 -Xhc Compress using LZ4 High Compression.
349
350 xz:
351 -Xbcj filter1,filter2,...,filterN
352 Compress using filter1,filter2,...,filterN in turn (in addition
353 to no filter), and choose the best compression. Available fil‐
354 ters: x86, arm, armthumb, powerpc, sparc, ia64.
355
356 -Xdict-size DICT-SIZE
357 Use DICT-SIZE as the XZ dictionary size. The dictionary size
358 can be specified as a percentage of the block size, or as an ab‐
359 solute value. The dictionary size must be less than or equal to
360 the block size and 8192 bytes or larger. It must also be
361 storable in the xz header as either 2^n or as 2^n+2^(n+1). Exam‐
362 ple dict-sizes are 75%, 50%, 37.5%, 25%, or 32K, 16K, 8K etc.
363
364 zstd:
365 -Xcompression-level COMPRESSION-LEVEL
366 COMPRESSION-LEVEL should be 1 .. 22 (default 15).
367
368 lzma:
369 (no options) (deprecated - no kernel support)
370
372 SOURCE_DATE_EPOCH
373 If set, this is used as the filesystem creation timestamp. Also
374 any file timestamps which are after SOURCE_DATE_EPOCH will be
375 clamped to SOURCE_DATE_EPOCH. See https://repro‐
376 ducible-builds.org/docs/source-date-epoch/ for more information.
377
379 mksquashfs DIRECTORY IMAGE.SQFS
380 Create a Squashfs filesystem from the contents of DIRECTORY,
381 writing the output to IMAGE.SQSH. Mksquashfs will use the de‐
382 fault compressor (normally gzip), and block size of 128 Kbytes.
383
384 mksquashfs DIRECTORY FILE1 FILE2 IMAGE.SQFS
385 Create a Squashfs filesystem containing DIRECTORY and FILE1 and
386 FILE2. If multiple sources are specified on the command line
387 they will be combined into a single directory.
388
389 mksquashfs DIRECTORY IMAGE.SQFS -b 1M -comp zstd
390 Use a block size of 1 Mbyte and Zstandard compression to create
391 the filesystem.
392
393 mksquashfs DIRECTORY IMAGE.SQFS -e file1 file2
394 Exclude file1 and file2 from DIRECTORY when creating filesystem.
395 No wildcard matching of files.
396
397 mksquashfs DIRECTORY IMAGE.SQFS -wildcards -e "*.gz"
398 Exclude anything in DIRECTORY which matches the wildcard pattern
399 "*.gz".
400
401 mksquashfs DIRECTORY IMAGE.SQFS -wildcards -e "... *.gz"
402 Exclude files which match the wildcard pattern "*.gz" anywhere
403 within DIRECTORY and its sub-directories. The initial "..." in‐
404 dicates the wildcard pattern is "non-anchored" and will match
405 anywhere.
406
407 Note: when passing wildcarded names to Mksquashfs, they should be
408 quoted (as in the above examples), to ensure that they are not pro‐
409 cessed by the shell.
410
411
412 Using pseudo file definitions
413 mksquashfs DIRECTORY IMAGE.SQFS -p "build_dir d 0644 0 0"
414 Create a directory called "build_dir" in the output filesystem.
415
416 mksquashfs DIRECTORY IMAGE.SQFS -p "version.txt l /tmp/build/version"
417 Create a reference called "version.txt" to a file outside DIREC‐
418 TORY, which acts as if the file "/tmp/build/version" was copied
419 or hard-linked into DIRECTORY before calling Mksquashfs.
420
421 mksquashfs DIRECTORY IMAGE.SQFS -p "date.txt f 0644 0 0 date"
422 Create a file called "date.txt" which holds the output (stdout)
423 from running the "date" command.
424
425 mksquashfs DIRECTORY IMAGE.SQFS -p "\"hello world\" f 0644 0 0 date"
426 As above, but, showing that filenames can have spaces, if they
427 are quoted. The quotes need to be blackslashed to protect them
428 from the shell.
429
430 mksquashfs - IMAGE.SQFS -p "input f 0644 root root dd if=/dev/sda1
431 bs=1024" -p "/ d 0644 0 0"
432 Create a file containing the contents of partition /dev/sda1".
433 Ordinarily Mksquashfs given a device, fifo, or named socket will
434 place that special file within the Squashfs filesystem, the
435 above allows input from these special files to be captured and
436 placed in the Squashfs filesystem. Note there are no other
437 sources than the pseudo file, and so the command line source is
438 "-". If there are no other sources than pseudo files, the root
439 (/) directory must be defined too, as seen in this example.
440
441 Note: pseudo file definitions should be quoted (as in the above exam‐
442 ples), to ensure that they are passed to Mksquashfs as a single argu‐
443 ment, and to ensure that they are not processed by the shell.
444
445 Using Actions to not compress, change attributes etc.
446 mksquashfs DIRECTORY IMAGE.SQSH -action "uncompressed @ (name(*.jpg) ||
447 name(*.mpg) ) || (name(*.img) && filesize(+1G))"
448 Specify that any files matching the wildcards "*.jpg" and
449 "*.mpg" should not be compressed. Additionally, it also speci‐
450 fies any files matching the wildcard "*.img" and are larger than
451 1 Gigabyte should be uncompressed too. This shows test opera‐
452 tors can be combined with logical expressions.
453
454 mksquashfs DIRECTORY IMAGE.SQSH -action "chmod(o+r)@! perm(o+r)"
455 If any files within DIRECTORY are not readable by "others", then
456 make them readable by others in the Squashfs filesystem.
457
458 mksquashfs DIRECTORY IMAGE.SQSH -action "uid(phillip)@! perm(o+r)"
459 As previous, match on any files which are not readable by "oth‐
460 ers", but, in this case change the owner of the file to
461 "phillip" in the Squashfs filesystem.
462
463 mksquashfs DIRECTORY IMAGE.SQSH -action "prune @ type(l) && ! exists"
464 Delete any symbolic link within DIRECTORY which points outside
465 of DIRECTORY, i.e. will be unresolvable in the Squashfs filesys‐
466 tem.
467
468 mksquashfs DIRECTORY IMAGE.SQSH -action "exclude @ depth(3)"
469 Create a Squashfs filesystem containing the two top most levels
470 (contents of DIRECTORY and immediate sub-directories), and ex‐
471 clude anything at level 3 or below.
472
473 Note: actions should be quoted (as in the above examples), to ensure
474 that they are passed to Mksquashfs as a single argument, and to ensure
475 that they are not processed by the shell.
476
478 Written by Phillip Lougher <phillip@squashfs.org.uk>
479
481 Copyright © 2022 Phillip Lougher <phillip@squashfs.org.uk>
482
483 This program is free software; you can redistribute it and/or modify it
484 under the terms of the GNU General Public License as published by the
485 Free Software Foundation; either version 2, or (at your option) any
486 later version.
487
488 This program is distributed in the hope that it will be useful, but
489 WITHOUT ANY WARRANTY; without even the implied warranty of MER‐
490 CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
491 Public License for more details.
492
494 unsquashfs(1), sqfstar(1), sqfscat(1)
495
496 The README for the Squash-tools 4.5.1 release, describing the new fea‐
497 tures can be read here
498 https://github.com/plougher/squashfs-tools/blob/master/README-4.5.1
499
500 The Squashfs-tools USAGE guide can be read here
501 https://github.com/plougher/squashfs-tools/blob/master/USAGE
502
503 The ACTIONS-README file describing how to use the new actions feature
504 can be read here https://github.com/plougher/squashfs-tools/blob/mas‐
505 ter/ACTIONS-README
506
507
508
509mksquashfs version 4.5.1 January 2023 MKSQUASHFS(1)