initramfs 里面缺少某个磁盘驱动导致无法挂载根分区怎么补救

2次阅读

直接补救的关键是让 initramfs 包含缺失磁盘驱动模块,常见于内核升级、更换存储控制器或使用 NVMe/RAID/virtio 设备但未预载驱动;需用 lsinitrd、lspci、modinfo 确认缺失驱动,CentOS/RHEL 用 dracut 添加(临时或永久),initramfs shell 中可手动 modprobe 加载并验证挂载,预防措施包括升级前备份旧内核、升级后立即重建 initramfs、虚拟机启用 virtio 驱动、生产环境用 UUID/LVM 挂载。

initramfs 里面缺少某个磁盘驱动导致无法挂载根分区怎么补救

直接补救的关键是让 initramfs 包含缺失的磁盘驱动模块,而不是等系统启动失败后再硬扛。常见于内核升级后、更换存储控制器(如从 mpt2sas 换成 mpt3sas)、或使用 NVMe/RAID/virtio 设备但未预载驱动的情况。

确认缺失的是哪个驱动

在能进入系统的环境下(比如用旧内核启动)执行:

  • lsinitrd -k $(uname -r) | grep -E "(mpt|nvme|raid|virtio|ahci|isci)" —— 查看当前 initramfs 是否含目标驱动
  • lspci -k | grep -A 3 -i "storage|mass|scsi|nvme" —— 确认硬件型号及当前绑定的驱动
  • modinfo (如 modinfo mpt3sas)—— 验证驱动是否存在、是否支持当前内核

把驱动加进 initramfs 并重建

CentOS/RHEL 系统用 dracut,不是 update-initramfs(那是 Ubuntu/Debian 的):

  • 临时加一个驱动(只对当前内核):
    dracut --force --add-drivers mpt3sas --kver $(uname -r)
  • 永久生效(后续所有新内核自动包含):
    编辑 /etc/dracut.conf,添加一行:
    add_drivers+="mpt3sas nvme_core virtio_blk"
    再运行:dracut -f
  • 验证是否成功:
    lsinitrd -k $(uname -r) | grep mpt3sas —— 有输出即表示已打入

如果已经卡在 initramfs shell 里

先别慌,initramfs shell 是可操作的救援环境:

  • 输入 ls /dev 看有没有预期的磁盘设备(如 sdanvme0n1vda
  • 输入 lsmod 看关键驱动是否已加载;没加载就试:
    modprobe mpt3sas(或 nvmevirtio_blk 等)
  • 加载成功后,再试挂载:
    mount /dev/sda2 /mnt(替换为你的根分区)
  • 若能挂上,说明只是 initramfs 缺模块 —— 重启进正常系统后按上面方法重建即可

预防下次再出问题

内核升级不是“点一下就完事”,尤其涉及底层存储时:

  • 升级前备份旧内核:grubby --set-default /boot/vmlinuz-$(old-version)
  • 升级后立刻重建 initramfs:dracut -f
  • 虚拟机 环境务必确保 virtio_blkvirtio_scsi 已启用;物理服务器留意 RAID/HBA 厂商是否提供配套驱动 RPM
  • 生产环境建议用 UUID 或 LVM 名称挂载,避免因设备名变化(sdasdb)导致 fstab 失效
text=ZqhQzanResources