You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

定制化RHEL6.7升级至7.4时dracut无法识别根分区求助

解决GRUB 0.97引导RHEL7.4内核时dracut无法找到LVM根分区的问题

我之前碰到过一模一样的场景——用老版本GRUB引导跨大版本的RHEL内核,LVM根分区识别失败的问题。核心原因是RHEL7的dracut initramfs默认不会自动识别你的自定义LVM卷组信息,加上GRUB 0.97的参数传递方式和后续版本有差异,导致内核启动时找不到根分区。下面是一步步的解决步骤:

第一步:修正GRUB启动参数(最可能解决问题)

GRUB 0.97的配置文件是/boot/grub/grub.conf,你需要在RHEL7.4的启动条目里补充LVM相关的强制参数,确保dracut能定位到你的根卷:

  1. 编辑GRUB配置文件:
    vi /boot/grub/grub.conf
    
  2. 找到你添加的RHEL7.4启动条目,比如类似这样的结构:
    title RHEL 7.4 Upgrade
      root (hd0,0)  # 这里是你的/boot分区对应的GRUB设备,别和系统根分区搞混
      kernel /Upgrade/isolinux/vmlinuz root=/dev/mapper/stats-rootvol ro
      initrd /Upgrade/isolinux/initrd.img
    
  3. 修改kernel行,添加关键的LVM引导参数,修改后应该是:
    kernel /Upgrade/isolinux/vmlinuz root=/dev/mapper/stats-rootvol ro rd.lvm.vg=stats rd.driver.pre=dm_mod rd.lvm.lv=stats/rootvol
    
    各参数的作用:
    • rd.lvm.vg=stats:强制dracut激活名为stats的LVM卷组
    • rd.driver.pre=dm_mod:提前加载设备映射模块,确保LVM能被识别
    • rd.lvm.lv=stats/rootvol:明确指定要挂载的逻辑卷

第二步:如果参数修正无效,生成适配你的LVM环境的自定义initrd

官方RHEL7.4的initrd是通用版本,可能没有包含你的特定LVM卷组信息或必要的驱动模块。你可以生成一个适配的initrd:

  1. 确保你能访问RHEL7.4的相关工具(可以挂载RHEL7.4 ISO到本地,或者安装dracut包)
  2. 运行以下命令生成自定义initrd(替换内核版本为你的vmlinuz对应的版本,比如3.10.0-693.el7.x86_64):
    dracut --add-drivers "dm_mod dm_mirror dm_log dm_snapshot" --include /etc/lvm /etc/lvm /Upgrade/isolinux/custom-initrd.img 3.10.0-693.el7.x86_64
    
  3. 修改GRUB配置里的initrd行,指向这个自定义镜像:
    initrd /Upgrade/isolinux/custom-initrd.img
    

第三步:用UUID替代设备路径(避免名称识别问题)

如果你的LVM设备名称在启动时可能被识别错误,可以用UUID来指定根分区,更可靠:

  1. 查看根卷的UUID:
    blkid /dev/mapper/stats-rootvol
    
    输出会类似:/dev/mapper/stats-rootvol: UUID="abc123-def4-5678-90gh-ijklmnopqrst" TYPE="xfs"
  2. 同时查看LVM卷组的UUID:
    vgdisplay stats | grep UUID
    
  3. 修改GRUB的kernel行,用UUID指定:
    kernel /Upgrade/isolinux/vmlinuz root=UUID=abc123-def4-5678-90gh-ijklmnopqrst ro rd.lvm.uuid=lvm-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rd.driver.pre=dm_mod
    

额外排查技巧

如果还是失败,在dracut的紧急shell里手动排查:

  • 加载LVM模块:modprobe dm_mod
  • 激活卷组:vgchange -ay stats
  • 如果能成功激活,说明是initrd里缺少模块或参数,回到第二步重新生成initrd;如果激活失败,检查卷组是否损坏或磁盘连接问题

内容的提问来源于stack exchange,提问作者joe

火山引擎 最新活动