如何禁用 Debian Linux 10 buster 的 initrd.img 文件压缩

如何禁用 Debian Linux 10 buster 的 initrd.img 文件压缩

我想禁用/boot/initrd.img文件压缩以加快启动速度。我的磁盘足够大,可以容纳额外的 10MB。老实说,我认为这应该是默认设置,现在谁买不起几兆字节的磁盘空间。对于嵌入式场景,可以手动启用。

查看/etc/initramfs-tools/initramfs.conf,有更改压缩类型的选项

COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz ]

但没有禁用压缩的选项。我试过了Nonenone没有效果。

作为解决方案,我initrd.img-4.19.0-8-amd64使用手动解压缩gunzip。但每次安装内核更新时我都必须再次解压。

答案1

没有提供执行此操作的选项,但由于mkinitramfs是 shell 脚本,因此可以添加一个而不需要重新编译。在 中/usr/sbin/mkinitramfs,寻找

case "${compress}" in

在选项集中添加“cat”行:

cat)   compress="cat" ;;

这将允许COMPRESS=cat在 中指定initramfs.conf

mkinitramfs每次从包中恢复时(升级时),您都必须重新执行此操作。

答案2

如今看来这件事并不容易做到,当然也不是一个明显的选择initramfs.conf

读取和解压缩图像所需的总时间是读取文件和解压缩文件的总时间。第一个任务是 I/O 限制,第二个任务主要是 CPU 限制。

因此,加载压缩图像与未压缩图像之间的比较并不直接。在一种情况下,您读取较小的文件然后将其解压缩,在另一种情况下,您读取较大的文件但不解压缩。

哪一个更快,您需要进行基准测试。如果我猜的话,我会说读取一个较小的文件并解压缩。

答案3

可以改成COMPRESS=gzipCOMPRESS=cat创建initramfs.conf 图片时会给出警告信息,忽略即可。

答案4

Stephen Kitt 给出了很好的建议,但它现在在 Debian 11 上不起作用,因为-c在调用压缩器二进制文件时使用了该标志,这会破坏操作cat

另外,一个好的解决方案不是/usr/sbin/mkinitramfs每次都进行编辑。对我来说最优雅的是pv代替压缩器到/etc/initramfs-tools/initramfs.conf.它会提示一个小警告,但不会中断工作:

user@s:~# time update-initramfs -c -k all
update-initramfs: 生成 /boot/initrd.img-5.10.0-18-amd64
W: 未知压缩命令 pv
134MiB 0:00:00 [ 220MiB/s ] [====================================>] 100%

真实0m9,144s
用户0m4,915s
系统0m3 ,654s
用户@s:~#

相关内容