GNU/Linux >> Linux の 問題 >  >> Linux

SquashFS 圧縮方式とは何ですか?

unsquashfs -s 2009 年 8 月 7 日のこのコミットまで、使用された圧縮タイプを表示する機能がありませんでした。つまり、squashfs-tools を実行している場合、 4.0 以前では、使用されている圧縮方法を確認できません。

この情報から、SquashFS 4.0 スーパーブロックを読み取って、使用されている圧縮方法を判断する方法を導き出しました (ここで $SQUASHFS は SquashFS ファイルへのパスです):

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

または、行末にファイル名を入力したい人のための関数があります:

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

数値が得られます (SquashFS 4.4 では 1 から 6 の間)。その番号を次の表と照合して、使用された圧縮方法を確認できます:

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

上記の dd に注意してください コマンドは、指定したファイルに SquashFS 4.0 スーパーブロックが含まれている場合にのみ、信頼できる出力を提供します。次のコマンドは「Not SquashFS 4.0」を出力します " ファイル $SQUASHFS の場合 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"

説明

SquashFS 4.0 ファイルシステムでは、圧縮方法はスーパーブロックの 21 バイトと 22 バイトにデータ型 short として格納されます。 . dd bs=1 count=2 skip=20 short を取得します 、 od -An -tdI short になります 人間が読める数字に変換し、xargs 先頭のスペースを取り除くだけです。

SquashFS 4.0 より前は、gzip しかありませんでした メソッド。

古い回答

unsquashfs -s を持っています SquashFS ファイルシステム情報を表示するためのフラグ

使用例:

[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

圧縮タイプを識別したいだけの場合は、出力を awk '/^Compression/{print $2}' にパイプすることができます .例:

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

Linux
  1. LinuxとUnix:違いは何ですか?

  2. Linuxの歴史の中で最も重要な瞬間は何でしたか?

  3. debian-+ ユーザーとは?

  1. 空きスペースはどうなりましたか?

  2. LD_PRELOAD トリックとは何ですか?

  3. POSIX とはどういう意味ですか?

  1. *nix とはどういう意味ですか?

  2. CFSのvruntimeの概念は何ですか

  3. Bashでの$#の使用は何ですか