GNU/Linux >> Belajar Linux >  >> Linux

Apa metode kompresi SquashFS?

unsquashfs -s tidak memiliki kemampuan menampilkan jenis kompresi yang digunakan hingga komit ini pada 07 Agustus 2009. Ini berarti jika Anda menjalankan squashfs-tools 4.0 atau lebih lama, Anda tidak akan dapat melihat metode kompresi yang digunakan.

Dari informasi ini, saya memperoleh cara membaca superblok SquashFS 4.0 untuk menentukan metode kompresi yang digunakan (di mana $SQUASHFS adalah jalur ke file SquashFS Anda):

dd if=$SQUASHFS bs=1 count=2 skip=20 2>/dev/zero | od -An -tdI | xargs

Alternatifnya, inilah fungsi bagi mereka yang ingin mengetikkan nama file di akhir baris:

sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method

Anda akan mendapatkan nomor (antara 1 dan 6 pada SquashFS 4.4). Anda dapat mencocokkan angka tersebut dengan tabel berikut untuk melihat metode kompresi yang digunakan:

╔═══╦════════════════════╦════════════════════╗
║ # ║ 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      ║
╚═══╩════════════════════╩════════════════════╝

Perhatikan bahwa dd di atas perintah hanya akan memberikan keluaran yang andal jika file yang Anda tentukan memiliki superblok SquashFS 4.0. Perintah berikut akan menampilkan "Not SquashFS 4.0 " jika file $SQUASHFS tidak memiliki nomor ajaib 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"

Penjelasan

Dalam sistem file SquashFS 4.0, metode kompresi disimpan pada 21 dan 22 byte superblok sebagai tipe data short . dd bs=1 count=2 skip=20 akan mengambil short , od -An -tdI akan mengubah short menjadi angka yang dapat dibaca manusia, dan xargs hanya untuk menyingkirkan spasi terdepan.

Sebelum SquashFS 4.0, hanya ada gzip metode.

Jawaban lama

unsquashfs memiliki -s bendera untuk menampilkan informasi sistem file SquashFS.

Contoh penggunaan:

[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

Jika Anda hanya ingin jenis kompresi teridentifikasi, Anda dapat menyalurkan output melalui awk '/^Compression/{print $2}' . Contoh:

[email protected] [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip

Linux
  1. Apa trik LD_PRELOAD?

  2. Apa yang dimaksud dengan POSIX?

  3. Apa konsep vruntime di CFS

  1. Linux vs. Unix:Apa bedanya?

  2. Apa gunanya $# di Bash

  3. Apa itu sistem file NSFS?

  1. Selamat ulang tahun kernel Linux:Apa rilis favorit Anda?

  2. Apa momen terpenting dalam sejarah Linux?

  3. Apa yang Terjadi Pada Ruang Kosong?