在Centos 7中的根VG上使用"vgrename"后,我很难更新grub2。我成功地运行了"vgrename",然后用VG名称编辑了/etc/fstab,然后用新的VG名称在/etc/default/GRUB中编辑了"GRUB_CMDLINE_LINUX=",然后尝试运行grub2 mkconfig。就在这一点上,我得到了错误:
# grub2-mkconfig
/usr/sbin/grub2-probe: error: failed to get canonical path of ‘/dev/mapper/centos_prod--stor01-root’.
它所指向的规范路径是旧的VG名称。我不理解这一点,因为我认为在/etc/default/grub中更新VG名称会解决这个问题吗?感谢任何帮助:)
我不确定centos是否需要所有步骤,或者是否需要更多步骤,但我希望以下有帮助。
对于SLES 12 SP1,在执行vgrename或lvrename后,我不得不修改以下文件:
- /etc/default/grub
- /etc/sysconfig/bootloader
- /etc/fstab
在/etc/default/grub中,我还添加了以下行:
- GRUBDEVICE=/dev/VGname/LVname
- GRUB_DEVICE_UUID=e35b6f76-15b7-44ef-8bea-cd2c1ef8a547
之后,您必须使用grub2mkconfig重新制作grub-config;但是,如果您正在修改设备路径,那么这个脚本似乎有问题。我不得不修改其中的一行(159对我来说,应该很近),说:
- GRUBDEVICE="`${GRUB_probe}--target=DEVICE/`"||true
关键区别在于true部分。否则,grub2-probe将抛出一个错误,传播到grub2-mkconfig,因为它会找到当前设备,而不是新设备所在的位置
我不只是运行grub2mkconfig,而是运行mkinitrd,它运行在这个和dracut之间,它允许内核加载正确的文件系统来启动。
这种烦恼是由于grub的错误假设造成的。
如果我运行vgrename centos7 vg_centos7
来更改卷组的名称,则:
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos7-root 6.5G 1.3G 5.3G 20% /
# ls /dev/mapper
control vg_centos7-root vg_centos7-swap
已装入卷的名称和/dev/mapper
符号链接不再匹配。在这种情况下,grub2使用当前装载的卷的名称(centos7-root),当它在/dev/mapper/
中找不到它时(因为它刚刚被重命名为vg_centos-root),它就会失败。
您可以重新装载并chroot来解决此问题,如下所示:
mount /dev/mapper/vg_centos-root /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys/ /mnt/sys
mount --bind /run/ /mnt/run
mount --bind /boot/ /mnt/boot
cat << EOF | chroot /mnt
grub-mkconfig --output=/boot/grub/grub.cfg
exit
EOF
umount /mnt/boot
umount /mnt/run
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt
我的方法在CentOS 7和8中运行良好。
当前vg和lvs
# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 4 0 wz--n- <325.97g 4.00m
# lvs
LV VG Attr LSize Pool
root cl -wi-ao---- <46.57g
计划将vg名称从cl更改为vg_sys和将lv名称从root更改为lv_root
重命名vg和lv名称
vgrename -v cl vg_sys
lvrename /dev/cl/root /dev/vg_sys/lv_root
然后修改/etc/fstab,/boot/grub2/grub.cfg、/etc/default/grub和/boot/grub2/grubenv
sed -i 's/cl-root/vg_sys-lv_root/g' /etc/fstab
sed -i 's/cl-root/vg_sys-lv_root/g' /boot/grub2/grub.cfg
sed -i 's/cl/root/vg_sys/lv_root/g' /boot/grub2/grub.cfg
sed -i 's/cl-root/vg_sys-lv_root/g' /etc/default/grub
sed -i 's/cl/root/vg_sys/lv_root/g' /etc/default/grub
sed -i 's/cl-root/vg_sys-lv_root/g' /boot/grub2/grubenv
sed -i 's/cl/root/vg_sys/lv_root/g' /boot/grub2/grubenv
确保所有四个文件都已正确修改。操作系统重新启动后,它和您计划的一样工作。