一、问题背景
现象描述
系统重启后无法正常启动,进入 GRUB 命令行界面,手动引导系统后进入 Emergency Mode(紧急模式)。

核心报错
1. Dependency failed for Initrd Root File System:无法挂载根文件系统
2. 系统根分区采用 LVM 逻辑卷格式,/boot 为独立普通分区
根本原因
系统 initramfs 镜像缺少 LVM 依赖的 `dm-mod` 内核模块,启动阶段无法识别 LVM 逻辑卷,导致根分区挂载失败。
二、环境信息
- 操作系统:CentOS 7.9.2009 x86_64
- 分区架构:
1. /dev/sda1:独立 /boot 分区,文件系统 XFS
2. /dev/sda2:LVM 物理卷
3. 卷组:centos
4. 根分区:/dev/mapper/centos-root(LVM 逻辑卷)
5. 交换分区:/dev/mapper/centos-swap
三、完整修复操作步骤
步骤1:GRUB 手动引导系统
系统开机进入 grub> 命令行,执行以下命令手动引导:
set root=(hd0,msdos1)
linux /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro
initrd /initramfs-3.10.0-1160.el7.x86_64.img
boot
执行后系统进入紧急模式。
步骤2:紧急模式激活 LVM 卷组、挂载根分区
# 扫描系统 LVM 卷组
lvm vgscan
# 激活所有 LVM 卷组
lvm vgchange -ay
# 将 LVM 根分区挂载到临时目录 /sysroot
mount /dev/mapper/centos-root /sysroot
# 验证挂载(输出 bin、etc、home 等目录即为正常)
ls /sysroot/
步骤3:绑定系统必要目录至 chroot 环境
chroot 环境默认无法识别硬件设备,需绑定 `/dev` `/sys` `/proc`:
mount -o bind /dev /sysroot/dev
mount -o bind /sys /sysroot/sys
mount -o bind /proc /sysroot/proc
步骤4:进入 chroot 环境,挂载 /boot 分区
# 切换至原系统环境
chroot /sysroot
# 挂载独立 boot 分区
mount /dev/sda1 /boot
步骤5:重建 initramfs 镜像(核心修复)
# 查看当前内核版本
uname -r
# 重建内核启动镜像,加入 LVM 依赖模块 dm-mod
dracut -f --add-drivers "dm-mod" /boot/initramfs-3.10.0-1160.el7.x86_64.img 3.10.0-1160.el7.x86_64
步骤6:重新生成 GRUB 启动配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
> 说明:执行过程出现 `Failed to connect to lvmetad` 为警告,不影响系统正常启动。
步骤7:退出环境并重启系统
# 退出 chroot 环境
exit
# 重启服务器
reboot
四、操作中遇到的问题及解决方案
问题1:GRUB 提示 unknown filesystem
- 现象:切换分区后提示文件系统未知
- 原因:选错 /boot 分区
- 解决:依次测试 (hd0,msdos1)、(hd0,msdos2),`/dev/sda1` 对应 (hd0,msdos1) 为正确 boot 分区。
问题2:chroot 内执行 mount /dev/sda1 /boot 提示:no such device
- 现象:找不到 /dev/sda1 设备
- 原因:未将宿主机 `/dev` `/sys` `/proc` 绑定到 /sysroot
- 解决:执行 `mount -o bind` 绑定对应目录后再进入 chroot。
问题3:dracut 提示 Failed to install module lvm
- 现象:加载 lvm 模块失败
- 原因:LVM 依赖内核模块为 `dm-mod`,并非 lvm
- 解决:将参数改为 `--add-drivers "dm-mod"`。
问题4:grub2-mkconfig 警告 Failed to connect to lvmetad
- 现象:无法连接 lvmetad 服务
- 原因:lvm2-lvmetad 服务未开机自启
- 后续优化(系统正常启动后执行):
systemctl enable lvm2-lvmetad
systemctl start lvm2-lvmetad
grub2-mkconfig -o /boot/grub2/grub.cfg
五、修复后验证(系统正常登录后执行)
# 查看分区挂载状态
mount | grep -E "/ |/boot"
# 查看 LVM 卷组状态
vgs
# 检查 initramfs 是否包含 dm-mod 模块
lsinitrd /boot/initramfs-$(uname -r).img | grep dm-mod

六、预防措施
1. 内核升级、系统大版本更新后,必须重新执行 `dracut` 重建 initramfs;
2. 定期备份 `/etc/fstab`、`/boot/grub2/grub.cfg` 关键配置文件;
3. LVM 环境保持 `lvm2-lvmetad` 服务开机自启;
4. 服务器分区使用 LVM 时,建议单独划分 /boot 分区,规避整体故障风险。
七、问题总结
本次故障核心:**LVM 环境下 initramfs 缺少 dm-mod 驱动**,系统启动无法识别 LVM 逻辑卷。
修复核心流程:
GRUB手动引导 → 紧急模式激活LVM → 挂载根分区 → 绑定系统目录 → chroot环境 → 重建initramfs → 重生成GRUB配置 → 重启验证。






文章评论