dracut 速度优化


1️⃣ dracut 的并行化能力

  • dracut 本身在 大多数模块操作和 cpio 打包阶段是串行执行的。

  • 但是从 Linux 3.x 以后 ,dracut 内部会调用 cpio​ 或 gzip/xz​ 等压缩工具。

    • gzip 默认单线程,但可以用 pigz 替代,支持多核压缩。
    • xz 可以用 xz -T0 来利用所有 CPU 核心。

所以 dracut 并不是完全单线程,但压缩阶段是性能瓶颈,使用多核压缩能显著加快生成速度。


2️⃣ 多核优化方法

方法 A:使用 pigz 代替 gzip

  1. 安装 pigz
bash 复制代码
sudo dnf install -y pigz    # openEuler/Fedora/RHEL
  1. 生成 initramfs 并使用 pigz:
bash 复制代码
export COMPRESS=gzip
export COMPRESSPROG=pigz
dracut -f /boot/initramfs-6.6.103+.img 6.6.103+
  • pigz 会自动使用所有 CPU 核心并行压缩,速度比单核 gzip 快很多。

方法 B:使用 xz 多线程

  1. 安装 xz 工具:
bash 复制代码
sudo dnf install -y xz
  1. 指定 xz 多线程:
bash 复制代码
dracut --xz -f /boot/initramfs-6.6.103+.img 6.6.103+
export XZ_OPT="-T0"
  • -T0 表示使用系统所有 CPU 核心。

方法 C:临时修改 dracut 默认压缩工具

dracut 默认压缩方式在 /etc/dracut.conf​ 或 /etc/dracut.conf.d/*.conf​ 配置:

ini 复制代码
compress="xz"       # 可改为 gzip 或 bzip2
compressflags="-T0" # 多核

然后执行:

bash 复制代码
dracut -f /boot/initramfs-6.6.103+.img 6.6.103+

3️⃣ 总结

特性 说明
默认 串行压缩,单线程
多核压缩 使用pigz​(gzip 多核)或xz -T0
模块处理 dracut 模块执行本身还是串行,但压缩阶段可以并行
效果 对大内核 (>300MB initramfs) 提升明显