26.8. 从 GRUB Legacy 升级到 GRUB 2
当您从版本 6 原位升级到 Red Hat Enterprise Linux(RHEL)到 7 时,从 GRUB Legacy
升级到 GRUB 2
不会自动进行,但应该手动进行。执行 GRUB 升级,原因如下:
-
在 RHEL 7 及更新的版本中,
GRUB Legacy
不再被维护,也不会接收更新。 -
GRUB Legacy
无法在没有/boot/
目录的系统上引导。 -
GRUB 2
具有更多功能且更为可靠。 -
GRUB 2
支持更多硬件配置、文件系统和驱动器布局。
在操作系统原位升级后,从 GRUB Legacy 升级到 GRUB 2
从 GRUB Legacy 升级到 GRUB 2
确定 Red Hat Upgrade Tool 已卸载 GRUB Legacy 软件包:
~]# yum remove grub
注意卸载 grub2 软件包不会影响已安装的 GRUB Legacy 引导加载程序。
确保已安装 grub2 软件包。如果在升级到 RHEL 7 后 grub2 不在系统中,您可以运行以下命令手动安装它:
~]# yum install grub2
如果系统使用 EFI 引导,如果缺少以下软件包:
~]# yum install grub2-efi-x64 shim-x64
生成 GRUB 2 配置文件
这部分论述了如何在不删除原始 GRUB
配置。如果 传统配置
的情况下添加 GRUB 2GRUB 2
配置。
无法正常工作,这个过程会保留 GRUB
Legacy
使用以下选项之一
手动创建 /etc/default/grub
文件:-
创建
/etc/default/grub
文件。详情请查看 如何在 Red Hat Enterprise Linux 7? 文档中重新创建缺少的 /etc/default/grub 文件。 -
从类似 Red Hat Enterprise Linux 7 系统复制
/etc/default/grub
文件,并相应地调整 文件。
-
创建
根据您的引导装载程序:
如果系统使用旧的 BIOS 引导,请安装
GRUB 2
指示安装设备:~]# grub2-install /dev/<DEVICE_NAME> --grub-setup=/bin/true
grub2-install
命令将 GRUB 镜像安装到/boot/grub
目标目录中。GRUB
-setup=/bin/true
选项可确保旧GRUB Legacy
配置不会被删除。如果系统使用 EFI 引导,请为 shim 引导装载程序创建一个引导条目,并更改
BootOrder
变量以使固件引导 GRUB 2 通过shim
:~]# efibootmgr -c -L 'Red Hat Enterprise Linux 7' -d /dev/device_name -p 1 -l '\EFI\redhat\shimx64.efi'
使用可引导设备文件替换 /dev/device_name。
警告请注意配置文件扩展的不同:
-
.conf
用于GRUB
-
.cfg
用于GRUB 2
下一步中请勿错误地覆盖旧的
GRUB
配置文件。生成
GRUB 2
配置文件:如果系统使用旧的 BIOS:
~]# grub2-mkconfig -o /boot/grub2/grub.cfg
如果系统使用 EFI:
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
注意有关自定义生成的
GRUB 2
配置文件,请参阅 第 26.5 节 “自定义 GRUB 2 配置文件”。您应该在/etc/default/grub
中进行更改,而不是直接在/boot/grub2/grub.cfg 中
进行更改。否则,每次重新生成文件时,/boot/grub2/grub.cfg
中的更改都会丢失。
使用 GRUB Legacy 引导装载程序测试 GRUB 2 仍然安装
这部分论述了如何 在不删除 GRUB
Legacy 配置的情况下测试 GRUB
2。在验证 GRUB 2 配置之前,
配置需要保留;否则,系统可能无法引导。为了安全地测试 GRUB
LegacyGRUB 2
配置,我们将 从 GRUB
Legacy 启动 GRUB 2
。
这部分只适用于旧的 BIOS 引导。如果是 EFI,则旧启动加载器和新启动加载器都有引导条目,您可以通过使用 EFI 固件设置选择引导条目来引导旧的旧 GRUB。
将新部分添加到
/boot/grub/grub.conf
:对于具有独立
/boot
分区的系统,请使用:title GRUB 2 Test root (hd0,0) kernel /grub2/i386-pc/core.img boot
将 (hd0,0)替换为
GRUB Legacy
可引导设备的名称。对于没有独立
/boot
分区的系统,请使用:title GRUB 2 Test root (hd0,0) kernel /boot/grub2/i386-pc/core.img boot
将 (hd0,0)替换为
GRUB Legacy
可引导设备的名称。- 重启系统。
-
出现
GRUB Legacy
菜单时,选择GRUB 2 Test
条目。 -
当显示
GRUB 2
菜单时,请选择要引导的内核。 -
如果上述内容不起作用,则重新启动,且 不要 在下次引导时选择
GRUB 2 Test
条目。
在使用 BIOS 的系统中替换 GRUB Legacy 引导装载程序
如果 GRUB 2 成功:
将 GRUB Legacy 引导装载程序替换为 GRUB 2 引导装载程序:
~]# grub2-install /dev/sdX
删除旧的 GRUB Legacy 配置文件:
~]# rm /boot/grub/grub.conf
重启系统:
~]# reboot
在使用 EFI 的系统上删除 GRUB Legacy
如果 GRUB 2 成功:
检查
/boot/efi/EFI/redhat/
目录的内容,并删除只与传统 GRUB 相关的过时文件:~]# rm /boot/efi/EFI/redhat/grub.efi ~]# rm /boot/efi/EFI/redhat/grub.conf
如果您使用 Preupgrade Assistant 和 Red Hat Upgrade Tool 工具程序执行 RHEL 6 到 RHEL 7 的原位升级,请删除以上以
.preupg
后缀结尾的文件的备份副本:~]# rm /boot/efi/EFI/redhat/*.preupg
使用
efibootmgr 命令查找引用
文件的旧引导条目:\EFI\redhat\grub.efi
~]# efibootmgr -v | grep '\\EFI\\redhat\\grub.efi'
输出示例:
Boot0001* Linux HD(1,GPT,542e410f-cbf2-4cce-9f5d-61c4764a5d54,0x800,0x64000)/File(\EFI\redhat\grub.efi)
本例中的条目编号为
0001
。删除标识的引导条目。以下命令从上例中删除引导条目:
~]# efibootmgr -Bb 0001
如果您有多个这样的引导条目,请删除所有确定的旧引导条目。
从旧版本(如 RHEL6)升级到 RHEL7 后,在成功完成 GRUB Legacy bootloader 手动升级到 GRUB 2 之前,该操作系统不被支持。这是因为不支持在主版本间安装软件包。对于 RHEL 7,仅支持、开发和测试 GRUB 2;与 RHEL 6 的 GRUB Legacy 不同。