前提情景:
按照普通标准分区扩容的方式先对boot分区进行扩容,具体步骤也可以参考如下wiki,网上资料很多,这里不做赘述。
CentOS7 扩容任何目录(包括 /boot)小白都可以学会,每一步都有详细截图引导_51CTO博客_centos7根目录扩容
这种情况下,扩容完boot并重启系统后 可以看到boot分区是确实已经顺利完成扩容,使用上也没有问题。但遇到其他需要修改grub.cfg启动项的场景时,会发现系统开机后grub读取的还是原来的/dev/sda1下boot分区里的grub.cfg,无论是怎么修改当前的grub.cfg启动项,在开机启动页面依旧是不会生效。
原因分析:boot是标准分区的情况下,通过增加/dev/sdb磁盘对/boot分区扩容之后,系统启动项仍然是第一块sda磁盘,所以开机grub画面读取的还是原分区下的grub.cfg(切记,此时绝对不能格式化原来/boot对应得/dev/sda1分区时,否则系统将会无法启动,开机直接进入grub rescue>,修复方法参考问题1),这时,我们需要将启动项在bios中设置为第二块sdb磁盘才可以读取到最新的grub引导项。具体操作步骤如下:
此处以实际遇到的传统Legacy模式引导说明,具体UEFI可以参考如下步骤:
1、fdisk /dev/sdb 将该磁盘设置为boot分区标识*(输入a后,可以增加*,再次输入a后可以删除*)
(遇到告警提示可以忽略,不影响,原因是扩容后该磁盘重新挂载了/boot,我们可以先将该磁盘卸载,然后再操作);
2、grub2-install /dev/sdb 安装grub到sdb磁盘上
3、grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成grub.cfg引导文件
4、bios中调整第二块磁盘/dev/sdb为第一启动盘
5、此时 即使将原来/boot分区对应的/dev/sda1格式化也没有影响
其他说明:boot分区不能设置lvm方式。
问题1
修复方法:
参考:Linux 开机进入grub 命令行模式.docx
https://www.cnblogs.com/tanghu/p/10965019.html
使用cp -R /usr/lib/grub/i386-pc/* /mnt/sysimage/usr/lib/grub/i386-pc
然后使用chroot切换到/mnt/sysimage环境,继续运行
grub2-install /dev/sda,即可成功安装grub2
然后我们还需要重新生成配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
为了保险起见我重新运行了一次
# grub2-install /dev/sda
重起之后即可正常引导进入Linux系统