initramfs 重新生成后还是进不了系统的 dracut –force –add-drivers 补救

11次阅读

dracut –force –add-drivers 必须指定正确模块名(不含.ko)、确保模块已安装且未被黑名单,生成后需用lsinitrd验证是否包含,并在Live环境修复时指定–root和更新引导。

initramfs 重新生成后还是进不了系统的 dracut –force –add-drivers 补救

如果重新生成 initramfs(比如用 dracut --force)后仍无法进入系统,且怀疑是驱动缺失(尤其是 NVMe、RaiD、加密模块或特定网卡/显卡固件),那么 dracut --force --add-drivers 是常用补救手段,但**必须确保驱动名正确、内核模块已安装、且被 initramfs 实际包含**。光加参数不解决问题,常见原因和操作如下:

确认目标驱动是否真实存在并可加载

在能进入救援环境(如 Live usb 或 GRUB 的 recovery mode)下执行:

  • 运行 ls /lib/modules/$(uname -r)/kernel/drivers/ | grep -i nvme(替换为你要查的驱动类型,如 raidcryptoahci)——确认模块路径存在
  • 尝试手动加载:modprobe nvme_core && modprobe nvme(NVMe 示例),无报错才说明模块可用
  • 检查是否被黑名单grep -r "blacklist.*nvme" /etc/modprobe.d/,如有需临时注释并 update-initramfs -udebian系)或重跑 dracut

正确使用 --add-drivers 并验证结果

该参数只接受**模块名(不含 .ko)**,多个用空格分隔,且必须对应 modprobe 能识别的名字:

  • 错误写法:dracut --force --add-drivers nvme.ko(带 .ko 后缀会失败)
  • 正确写法:dracut --force --add-drivers nvme_core nvme(NVMe 必须两者都加)
  • 生成后检查是否生效:lsinitrd /boot/initramfs-$(uname -r).img | grep -E "(nvme|raid)",看到对应模块才表示已打进镜像

注意 initramfs 生成范围与内核版本匹配

dracut 默认为当前运行内核生成镜像,但若你从 Live 环境修复,需指定目标根目录和内核版本:

  • 挂载原系统根分区(如 /mnt),再运行:
    dracut --force --regenerate-all --root /mnt --add-drivers nvme_core nvme
  • 确认 /mnt/boot/vmlinuz-xxx 存在,且 /mnt/lib/modules/xxx/ 下有对应驱动
  • 别忘了更新引导:GRUB 用户执行 chroot /mnt grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/centos)或 update-grub(Debian/ubuntu

其他关键依赖不能漏

仅加驱动不够,还需确保 initramfs 包含必要功能模块:

  • 全盘加密(LUKS):加 --force 同时需确保 cryptodiskluksdm_mod 已启用,推荐加参数:--include /etc/crypttab /etc/crypttab
  • RAID/LVM:确认 raid1raid456dm_snapshot 等已加载,并在 dracut 配置中启用对应模块(/etc/dracut.conf.d/raid.conf 中设 force_drivers+=" raid1 raid456 "
  • 缺少固件(firmware):某些网卡/NVMe 控制器需额外固件文件,需用 --force-drivers--install 手动复制,例如:dracut --force --install "/lib/firmware/amdgpu/*" --add-drivers amdgpu
text=ZqhQzanResources