Del*_*tik 4 linux compression terminal squashfs
我有一些 SquashFS 文件,我想知道它们是如何压缩的,以便我可以粗略地了解它们在安装时的性能。
该squashfs-tools
包提供的唯一二进制文件是mksquashfs
和unsquashfs
,分别用于创建/附加 SquashFS 文件和提取 SquashFS 文件。
如何确定用于制作特定 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
Run Code Online (Sandbox Code Playgroud)
或者,对于那些想在行尾输入文件名的人,这里有一个函数:
sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method
Run Code Online (Sandbox Code Playgroud)
您将获得一个数字(从 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 ?
???????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
(来源)
请注意,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"
Run Code Online (Sandbox Code Playgroud)
在的squashfs 4.0的文件系统中,压缩方法被存储在21日和22 ND字节超级块作为数据类型的short
。 dd bs=1 count=2 skip=20
将检索short
,od -An -tdI
将把short
变成一个人类可读的数字,xargs
只是为了摆脱前导空格。
在 SquashFS 4.0 之前,只有gzip方法。
unsquashfs
具有-s
显示 SquashFS 文件系统信息的标志。
用法示例:
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
Run Code Online (Sandbox Code Playgroud)
如果您只想识别压缩类型,您可以通过管道输出awk '/^Compression/{print $2}'
. 例子:
deltik@node51 [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip
Run Code Online (Sandbox Code Playgroud)