Bestandssysteem – SquashFS Tools (Software)
Wat is SquashFS?
SquashFS is bedoeld voor algemene bestandstructuren waaruit enkel gelezen moet worden. Het bestandsysteem laat niet toe om de data te wijzigen. Er kan enkel een nieuwe squashFS-structuur gemaakt worden ter vervanging van de vorige. In die zin is het gebruik vergelijkbaar met een gecomprimeerd bestand zoals een zip-bestand.
De eerste versie van SquashFS gebruikte het gzip formaat. Stelselmatig worden andere compressiesystemen toegevoegd, zoals LZMA, LZO en LZMA2.
SquashFS Tools Informatie (ENG)
unsquashfs is the tool for extracting data from squashed file systems.
mksquashfs is the tool for creating new squashed file systems, and for appending new data to existing squashed file systems.
Download SquashFS @ Sourceforge.net
Installatie op Debian (Linux)
Commando: sudo apt-get install squashfs-tools
Installatie op Raspberry Pi (Linux)
Commando: sudo apt-get install squashfs-tools
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: liblzo2-2 The following NEW packages will be installed: liblzo2-2 squashfs-tools 0 upgraded, 2 newly installed, 0 to remove and 41 not upgraded. Need to get 176 kB of archives. After this operation, 571 kB of additional disk space will be used. Do you want to continue [Y/n]? Y Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main liblzo2-2 armhf 2.06-1+deb7u1 [56.0 kB] Get:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main squashfs-tools armhf 1:4.2-5 [120 kB] Fetched 176 kB in 1s (114 kB/s) Selecting previously unselected package liblzo2-2:armhf. (Reading database ... 74923 files and directories currently installed.) Unpacking liblzo2-2:armhf (from .../liblzo2-2_2.06-1+deb7u1_armhf.deb) ... Selecting previously unselected package squashfs-tools. Unpacking squashfs-tools (from .../squashfs-tools_1%3a4.2-5_armhf.deb) ... Processing triggers for man-db ... Setting up liblzo2-2:armhf (2.06-1+deb7u1) ... Setting up squashfs-tools (1:4.2-5) ... |
Commandolijn parameters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
SYNTAX: unsquashfs [options] filesystem [directories or files to extract] -v[ersion] print version, licence and copyright information -d[est] <pathname> unsquash to <pathname>, default "squashfs-root" -n[o-progress] don't display the progress bar -no[-xattrs] don't extract xattrs in file system -x[attrs] extract xattrs in file system (default) -u[ser-xattrs] only extract user xattrs in file system. Enables extracting xattrs -p[rocessors] <number> use <number> processors. By default will use number of processors available -i[nfo] print files as they are unsquashed -li[nfo] print files as they are unsquashed with file attributes (like ls -l output) -l[s] list filesystem, but don't unsquash -ll[s] list filesystem with file attributes (like ls -l output), but don't unsquash -f[orce] if file already exists then overwrite -s[tat] display filesystem superblock information -e[f] <extract file> list of directories or files to extract. One per line -da[ta-queue] <size> Set data queue to <size> Mbytes. Default 256 Mbytes -fr[ag-queue] <size> Set fragment queue to <size> Mbytes. Default 256 Mbytes -r[egex] treat extract names as POSIX regular expressions rather than use the default shell wildcard expansion (globbing) Decompressors available: gzip lzma lzo lz4 xz |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
SYNTAX:mksquashfs source1 source2 ... dest [options] [-e list of exclude dirs/files] Filesystem build options: -comp <comp> select <comp> compression Compressors available: gzip (default) lzma lzo lz4 xz -b <block_size> set data block to <block_size>. Default 128 Kbytes Optionally a suffix of K or M can be given to specify Kbytes or Mbytes respectively -no-exports don't make the filesystem exportable via NFS -no-sparse don't detect sparse files -no-xattrs don't store extended attributes -xattrs store extended attributes (default) -noI do not compress inode table -noD do not compress data blocks -noF do not compress fragment blocks -noX do not compress extended attributes -no-fragments do not use fragments -always-use-fragments use fragment blocks for files larger than block size -no-duplicates do not perform duplicate checking -all-root make all files owned by root -force-uid uid set all file uids to uid -force-gid gid set all file gids to gid -nopad do not pad filesystem to a multiple of 4K -keep-as-directory if one source directory is specified, create a root directory containing that directory, rather than the contents of the directory Filesystem filter options: -p <pseudo-definition> Add pseudo file definition -pf <pseudo-file> Add list of pseudo file definitions -sort <sort_file> sort files according to priorities in <sort_file>. One file or dir with priority per line. Priority -32768 to 32767, default priority 0 -ef <exclude_file> list of exclude dirs/files. One per line -wildcards Allow extended shell wildcards (globbing) to be used in exclude dirs/files -regex Allow POSIX regular expressions to be used in exclude dirs/files Filesystem append options: -noappend do not append to existing filesystem -root-becomes <name> when appending source files/directories, make the original root become a subdirectory in the new root called <name>, rather than adding the new source items to the original root Mksquashfs runtime options: -version print version, licence and copyright message -exit-on-error treat normally ignored errors as fatal -recover <name> recover filesystem data using recovery file <name> -no-recovery don't generate a recovery file -info print files written to filesystem -no-progress don't display the progress bar -progress display progress bar when using the -info option -processors <number> Use <number> processors. By default will use number of processors available -mem <size> Use <size> physical memory. Currently set to 4086M Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively Miscellaneous options: -root-owned alternative name for -all-root -noInodeCompression alternative name for -noI -noDataCompression alternative name for -noD -noFragmentCompression alternative name for -noF -noXattrCompression alternative name for -noX -Xhelp print compressor options for selected compressor Compressors available and compressor specific options: gzip (default) -Xcompression-level <compression-level> <compression-level> should be 1 .. 9 (default 9) -Xwindow-size <window-size> <window-size> should be 8 .. 15 (default 15) -Xstrategy strategy1,strategy2,...,strategyN Compress using strategy1,strategy2,...,strategyN in turn and choose the best compression. Available strategies: default, filtered, huffman_only, run_length_encoded and fixed lzma (no options) lzo -Xalgorithm <algorithm> Where <algorithm> is one of: lzo1x_1 lzo1x_1_11 lzo1x_1_12 lzo1x_1_15 lzo1x_999 (default) -Xcompression-level <compression-level> <compression-level> should be 1 .. 9 (default 8) Only applies to lzo1x_999 algorithm lz4 -Xhc Compress using LZ4 High Compression xz -Xbcj filter1,filter2,...,filterN Compress using filter1,filter2,...,filterN in turn (in addition to no filter), and choose the best compression. Available filters: x86, arm, armthumb, powerpc, sparc, ia64 -Xdict-size <dict-size> Use <dict-size> as the XZ dictionary size. The dictionary size can be specified as a percentage of the block size, or as an absolute value. The dictionary size must be less than or equal to the block size and 8192 bytes or larger. It must also be storable in the xz header as either 2^n or as 2^n+2^(n+1). Example dict-sizes are 75%, 50%, 37.5%, 25%, or 32K, 16K, 8K etc. |
Windows versie (Cygwin)
Download versie 3.1/3.1/3.4/4.0: SquashFS Tools @ Fragilematter.blogspot.nl
Let op: SquashFS partities die gecomprimeerd zijn met LZMA werken niet met Squashfs 4.0, daarvoor heb je SquashFS v4.2 of hoger nodig.
Foumelding wanneer je een LZMA squashfs wilt uitpakken op versie 4.0:
Zelf compileren op Windows Cygwin
SquashFS Tools v4.3:
Omdat ik graag LZMA wilde uitpakken heb ik mijn eigen versie op moment van schrijven 4.3 gecompileerd op Cygwin (bron)
1) Installeer Cygwin + alles tools en compilers (GCC) om te bouwen e.d.
2) Download SquashFS Tools v4.3 in de TAR.GZ formaat.
3) Pak de TAR.GZ uit in de [Cygwin folder]/home/[NAAM] folder.
bijvoorbeeld met:
1 2 |
tar xvzf squashfs4.3.tar.gz cd squashfs4.3/squashfs-tools |
Je kan nu SquashFS Tools v4.3 compileren met het commando:
1 |
make EXTRA_CFLAGS="-Dlinux -DFNM_EXTMATCH='(1<<5)' -D'sigtimedwait(a,b,c)=sigwaitinfo(a,b)'" |
of (ook gevonden)
make EXTRA_CFLAGS="-Dlinux -DFNM_EXTMATCH=0"
Infomatie over deze 2 commando’s (ENG):
1) This trick replaces “sigtimedwait” with “sigwaitinfo”. Those two functions does the same except that sigtimedwait has a timeout. So you may expect some lock up, in some conditions.
2) This simply compiles the same code on Cygwin as on Linux, except that Cygwin doesn’t (yet?) implement the GNU extension to fnmatch, FNM_EXTMATCH.
Ps. in Cygwin kun je niet plakken, maak in Windows een bestandje aan genaamd maak.sh met daarin de regel hierboven, en start deze met:
bash maak.sh
Patches om te compileren onder Cygwin
De patches om oudere versies op Cygwin te compileren zijn bijgevoegd onder aan deze pagina, je start een patch bestand met het commando:
patch < bestand.patch
Let wel op dat je deze “patch” software installeert in je Cygwin installatie.
Optionele ondersteuning voor diverse archiverings formaten
Standaard ondersteunt SquashFS Tools alleen GZIP, tegenwoordig worden de images beter ingepakt en met LZMA gecomprimeerd, dit moet je dus “aan” zetten in het bestand “makefile“, dat doe je door de comment voor de regel weg te halen voor het desbetreffende archiveringsformaat:
Haal de comment voor de regels weg van de optionele formaten zodat ook zij ondersteund worden, sla het bestand op!
Optioneel formaat GZIP
1) Standaard al ondersteund door Cywin!
Optioneel formaat LZMA2
1) Comment regel weghalen voor XZ_SUPPORT = 1
Optioneel formaat LZMA XZ
Comment regel weghalen voor LZMA_XZ_SUPPORT = 1
Optioneel formaat LZMA (voorbeeld van LZMA v4.65)
1) Download de LZMA v4.65 source bestanden.
2) Pak het BZ2 archief uit in [Cygwin folder]/home/[NAAM]/lzma-4.65 (zodat de de folder ‘C‘ daar in staat)
3) In makefile haal de comment weg bij:
1 2 |
LZMA_SUPPORT = 1 LZMA_DIR = |
4) Pas het pad aan als volgt:
LZMA_DIR = ~/lzma-4.65
Als je nu een compile maakt krijg je een foutmelding: ‘LzmaLib not found‘, daarvoor moet je het pad naar dat bestand handmatig instellen in lzma_wrapper.c.
5) Op het bestand lzma_wrapper.c, die staat in de root folder van squashfs en wijzig:
#include <LzmaLib.h>
in
#include <../lzma-4.65/C/LzmaLib.h>
Optioneel formaat LZO (voorbeeld van LZO v2.09)
1) Via Cywin setup alles installeren van “liblzo“.
2) Download de LZO source bestanden.
3) Pak het TAR.GZ archief uit in [Cygwin folder]/home/[NAAM]/lzo-2.09 (zodat de makefile.* daar in staat)
Je hebt dan ook de source folder (src) in ~/lzo-2.09/src
4) in de SquashFS Tools Makefile zet LZO support op 1 (uncomment de regel:
LZO_SUPPORT = 1 )
5) in de SquashFS Tools Makefile zet het pad naar LZO:
LZO_DIR = ~/lzo-2.09/src
Optioneel formaat LZ4 (voorbeeld van LZ4 r129)
Voor ondersteuning voor dit formaat moet je een library (.dll) compileren en diverse bestanden wegzetten voor deze ondersteuning, het heeft mij een boel tijd gekost, dit is mijn oplossing:
1) Via Cywin setup alles installeren van “patch“.
2) Download de LZ4 source bestanden.
3) Pak het TAR.GZ archief uit in [Cygwin folder]/home/[NAAM]/lz4-r129 (zodat de makefile daar in staat)
Je hebt dan ook de library folder (src) in ~/lz4-r129/lib
4) Om de DLL voor Cygwin te compileren moet eerst de Makefile aangepast worden, daar heb ik een patch voor gevonden.
Voor het gemak het patch bestand genoemd lz4-r129.patch, kopieer deze in de library folder ~/lz4-r129/lib
5) Voer nu het volgende commando uit om het bestand aan te passen:
patch < lz4-r129.patch , de patch is eigenlijk bedoeld voor versie r124, maar weet toch het bestand goed aan te passen:
6) Bouw nu de library met het commando:
make
Nu hebben we de library gecompileerd en zijn er 3 bestanden aangemaakt in de lib folder:
1 2 3 |
lz4-r129\lib\cyglz4-1.dll lz4-r129\lib\liblz4.dll.a lz4-r129\lib\liblz4.a |
7) Kopieer de 2 .a bestanden naar: [Cygwin folder]\lib
8) Het bestand cylz4-1.dll heb je nodig bij de .exe bestanden van de SquashFS Tools.
Omdat deze compilatie speciaal voor SquashFS Tools is, heb ik deze library’s en patches allemaal bijgesloten onderaan de pagina!
Benodigde Cygwin bestanden voor ondersteunende formaten:
G-ZIP: cygz.dll
LZMA2: cyglzma-5.dll
LZO: cyglzo2-2.dll
LZ4: cyglz4-1.dll
Zelf tekstuele toevoegingen maken aan de compilatie
Je kan zelf ook nog een eigen handtekening of watermerk toevoegen aan je compilatie, die kan je doet door deze bestanden te bewerken:
1 2 |
mksquashfs.c unsquashfs.c |
Zo kun je bijvoorbeeld tekst toevoegen aan hetgeen dat weergegeven wordt met de parameter -version , zoek dan naar: #define VERSION()
In de printblokken kun je je eigen teksten toevoegen:
1 2 3 4 5 6 7 8 9 10 |
printf("[----------------------------------------------------------]\n");\ printf("Compiled by Sebastiaan Ebeltjes @ 2015-06-08 (Domoticx.nl)\n");\ printf("Compiled with Cygwin on Windows 8.1, compiler: GCC v4.9.2\n\n");\ printf("This version comes with added support for:\n");\ printf("- LZMA v4.65\n");\ printf("- LZMA2 (XZ) v5.5.0\n");\ printf("- LZO v2.09\n");\ printf("- LZ4 r130\n\n");\ printf("Enjoy!\n\n");\ printf("[----------------------------------------------------------]\n\n");\ |
Geeft weer:
[#/software/squashfstools” ]