当Linux系统启动过程中,即使已经重建了initramfs镜像,依旧卡在waiting for root device的UUID或者LABEL检查环节,通常意味着initramfs内的根设备识别配置与实际硬件信息不匹配,或者相关驱动没有正确加载。这个问题会导致系统无法正常挂载根分区,进而无法完成启动流程,需要逐步排查配置和驱动层面的问题。

问题常见原因分析
出现该问题的核心原因是initramfs无法正确匹配到根设备的标识信息,常见的诱因主要有以下几类:
- 根分区的UUID或者LABEL发生变更,但是initramfs内的配置没有同步更新
- initramfs生成时没有包含根设备对应的存储驱动,导致无法识别硬件
- /etc/fstab或者启动引导配置文件中的根设备标识填写错误
- 存储硬件本身存在故障,导致设备标识无法被正常读取
排查步骤与解决方法
第一步:确认根分区的实际UUID和LABEL
首先需要通过Live CD或者救援模式启动系统,挂载根分区后查看实际的设备标识信息。可以使用blkid命令获取所有块设备的UUID和LABEL:
# 查看所有块设备的UUID和LABEL信息 blkid # 单独查看根分区对应的设备,假设根分区是/dev/sda2 blkid /dev/sda2
记录下根分区对应的UUID值,后续配置需要用到这个准确的信息。
第二步:检查启动引导配置
启动引导配置文件中的根设备参数需要和实际的UUID匹配,以GRUB2为例,配置文件通常位于/boot/grub/grub.cfg或者/etc/default/grub。需要检查linux或者linuxefi行后的root参数是否正确:
# 查看GRUB配置中的根设备参数 cat /etc/default/grub | grep GRUB_CMDLINE_LINUX # 正确的参数示例,UUID需要替换为实际值 # GRUB_CMDLINE_LINUX="root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
如果参数错误,修改/etc/default/grub后执行grub-mkconfig -o /boot/grub/grub.cfg更新引导配置。
第三步:检查/etc/fstab配置
/etc/fstab文件中的根分区挂载配置也需要和实际的UUID一致,打开该文件查看根分区的挂载项:
# 查看fstab配置 cat /etc/fstab # 根分区配置示例,UUID需要和实际值匹配 # UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults 0 1
如果这里的UUID和实际的不一致,修改为正确的值后保存即可。
第四步:重新生成initramfs镜像
确保UUID和引导配置都正确后,需要重新生成initramfs镜像,生成时需要保证包含对应的存储驱动。以Debian/Ubuntu系统为例,执行以下命令:
# 更新initramfs,替换x.x.x-x-generic为当前内核版本 update-initramfs -u -k x.x.x-x-generic # 如果不确定内核版本,可以加-all参数更新所有内核的initramfs update-initramfs -u -k all
如果是CentOS/RHEL系统,使用以下命令:
# 替换x.x.x-x.el7.x86_64为当前内核版本 dracut -f /boot/initramfs-x.x.x-x.el7.x86_64.img x.x.x-x.el7.x86_64 # 更新所有内核的initramfs dracut -f --regenerate-all
第五步:检查存储驱动是否加载
如果以上步骤都正确依旧报错,可能是initramfs没有包含对应的存储驱动。可以在生成initramfs时手动指定需要包含的驱动,以dracut为例,编辑/etc/dracut.conf.d/存储驱动.conf文件:
# 假设存储驱动是ahci和sd_mod,添加以下内容 add_drivers+="ahci sd_mod "
之后重新生成initramfs镜像即可。
验证与总结
完成所有修改后,重启系统观察启动流程是否正常。如果还是卡在检查环节,可以进入救援模式查看initramfs内的配置,解压initramfs镜像后检查init文件中的根设备配置是否正确。日常维护中如果需要调整分区,建议提前记录根分区的UUID,避免修改后忘记同步配置导致启动失败。
initramfsUUIDLABELwaiting_for_root_deviceLinux启动修改时间:2026-06-15 17:42:31