unsquashfs -s
no tenía la capacidad de mostrar el tipo de compresión utilizado hasta este compromiso el 07 de agosto de 2009. Esto significa que si está ejecutando squashfs-tools
4.0 o anterior, no podrá ver el método de compresión utilizado.
A partir de esta información, derivé una forma de leer el superbloque SquashFS 4.0 para determinar el método de compresión utilizado (donde $SQUASHFS
es la ruta a su archivo SquashFS):
dd if=$SQUASHFS bs=1 count=2 skip=20 2>/dev/zero | od -An -tdI | xargs
Alternativamente, aquí hay una función para aquellos que deseen escribir el nombre del archivo al final de la línea:
sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method
Obtendrá un número (entre 1 y 6 a partir de SquashFS 4.4). Puede hacer coincidir ese número con la siguiente tabla para ver qué método de compresión se utilizó:
╔═══╦════════════════════╦════════════════════╗
║ # ║ 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 ║
╚═══╩════════════════════╩════════════════════╝
Tenga en cuenta que el dd
anterior El comando solo proporcionará una salida confiable si el archivo que especificó tenía un superbloque SquashFS 4.0. El siguiente comando generará "Not SquashFS 4.0
" si el archivo $SQUASHFS
no tiene el número mágico de 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"
Explicación
En los sistemas de archivos SquashFS 4.0, el método de compresión se almacena en los bytes 21 y 22 del superbloque como un tipo de datos short
. dd bs=1 count=2 skip=20
recuperará el short
, od -An -tdI
convertirá el short
en un número legible por humanos, y xargs
es solo para deshacerse de los espacios iniciales.
Antes de SquashFS 4.0, solo existía el gzip método.
Respuesta antigua
unsquashfs
tiene el -s
indicador para mostrar información del sistema de archivos SquashFS.
Ejemplo de uso:
[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
Si solo desea identificar el tipo de compresión, puede canalizar la salida a través de awk '/^Compression/{print $2}'
. Ejemplo:
[email protected] [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip