RHEL

RHEL 9 LVM system.devices 问题导致虚拟机无法启动

问题描述

在深信服超融合虚拟机中,如果运行 RedHat Linux 9 系列及以上操作系统,使用第三方备份软件进行无代理备份后恢复系统,或者跨集群迁移虚拟机,大概率出现系统无法正常启动的问题。

原因分析

从 RHEL 9 开始,默认启用了 LVM 设备文件功能。system.devices 文件控制 LVM 设备的可见性和可用性,如果物理卷(PV)不在该文件中,LVM 将不会使用它。

当系统通过备份恢复或跨集群迁移后,物理卷的 ID 会发生变更,导致原有的 system.devices 文件无法正确识别设备,从而无法加载逻辑卷组。

官方文档参考:LVM 设备文件配置

解决方法

步骤 1:进入救援模式

使用安装光盘或 ISO 启动系统,选择进入救援模式,选择选项 3 进入 SHELL。

步骤 2:切换到系统根目录

在 SHELL 中按 1 继续挂载系统,然后执行:

chroot /mnt/sysroot

步骤 3:删除 system.devices 文件

rm -f /etc/lvm/devices/system.devices

步骤 4:重启系统

exit
reboot

步骤 5:重新创建 system.devices 文件

系统正常启动后,执行以下命令重新生成 system.devices 文件:

vgimportdevices -a

验证

通过对比 system.devices 文件的前后变化,可以看到 IDNAME 字段已经更新:

--- system.devices
+++ system.devices.bak
2,3c2,3
< # Created by LVM command vgimportdevices pid 167429 at Fri Jan 17 13:34:50 2025
< # HASH=3025863125
---
> # Created by LVM command vgs pid 131552 at Wed Dec 11 22:03:44 2024
> # HASH=364014683
5,6c5,6
< VERSION=1.1.1
< IDTYPE=sys_serial IDNAME=1624319849518-0 DEVNAME=/dev/vda3 PVID=W4s53DYkIKMtYj6TdOxizXKwzrqVfx4L PART=3
---
> VERSION=1.1.5
> IDTYPE=sys_serial IDNAME=7894377599278-0 DEVNAME=/dev/vda3 PVID=W4s53DYkIKMtYj6TdOxizXKwzrqVfx4L PART=3

可以看到 IDNAME7894377599278-0 变更为 1624319849518-0,这正是导致系统无法识别设备的原因。

预防措施

对于频繁需要备份恢复或迁移的 RHEL 9 系统,可以考虑以下预防措施:

  1. 在系统中禁用 LVM 设备文件功能(根据实际需求评估风险)
  2. 在备份前执行 vgexportdevices 导出设备文件
  3. 恢复或迁移后务必检查并重建 system.devices 文件

参考资料