unsquashfs -s
až do tohoto odevzdání dne 07. srpna 2009 neměl možnost zobrazit typ komprese použitý. To znamená, že pokud používáte squashfs-tools
4.0 nebo starší, neuvidíte použitou metodu komprese.
Z těchto informací jsem odvodil způsob, jak číst superblok SquashFS 4.0, abych určil použitou metodu komprese (kde $SQUASHFS
je cesta k vašemu souboru SquashFS):
dd if=$SQUASHFS bs=1 count=2 skip=20 2>/dev/zero | od -An -tdI | xargs
Alternativně je zde funkce pro ty, kteří by chtěli zadat název souboru na konec řádku:
sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method
Získáte číslo (mezi 1 a 6 od SquashFS 4.4). Toto číslo můžete přiřadit k následující tabulce, abyste viděli, jaká metoda komprese byla použita:
╔═══╦════════════════════╦════════════════════╗
║ # ║ Compression Method ║ Compatible Version ║
╠═══╬════════════════════╬════════════════════╣
║ 1 ║ gzip ║ 1.0 and newer ║
║ 2 ║ lzma ║ 4.1 and newer ║
║ 3 ║ lzo ║ 4.1 and newer ║
║ 4 ║ xz ║ 4.2 and newer ║
║ 5 ║ lz4 ║ 4.3 and newer ║
║ 6 ║ zstd ║ 4.4 and newer ║
╚═══╩════════════════════╩════════════════════╝
Všimněte si, že výše dd
příkaz poskytne spolehlivý výstup pouze v případě, že vámi zadaný soubor měl superblok SquashFS 4.0. Následující příkaz vypíše "Not SquashFS 4.0
" pokud je soubor $SQUASHFS
nemá magické číslo SquashFS 4.0:
if [[ "$(dd if="$SQUASHFS" bs=1 count=4 skip=28 2>/dev/zero | xxd -p)" != "04000000" ]] ; then echo -n "Not " ; fi ; echo "SquashFS 4.0"
Vysvětlení
V souborových systémech SquashFS 4.0 je metoda komprese uložena na 21 a 22 bajtech superbloku jako datový typ short
. dd bs=1 count=2 skip=20
načte short
, od -An -tdI
změní short
na číslo čitelné pro člověka a xargs
je jen zbavit se úvodních mezer.
Před SquashFS 4.0 existoval pouze gzip metoda.
Stará odpověď
unsquashfs
má -s
příznak pro zobrazení informací o souborovém systému SquashFS.
Příklad použití:
[email protected] [/tmp]# unsquashfs -s template.squashfs
Found a valid SQUASHFS 4:0 superblock on template.squashfs.
Creation or last append time Thu Apr 30 23:07:23 2015
Filesystem size 47225242.44 Kbytes (46118.40 Mbytes)
Compression gzip
Block size 131072
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Fragments are compressed
Always_use_fragments option is not specified
Xattrs are compressed
Duplicates are removed
Number of fragments 23629
Number of inodes 437076
Number of ids 1
Pokud chcete pouze identifikovat typ komprese, můžete výstup zpracovat přes awk '/^Compression/{print $2}'
. Příklad:
[email protected] [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip