unsquashfs -s
não tem a capacidade de exibir o tipo de compactação usado até este commit em 07 de agosto de 2009 . Isso significa que, se você estiver executando squashfs-tools
4.0 ou mais, não conseguirá ver o método de compactação usado.
A partir dessas informações, eu obtive uma maneira de ler o superbloco SquashFS 4.0 para determinar o método de compactação usado (onde SQUASHFS
é o caminho para o seu arquivo SquashFS):
dd if=SQUASHFS bs=1 count=2 skip=20 2>/dev/zero | od -An -tdI | xargs
Alternativamente, aqui está uma função para aqueles que gostariam de digitar o nome do arquivo no final da linha:
sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method
Você receberá um número (entre 1 e 5 a partir do SquashFS 4.3). Você pode combinar esse número com a tabela a seguir para ver qual método de compactação foi usado:
╔═══╦════════════════════╦════════════════════╗
║ # ║ 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 ║
╚═══╩════════════════════╩════════════════════╝
( Fonte )
Observe que o comando dd
acima somente fornecerá uma saída confiável se o arquivo especificado tiver um superbloco SquashFS 4.0. O comando a seguir produzirá " Not SquashFS 4.0
" se o arquivo SQUASHFS
não tiver o número mágico do 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"
Explicação
Nos sistemas de arquivos SquashFS 4.0, o método de compactação é armazenado nos 21 st e 22 nd bytes do superbloco como um tipo de dados short
. dd bs=1 count=2 skip=20
recuperará o short
, od -An -tdI
transformará o short
em um número legível e xargs
apenas para se livrar dos espaços iniciais.
Antes do SquashFS 4.0, havia apenas o método gzip .
Resposta antiga
unsquashfs
tem o sinal -s
para exibir informações do sistema de arquivos SquashFS.
Exemplo de uso:
deltik@node51 [/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
Se você quiser apenas o tipo de compactação identificado, poderá canalizar a saída por meio de awk '/^Compression/{print $2}'
. Exemplo:
deltik@node51 [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip