grub-probe报错“disk lvmid/xxx not found”的原因、解决方法及相关参考文件咨询
grub-probe报错“disk lvmid/xxx not found”的原因、解决方法及相关参考文件咨询
嘿,我来帮你拆解这个问题——你已经成功切换到thin LV(ubuntu-tlv)作为根分区正常启动了,但grub-probe还是报错找不到对应的lvmid,这确实有点恼人,咱们一步步来分析:
一、报错原因分析
结合你的操作步骤和系统信息,我判断可能是这几个原因导致的:
- Grub-probe的设备查找缓存残留:grub-probe会依赖系统的设备缓存信息,虽然你已经切换了根LV,但它可能还在尝试读取旧的ubuntu-lv相关的LVM元数据路径,没有及时更新到新的thin LV的信息。
- udev设备链接未同步更新:系统
/dev/disk/by-id/目录下的LVM符号链接可能没有正确更新,grub-probe优先通过这些id路径查找设备,旧的链接指向了已不再使用的设备路径,导致报错。 - Grub环境变量或配置缓存未完全刷新:虽然你生成了新的
grub.cfg,但grub-probe可能读取的是grubenv等环境变量文件里的旧配置,或者系统内部的设备映射缓存没同步。
二、具体解决方法
你可以按顺序尝试下面的方案:
方案1:刷新udev设备缓存
udev负责管理系统设备的符号链接,先让它重新生成设备信息:
udevadm trigger udevadm settle
完成后再运行grub-probe --target=fs_uuid /测试是否还报错。
方案2:检查并修复/dev/disk/by-id/下的LVM链接
先查看当前的LVM设备id链接:
ls -l /dev/disk/by-id/ | grep LVM
找到对应ubuntu--vg-ubuntu--tlv的链接,确认它指向正确的/dev/mapper/ubuntu--vg-ubuntu--tlv。如果有旧的、指向无效路径的链接,可以手动删除,然后再运行方案1的udev命令重新生成。
方案3:更新Grub环境变量
先查看当前Grub的环境变量:
grub-editenv - list
如果里面有旧的GRUB_DEVICE或GRUB_DEVICE_UUID指向原来的ubuntu-lv,更新成当前thin LV的信息:
# 获取当前thin LV的设备路径和UUID tlv_dmpath=$(dmsetup info -c --noheadings -o name ubuntu-vg/ubuntu-tlv) tlv_blkid=$(blkid -o value -s UUID /dev/ubuntu-vg/ubuntu-tlv) # 更新Grub环境变量 grub-editenv - set GRUB_DEVICE="/dev/mapper/${tlv_dmpath}" grub-editenv - set GRUB_DEVICE_UUID="${tlv_blkid}"
更新后重新运行update-grub,再测试grub-probe。
方案4:确认/etc/fstab配置正确
检查/etc/fstab里根分区的挂载配置,确保使用的是当前thin LV的UUID或正确的设备路径,而不是旧的lvmid相关路径。可以用blkid /dev/mapper/ubuntu--vg-ubuntu--tlv获取正确UUID,然后更新fstab(如果之前配置有误的话)。
三、grub-probe检查lvmid时参考的文件
grub-probe在解析lvmid时,主要会读取这些文件和目录的内容:
/etc/default/grub以及/etc/default/grub.d/下的配置文件:比如你创建的ubuntu-tlv.cfg,这里的GRUB_DEVICE等设置会引导它查找设备的方向。/dev/disk/by-id/目录:里面的LVM相关符号链接是grub-probe识别lvmid的关键路径。/run/udev/data/下的udev元数据文件:存储了设备的id、映射关系等核心信息。- LVM元数据文件:
/etc/lvm/backup/和/etc/lvm/archive/下的文件,记录了卷组、逻辑卷的详细信息,grub-probe会读取这些来解析lvmid对应的设备。 /boot/grub/grubenv:Grub的环境变量文件,里面的设备配置可能被grub-probe引用。
备注:内容来源于stack exchange,提问作者teityura
相关产品推荐
相关产品推荐

