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