bal*_*lon 10 linux compression linux-kernel
我必须找出我的arch linux系统的linux内核的压缩类型,但我找不到比理论更多的方法:现在是bzip2(bz),以前是gzip(z)。
在我的电脑上,我运行命令:
$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.3.11-arch1-1 (linux@archlinux) #1 SMP PREEMPT Tue, 12 Nov 2019 22:19:48 +0000, RO-rootFS, swap_dev 0x5, Normal VGA
Run Code Online (Sandbox Code Playgroud)
看理论,我看到bzImage
必须被压缩gzip (z)
,但我无法证明:
bzImage 使用 gzip 压缩,直到 Linux 2.6.30 引入了更多算法。虽然有流行的误解,认为 bz 前缀意味着使用 bzip2 压缩(bzip2 包中经常带有以 bz 为前缀的工具,例如 bzless、bzcat 等),但事实并非如此。
有什么办法可以在我自己的机器上证明吗?或者在这种情况下,理论本身是“经验性的”?
你的维基百科引用,
尽管人们普遍认为
bz
前缀意味着使用 bzip2 压缩 [...],但事实并非如此。
说与你的理论相反:bz
inbzImage
与 无关bzip2
,并且bzImage
不必用 压缩bzip2
。事实上,内核的默认压缩模式仍然是gzip
,现在几乎没有理由使用bzip2
它——它比 LZMA 慢,xz
但也不压缩。
要最终确定给定内核映像使用了什么压缩,而无需运行它或查找其配置,您可以按照内核自己的extract-vmlinux
脚本使用的方法:
在图像中查找压缩器的签名:
gunzip
: \037\213\010
xz
: \3757zXZ\000
bzip2
: BZh
lzma
: \135\0\0\0
lzo
: \211\114\132
lz4
: \002!L\030
zstd
: (\265/\375
尝试从图像中提取数据,从您找到的任何签名的偏移量开始;
我在这里修改了脚本,以便它只报告压缩类型。我没有在这里包括它,因为它仅在 GPL 2 下获得许可。
您可以查看您的内核支持哪些压缩方法。只能选择一个,这样就可以证明是哪一个了。
在这里,我使用 gzip:
$ zgrep CONFIG_KERNEL_ /proc/config.gz
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4591 次 |
最近记录: |