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

  1. 确定 Red Hat Upgrade Tool 已卸载 GRUB Legacy 软件包:

    ~]# yum remove grub
    注意

    卸载 grub2 软件包不会影响已安装的 GRUB Legacy 引导加载程序。

  2. 确保已安装 grub2 软件包。如果在升级到 RHEL 7 后 grub2 不在系统中,您可以运行以下命令手动安装它:

    ~]# yum install grub2
  3. 如果系统使用 EFI 引导,如果缺少以下软件包:

    ~]# yum install grub2-efi-x64 shim-x64

生成 GRUB 2 配置文件

这部分论述了如何在不删除原始 GRUB 传统配置 的情况下添加 GRUB 2 配置。如果 GRUB 2 无法正常工作,这个过程会保留 GRUB Legacy 配置。

  1. 使用以下选项之一 手动创建 /etc/default/grub 文件:

  2. 根据您的引导装载程序:

    1. 如果系统使用旧的 BIOS 引导,请安装 GRUB 2 指示安装设备:

      ~]# grub2-install /dev/<DEVICE_NAME> --grub-setup=/bin/true

      grub2-install 命令将 GRUB 镜像安装到 /boot/grub 目标目录中。

      GRUB -setup=/bin/true 选项可确保旧 GRUB Legacy 配置不会被删除。

    2. 如果系统使用 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 配置文件。

  3. 生成 GRUB 2 配置文件:

    1. 如果系统使用旧的 BIOS:

      ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    2. 如果系统使用 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 Legacy 配置需要保留;否则,系统可能无法引导。为了安全地测试 GRUB 2 配置,我们将 从 GRUB Legacy 启动 GRUB 2

注意

这部分只适用于旧的 BIOS 引导。如果是 EFI,则旧启动加载器和新启动加载器都有引导条目,您可以通过使用 EFI 固件设置选择引导条目来引导旧的旧 GRUB。

  1. 将新部分添加到 /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 可引导设备的名称。

  2. 重启系统。
  3. 出现 GRUB Legacy 菜单时,选择 GRUB 2 Test 条目。
  4. 当显示 GRUB 2 菜单时,请选择要引导的内核。
  5. 如果上述内容不起作用,则重新启动,且 不要 在下次引导时选择 GRUB 2 Test 条目。

在使用 BIOS 的系统中替换 GRUB Legacy 引导装载程序

如果 GRUB 2 成功:

  1. 将 GRUB Legacy 引导装载程序替换为 GRUB 2 引导装载程序:

    ~]# grub2-install /dev/sdX
  2. 删除旧的 GRUB Legacy 配置文件:

    ~]# rm /boot/grub/grub.conf
  3. 重启系统:

    ~]# reboot

在使用 EFI 的系统上删除 GRUB Legacy

如果 GRUB 2 成功:

  1. 检查 /boot/efi/EFI/redhat/ 目录的内容,并删除只与传统 GRUB 相关的过时文件:

    ~]# rm /boot/efi/EFI/redhat/grub.efi
    ~]# rm /boot/efi/EFI/redhat/grub.conf
  2. 如果您使用 Preupgrade Assistant 和 Red Hat Upgrade Tool 工具程序执行 RHEL 6 到 RHEL 7 的原位升级,请删除以上以 .preupg 后缀结尾的文件的备份副本:

    ~]# rm /boot/efi/EFI/redhat/*.preupg
  3. 使用 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

  4. 删除标识的引导条目。以下命令从上例中删除引导条目:

    ~]# efibootmgr -Bb 0001

    如果您有多个这样的引导条目,请删除所有确定的旧引导条目。

警告

从旧版本(如 RHEL6)升级到 RHEL7 后,在成功完成 GRUB Legacy bootloader 手动升级到 GRUB 2 之前,该操作系统不被支持。这是因为不支持在主版本间安装软件包。对于 RHEL 7,仅支持、开发和测试 GRUB 2;与 RHEL 6 的 GRUB Legacy 不同。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.