1*79398b25SAndroid Build Coastguard Worker SQUASHFS 4.1 - A squashed read-only filesystem for Linux 2*79398b25SAndroid Build Coastguard Worker 3*79398b25SAndroid Build Coastguard Worker Copyright 2002-2010 Phillip Lougher <[email protected]> 4*79398b25SAndroid Build Coastguard Worker 5*79398b25SAndroid Build Coastguard Worker Released under the GPL licence (version 2 or later). 6*79398b25SAndroid Build Coastguard Worker 7*79398b25SAndroid Build Coastguard WorkerWelcome to Squashfs 4.1. This is a tools only release, support for Squashfs 8*79398b25SAndroid Build Coastguard Workerfile systems is in mainline (2.6.29 and later). 9*79398b25SAndroid Build Coastguard Worker 10*79398b25SAndroid Build Coastguard WorkerNew features in Squashfs-tools 4.1 11*79398b25SAndroid Build Coastguard Worker---------------------------------- 12*79398b25SAndroid Build Coastguard Worker 13*79398b25SAndroid Build Coastguard Worker 1. Support for extended attributes 14*79398b25SAndroid Build Coastguard Worker 2. Support for LZMA and LZO compression 15*79398b25SAndroid Build Coastguard Worker 3. New pseudo file features 16*79398b25SAndroid Build Coastguard Worker 17*79398b25SAndroid Build Coastguard WorkerCompatiblity 18*79398b25SAndroid Build Coastguard Worker------------ 19*79398b25SAndroid Build Coastguard Worker 20*79398b25SAndroid Build Coastguard WorkerMksquashfs 4.1 generates 4.0 filesystems. These filesystems are fully 21*79398b25SAndroid Build Coastguard Workercompatible/interchangable with filesystems generated by Mksquashfs 4.0 and are 22*79398b25SAndroid Build Coastguard Workermountable on 2.6.29 and later kernels. 23*79398b25SAndroid Build Coastguard Worker 24*79398b25SAndroid Build Coastguard WorkerExtended attributes (xattrs) 25*79398b25SAndroid Build Coastguard Worker---------------------------- 26*79398b25SAndroid Build Coastguard Worker 27*79398b25SAndroid Build Coastguard WorkerSquashfs file systems now have extended attribute support. The 28*79398b25SAndroid Build Coastguard Workerextended attribute implementation has the following features: 29*79398b25SAndroid Build Coastguard Worker 30*79398b25SAndroid Build Coastguard Worker1. Layout can store up to 2^48 bytes of compressed xattr data. 31*79398b25SAndroid Build Coastguard Worker2. Number of xattrs per inode unlimited. 32*79398b25SAndroid Build Coastguard Worker3. Total size of xattr data per inode 2^48 bytes of compressed data. 33*79398b25SAndroid Build Coastguard Worker4. Up to 4 Gbytes of data per xattr value. 34*79398b25SAndroid Build Coastguard Worker5. Inline and out-of-line xattr values supported for higher performance 35*79398b25SAndroid Build Coastguard Worker in xattr scanning (listxattr & getxattr), and to allow xattr value 36*79398b25SAndroid Build Coastguard Worker de-duplication. 37*79398b25SAndroid Build Coastguard Worker6. Both whole inode xattr duplicate detection and individual xattr value 38*79398b25SAndroid Build Coastguard Worker duplicate detection supported. These can obviously nest, file C's 39*79398b25SAndroid Build Coastguard Worker xattrs can be a complete duplicate of file B, and file B's xattrs 40*79398b25SAndroid Build Coastguard Worker can be a partial duplicate of file A. 41*79398b25SAndroid Build Coastguard Worker7. Xattr name prefix types stored, allowing the redundant "user.", "trusted." 42*79398b25SAndroid Build Coastguard Worker etc. characters to be eliminated and more concisely stored. 43*79398b25SAndroid Build Coastguard Worker8. Support for files, directories, symbolic links, device nodes, fifos 44*79398b25SAndroid Build Coastguard Worker and sockets. 45*79398b25SAndroid Build Coastguard Worker 46*79398b25SAndroid Build Coastguard WorkerExtended attribute support is in 2.6.35 and later kernels. File systems 47*79398b25SAndroid Build Coastguard Workerwith extended attributes can be mounted on 2.6.29 and later kernels, the 48*79398b25SAndroid Build Coastguard Workerextended attributes will be ignored with a warning. 49*79398b25SAndroid Build Coastguard Worker 50*79398b25SAndroid Build Coastguard WorkerLZMA and LZO compression 51*79398b25SAndroid Build Coastguard Worker------------------------ 52*79398b25SAndroid Build Coastguard Worker 53*79398b25SAndroid Build Coastguard WorkerSquashfs now supports LZMA and LZO compression. 54*79398b25SAndroid Build Coastguard Worker 55*79398b25SAndroid Build Coastguard WorkerLZO support is in 2.6.36 and newer kernels. LZMA is not yet in mainline. 56*79398b25SAndroid Build Coastguard Worker 57*79398b25SAndroid Build Coastguard WorkerNew Mksquashfs options 58*79398b25SAndroid Build Coastguard Worker---------------------- 59*79398b25SAndroid Build Coastguard Worker 60*79398b25SAndroid Build Coastguard Worker-comp <comp> 61*79398b25SAndroid Build Coastguard Worker 62*79398b25SAndroid Build Coastguard Worker Select <comp> compression. 63*79398b25SAndroid Build Coastguard Worker 64*79398b25SAndroid Build Coastguard Worker The compression algorithms supported by the build of Mksquashfs can be 65*79398b25SAndroid Build Coastguard Worker found by typing mksquashfs without any arguments. The compressors available 66*79398b25SAndroid Build Coastguard Worker are displayed at the end of the help message, e.g. 67*79398b25SAndroid Build Coastguard Worker 68*79398b25SAndroid Build Coastguard Worker Compressors available: 69*79398b25SAndroid Build Coastguard Worker gzip (default) 70*79398b25SAndroid Build Coastguard Worker lzma 71*79398b25SAndroid Build Coastguard Worker lzo 72*79398b25SAndroid Build Coastguard Worker 73*79398b25SAndroid Build Coastguard Worker The default compression used when -comp isn't specified on the command line 74*79398b25SAndroid Build Coastguard Worker is indicated by "(default)". 75*79398b25SAndroid Build Coastguard Worker 76*79398b25SAndroid Build Coastguard Worker-no-xattrs 77*79398b25SAndroid Build Coastguard Worker Don't store extended attributes 78*79398b25SAndroid Build Coastguard Worker 79*79398b25SAndroid Build Coastguard Worker-xattrs 80*79398b25SAndroid Build Coastguard Worker Store extended attributes 81*79398b25SAndroid Build Coastguard Worker 82*79398b25SAndroid Build Coastguard Worker The default behaviour of Mksquashfs with respect to extended attribute 83*79398b25SAndroid Build Coastguard Worker storage is build time selectable. The Mksquashfs help message indicates 84*79398b25SAndroid Build Coastguard Worker whether extended attributes are stored or not, e.g. 85*79398b25SAndroid Build Coastguard Worker 86*79398b25SAndroid Build Coastguard Worker -no-xattrs don't store extended attributes 87*79398b25SAndroid Build Coastguard Worker -xattrs store extended attributes (default) 88*79398b25SAndroid Build Coastguard Worker 89*79398b25SAndroid Build Coastguard Worker shows that extended attributes are stored by default, and can be disabled 90*79398b25SAndroid Build Coastguard Worker by the -no-xattrs option. 91*79398b25SAndroid Build Coastguard Worker 92*79398b25SAndroid Build Coastguard Worker -no-xattrs don't store extended attributes (default) 93*79398b25SAndroid Build Coastguard Worker -xattrs store extended attributes 94*79398b25SAndroid Build Coastguard Worker 95*79398b25SAndroid Build Coastguard Worker shows that extended attributes are not stored by default, storage can be 96*79398b25SAndroid Build Coastguard Worker enabled by the -xattrs option. 97*79398b25SAndroid Build Coastguard Worker 98*79398b25SAndroid Build Coastguard Worker 99*79398b25SAndroid Build Coastguard Worker-noX 100*79398b25SAndroid Build Coastguard Worker-noXattrCompression 101*79398b25SAndroid Build Coastguard Worker Don't compress extended attributes 102*79398b25SAndroid Build Coastguard Worker 103*79398b25SAndroid Build Coastguard Worker 104*79398b25SAndroid Build Coastguard WorkerNew Unsquashfs options 105*79398b25SAndroid Build Coastguard Worker---------------------- 106*79398b25SAndroid Build Coastguard Worker 107*79398b25SAndroid Build Coastguard Worker-n[o-xattrs] 108*79398b25SAndroid Build Coastguard Worker Don't extract xattrs in filesystem 109*79398b25SAndroid Build Coastguard Worker 110*79398b25SAndroid Build Coastguard Worker-x[attrs] 111*79398b25SAndroid Build Coastguard Worker Extract xattrs in filesystem 112*79398b25SAndroid Build Coastguard Worker 113*79398b25SAndroid Build Coastguard Worker The default behaviour of Unsquashfs with respect to extended attributes 114*79398b25SAndroid Build Coastguard Worker is build time selectable. The Unsquashfs help message indicates whether 115*79398b25SAndroid Build Coastguard Worker extended attributes are stored or not, e.g. 116*79398b25SAndroid Build Coastguard Worker 117*79398b25SAndroid Build Coastguard Worker -no[-xattrs] don't extract xattrs in file system 118*79398b25SAndroid Build Coastguard Worker -x[attrs] extract xattrs in file system (default) 119*79398b25SAndroid Build Coastguard Worker 120*79398b25SAndroid Build Coastguard Worker shows that xattrs are extracted by default. 121*79398b25SAndroid Build Coastguard Worker 122*79398b25SAndroid Build Coastguard Worker -no[-xattrs] don't extract xattrs in file system (default) 123*79398b25SAndroid Build Coastguard Worker -x[attrs] extract xattrs in file system 124*79398b25SAndroid Build Coastguard Worker 125*79398b25SAndroid Build Coastguard Worker shows that xattrs are not extracted by default. 126*79398b25SAndroid Build Coastguard Worker 127*79398b25SAndroid Build Coastguard Worker 128*79398b25SAndroid Build Coastguard WorkerNew pseudo file support 129*79398b25SAndroid Build Coastguard Worker----------------------- 130*79398b25SAndroid Build Coastguard Worker 131*79398b25SAndroid Build Coastguard WorkerMksquashfs supports pseudo files, these allow fake files, directories, character 132*79398b25SAndroid Build Coastguard Workerand block devices to be specified and added to the Squashfs filesystem being 133*79398b25SAndroid Build Coastguard Workerbuilt, rather than requiring them to be present in the source directories. 134*79398b25SAndroid Build Coastguard WorkerThis, for example, allows device nodes to be added to the filesystem without 135*79398b25SAndroid Build Coastguard Workerrequiring root access. 136*79398b25SAndroid Build Coastguard Worker 137*79398b25SAndroid Build Coastguard WorkerMksquashfs 4.1 adds support for "dynamic pseudo files" and a modify operation. 138*79398b25SAndroid Build Coastguard WorkerDynamic pseudo files allow files to be dynamically created when Mksquashfs 139*79398b25SAndroid Build Coastguard Workeris run, their contents being the result of running a command or piece of 140*79398b25SAndroid Build Coastguard Workershell script. The modifiy operation allows the mode/uid/gid of an existing 141*79398b25SAndroid Build Coastguard Workerfile in the source filesystem to be modified. 142*79398b25SAndroid Build Coastguard Worker 143*79398b25SAndroid Build Coastguard WorkerTwo Mksquashfs options are supported, -p allows one pseudo file to be specified 144*79398b25SAndroid Build Coastguard Workeron the command line, and -pf allows a pseudo file to be specified containing a 145*79398b25SAndroid Build Coastguard Workerlist of pseduo definitions, one per line. 146*79398b25SAndroid Build Coastguard Worker 147*79398b25SAndroid Build Coastguard WorkerPseudo operations 148*79398b25SAndroid Build Coastguard Worker----------------- 149*79398b25SAndroid Build Coastguard Worker 150*79398b25SAndroid Build Coastguard Worker1. Creating a dynamic file 151*79398b25SAndroid Build Coastguard Worker-------------------------- 152*79398b25SAndroid Build Coastguard Worker 153*79398b25SAndroid Build Coastguard WorkerPseudo definition 154*79398b25SAndroid Build Coastguard Worker 155*79398b25SAndroid Build Coastguard WorkerFilename f mode uid gid command 156*79398b25SAndroid Build Coastguard Worker 157*79398b25SAndroid Build Coastguard Workermode is the octal mode specifier, similar to that expected by chmod. 158*79398b25SAndroid Build Coastguard Worker 159*79398b25SAndroid Build Coastguard Workeruid and gid can be either specified as a decimal number, or by name. 160*79398b25SAndroid Build Coastguard Worker 161*79398b25SAndroid Build Coastguard Workercommand can be an executable or a piece of shell script, and it is executed 162*79398b25SAndroid Build Coastguard Workerby running "/bin/sh -c command". The stdout becomes the contents of 163*79398b25SAndroid Build Coastguard Worker"Filename". 164*79398b25SAndroid Build Coastguard Worker 165*79398b25SAndroid Build Coastguard WorkerExamples: 166*79398b25SAndroid Build Coastguard Worker 167*79398b25SAndroid Build Coastguard WorkerRunning a basic command 168*79398b25SAndroid Build Coastguard Worker----------------------- 169*79398b25SAndroid Build Coastguard Worker 170*79398b25SAndroid Build Coastguard Worker/somedir/dmesg f 444 root root dmesg 171*79398b25SAndroid Build Coastguard Worker 172*79398b25SAndroid Build Coastguard Workercreates a file "/somedir/dmesg" containing the output from dmesg. 173*79398b25SAndroid Build Coastguard Worker 174*79398b25SAndroid Build Coastguard WorkerExecuting shell script 175*79398b25SAndroid Build Coastguard Worker---------------------- 176*79398b25SAndroid Build Coastguard Worker 177*79398b25SAndroid Build Coastguard WorkerRELEASE f 444 root root \ 178*79398b25SAndroid Build Coastguard Worker if [ ! -e /tmp/ver ]; then \ 179*79398b25SAndroid Build Coastguard Worker echo 0 > /tmp/ver; \ 180*79398b25SAndroid Build Coastguard Worker fi; \ 181*79398b25SAndroid Build Coastguard Worker ver=`cat /tmp/ver`; \ 182*79398b25SAndroid Build Coastguard Worker ver=$((ver +1)); \ 183*79398b25SAndroid Build Coastguard Worker echo $ver > /tmp/ver; \ 184*79398b25SAndroid Build Coastguard Worker echo -n `cat /tmp/release`; \ 185*79398b25SAndroid Build Coastguard Worker echo "-dev #"$ver `date` "Build host" `hostname` 186*79398b25SAndroid Build Coastguard Worker 187*79398b25SAndroid Build Coastguard WorkerCreates a file RELEASE containing the release name, date, build host, and 188*79398b25SAndroid Build Coastguard Workeran incrementing version number. The incrementing version is a side-effect 189*79398b25SAndroid Build Coastguard Workerof executing the shell script, and ensures every time Mksquashfs is run a 190*79398b25SAndroid Build Coastguard Workernew version number is used without requiring any other shell scripting. 191*79398b25SAndroid Build Coastguard Worker 192*79398b25SAndroid Build Coastguard WorkerThe above example also shows that commands can be split across multiple lines 193*79398b25SAndroid Build Coastguard Workerusing "\". Obviously as the script will be presented to the shell as a single 194*79398b25SAndroid Build Coastguard Workerline, a semicolon is need to separate individual shell commands within the 195*79398b25SAndroid Build Coastguard Workershell script. 196*79398b25SAndroid Build Coastguard Worker 197*79398b25SAndroid Build Coastguard WorkerReading from a device (or fifo/named socket) 198*79398b25SAndroid Build Coastguard Worker-------------------------------------------- 199*79398b25SAndroid Build Coastguard Worker 200*79398b25SAndroid Build Coastguard Workerinput f 444 root root dd if=/dev/sda1 bs=1024 count=10 201*79398b25SAndroid Build Coastguard Worker 202*79398b25SAndroid Build Coastguard WorkerCopies 10K from the device /dev/sda1 into the file input. Ordinarily Mksquashfs 203*79398b25SAndroid Build Coastguard Workergiven a device, fifo, or named socket will place that special file within the 204*79398b25SAndroid Build Coastguard WorkerSquashfs filesystem, the above allows input from these special files to be 205*79398b25SAndroid Build Coastguard Workercaptured and placed in the Squashfs filesystem. 206*79398b25SAndroid Build Coastguard Worker 207*79398b25SAndroid Build Coastguard Worker2. Creating a block or character device 208*79398b25SAndroid Build Coastguard Worker--------------------------------------- 209*79398b25SAndroid Build Coastguard Worker 210*79398b25SAndroid Build Coastguard WorkerPseudo definition 211*79398b25SAndroid Build Coastguard Worker 212*79398b25SAndroid Build Coastguard WorkerFilename type mode uid gid major minor 213*79398b25SAndroid Build Coastguard Worker 214*79398b25SAndroid Build Coastguard WorkerWhere type is either 215*79398b25SAndroid Build Coastguard Worker b - for block devices, and 216*79398b25SAndroid Build Coastguard Worker c - for character devices 217*79398b25SAndroid Build Coastguard Worker 218*79398b25SAndroid Build Coastguard Workermode is the octal mode specifier, similar to that expected by chmod. 219*79398b25SAndroid Build Coastguard Worker 220*79398b25SAndroid Build Coastguard Workeruid and gid can be either specified as a decimal number, or by name. 221*79398b25SAndroid Build Coastguard Worker 222*79398b25SAndroid Build Coastguard WorkerFor example: 223*79398b25SAndroid Build Coastguard Worker 224*79398b25SAndroid Build Coastguard Worker/dev/chr_dev c 666 root root 100 1 225*79398b25SAndroid Build Coastguard Worker/dev/blk_dev b 666 0 0 200 200 226*79398b25SAndroid Build Coastguard Worker 227*79398b25SAndroid Build Coastguard Workercreates a character device "/dev/chr_dev" with major:minor 100:1 and 228*79398b25SAndroid Build Coastguard Workera block device "/dev/blk_dev" with major:minor 200:200, both with root 229*79398b25SAndroid Build Coastguard Workeruid/gid and a mode of rw-rw-rw. 230*79398b25SAndroid Build Coastguard Worker 231*79398b25SAndroid Build Coastguard Worker3. Creating a directory 232*79398b25SAndroid Build Coastguard Worker----------------------- 233*79398b25SAndroid Build Coastguard Worker 234*79398b25SAndroid Build Coastguard WorkerPseudo definition 235*79398b25SAndroid Build Coastguard Worker 236*79398b25SAndroid Build Coastguard WorkerFilename d mode uid gid 237*79398b25SAndroid Build Coastguard Worker 238*79398b25SAndroid Build Coastguard Workermode is the octal mode specifier, similar to that expected by chmod. 239*79398b25SAndroid Build Coastguard Worker 240*79398b25SAndroid Build Coastguard Workeruid and gid can be either specified as a decimal number, or by name. 241*79398b25SAndroid Build Coastguard Worker 242*79398b25SAndroid Build Coastguard WorkerFor example: 243*79398b25SAndroid Build Coastguard Worker 244*79398b25SAndroid Build Coastguard Worker/pseudo_dir d 666 root root 245*79398b25SAndroid Build Coastguard Worker 246*79398b25SAndroid Build Coastguard Workercreates a directory "/pseudo_dir" with root uid/gid and mode of rw-rw-rw. 247*79398b25SAndroid Build Coastguard Worker 248*79398b25SAndroid Build Coastguard Worker4. Modifying attributes of an existing file 249*79398b25SAndroid Build Coastguard Worker------------------------------------------- 250*79398b25SAndroid Build Coastguard Worker 251*79398b25SAndroid Build Coastguard WorkerPseudo definition 252*79398b25SAndroid Build Coastguard Worker 253*79398b25SAndroid Build Coastguard WorkerFilename m mode uid gid 254*79398b25SAndroid Build Coastguard Worker 255*79398b25SAndroid Build Coastguard Workermode is the octal mode specifier, similar to that expected by chmod. 256*79398b25SAndroid Build Coastguard Worker 257*79398b25SAndroid Build Coastguard Workeruid and gid can be either specified as a decimal number, or by name. 258*79398b25SAndroid Build Coastguard Worker 259*79398b25SAndroid Build Coastguard WorkerFor example: 260*79398b25SAndroid Build Coastguard Worker 261*79398b25SAndroid Build Coastguard Workerdmesg m 666 root root 262*79398b25SAndroid Build Coastguard Worker 263*79398b25SAndroid Build Coastguard WorkerChanges the attributes of the file "dmesg" in the filesystem to have 264*79398b25SAndroid Build Coastguard Workerroot uid/gid and a mode of rw-rw-rw, overriding the attributes obtained 265*79398b25SAndroid Build Coastguard Workerfrom the source filesystem. 266