如果/proc/config.gz
不可用,我如何知道正在运行的内核能够在压缩后使用哪些解压缩算法cpio
initramfs
?
该gzip
算法是否始终可用,即使在构建内核时CONFIG_DECOMPRESS_GZIP
不可用?y
答案1
压缩算法声明于lib/decompress.c
。 Gzip 定义于lib/decompress_inflate.c
并且没有获得任何特殊地位;仅当编译内核时CONFIG_DECOMPRESS_GZIP
它才会存在。y
可用的压缩算法列表是compressed_formats
结构。由于它被定义为static
,因此它在其他源文件中不可用。因此,唯一使用它的函数就是decompress_method
函数lib/decompress.c
本身。因此,让内核使用支持的算法表的唯一方法是尝试解压缩以适当的两字节魔术序列开头的内容,并查看该函数是否返回算法名称。
您可以通过搜索内核符号列表(/proc/kallsyms
)来判断支持哪些解压函数。这些函数没有这样标识,因此您需要烘焙符号名称列表。
</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4
答案2
awk 获胜:
samveen@x230:~ $ awk '/^name/{n=$3}/^type/{if($3=="compression"){print n}}' </proc/crypto
lz4
lzo-rle
lzo
deflate
compress_null
说明:
/proc/crypto
打印标记为 的内核算法type
compression
。
注:/proc
是总是可用于每一个 linux
基于内核的环境,无论是通过initrd
还是容器(如docker
),因此此方法应该适用于所有最新的内核
买者自负:
答案3
您可以通过进入目录 sys/power/tuxonice/compression 来了解您的压缩类型,其中您将有一个名为算法的文件进入其中,它将包含解压缩类型,对我来说,它被写为 lzo。