241123-UEFI模式下Linux-Windows双系统通过Grub设置选择开机系统

A. 准备工作: 将Linux系统作为默认启动系统

通过BIOS或EasyUEFI设置启动首选项为对应的Linux系统

  • A.1 通过BIOS选择对应的Linux系统

技嘉进入BIOS的按键

在这里插入图片描述

在这里插入图片描述

  • A.2 通过绿色向上箭头置顶Linux系统,下载地址: EasyUEFI
    在这里插入图片描述
  • A.1 与 A.2本质上执行的相同的操作

B. BIOS模式与UEFI模式的判断

在同时存在 /boot/grub2/grub.cfg/boot/efi/EFI/redhat/grub.cfg 的情况下,Linux 启动过程中系统会根据 系统的引导模式(BIOS 或 UEFI) 来选择哪个配置文件。以下是具体的行为分析:


1. 启动模式决定配置文件选择

  • BIOS 模式(Legacy Boot):
    如果系统在 BIOS 模式(Legacy 模式)下引导,它会使用 /boot/grub2/grub.cfg 作为 GRUB 的配置文件。
  • UEFI 模式
    如果系统在 UEFI 模式下引导,它会使用 /boot/efi/EFI/redhat/grub.cfg 作为 GRUB 的配置文件。

2. 启动过程的详细说明

BIOS 模式启动过程
  1. 系统固件(BIOS)从启动设备加载 MBR(主引导记录)。
  2. GRUB 阶段 1 位于 MBR 中,它会加载阶段 1.5 和阶段 2。
  3. GRUB 阶段 2 读取 /boot/grub2/grub.cfg 配置文件来显示引导菜单并启动系统。
UEFI 模式启动过程
  1. 系统固件(UEFI)直接从 EFI 分区加载启动项,例如 /boot/efi/EFI/redhat/grubx64.efi
  2. GRUB EFI 二进制文件会读取 /boot/efi/EFI/redhat/grub.cfg 配置文件来显示引导菜单并启动系统。

3. 两个配置文件的管理与区别

文件位置差异
  • /boot/grub2/grub.cfg
    • 适用于 BIOS 模式。
    • 位于标准的 /boot 分区。
  • /boot/efi/EFI/redhat/grub.cfg
    • 适用于 UEFI 模式。
    • 存储在 EFI 系统分区(通常挂载到 /boot/efi)。
内容差异
  • BIOS 模式的配置文件
    通常直接引用内核镜像和 initramfs 文件路径。
  • UEFI 模式的配置文件
    除了引用内核和 initramfs 文件,还可能包含 EFI 特定的配置,例如引导文件路径(/EFI/.../bootmgfw.efi)。

4. 如何确认当前使用的模式

可以通过以下方法检查系统是以 BIOS 还是 UEFI 模式启动的:

  1. 检查启动模式

    sudo ls /sys/firmware/efi
    
    • 如果目录存在,说明系统以 UEFI 模式启动。
    • 如果不存在,则是 BIOS 模式
  2. 检查当前 GRUB 配置文件
    根据启动模式,实际使用的 GRUB 配置文件通常是以下之一:

    • UEFI 模式:
      sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      
    • BIOS 模式:
      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      

5. 优化 GRUB 配置管理

如果系统支持 UEFI,推荐以下优化措施:

  • 统一管理配置文件
    只需要维护 grub.cfg 的一个版本,通常是 UEFI 模式下的 /boot/efi/EFI/redhat/grub.cfg
  • 定期更新 GRUB 配置
    当内核更新或引导选项发生变化时,重新生成 GRUB 配置:
    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    

如果有 BIOS 模式设备,则需要同时更新 /boot/grub2/grub.cfg


总结

  • 系统引导时,会根据启动模式选择对应的 GRUB 配置文件:
    • BIOS 模式:使用 /boot/grub2/grub.cfg
    • UEFI 模式:使用 /boot/efi/EFI/redhat/grub.cfg
  • 推荐确认系统运行的启动模式,并主要维护对应的 GRUB 配置文件。
  • 使用以下命令确保正确更新配置:
    # UEFI 模式
    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
    # BIOS 模式
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

C. 检查Grub是否识别Windows系统

  • 更新 GRUB 配置: 在 Linux 系统中,打开终端并运行以下命令:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

请添加图片描述

  • 检查生成的 GRUB 配置: 打开生成的 grub.cfg 文件,查找是否存在类似以下内容:
vim /boot/efi/EFI/redhat/grub.cfg

请添加图片描述

D. 查看Linux/Windows的启动项序号

D.1 ChatGPT的参考设置:实际中发现对应的序号不对

在这里插入图片描述

  • 如图所示:按照ChatGPT所说,Windows的启动序号应该是1,但实际是2

在这里插入图片描述

D.2 实际的序号顺序

在这里插入图片描述

E. 3步设置Windows为默认启动项

(base) [root@localhost lgk]# sudo grub2-set-default 2 🎯 此处设置与C.2截图一致
(base) [root@localhost lgk]# sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg 🎯 重新配置
Generating grub configuration file ...
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
(base) [root@localhost lgk]# sudo grub2-editenv list 🎯 检查是否生效
saved_entry=2
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet modprobe.blacklist=nouveau 
boot_success=1
boot_indeterminate=0

F. 3步设置Linux/RHEL为默认启动项

(base) [lgk@localhost ~]$ su
Password: 
(base) [root@localhost lgk]# sudo grub2-set-default 0 🎯 此处设置与C.2截图一致
(base) [root@localhost lgk]# sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg 🎯 重新配置
Generating grub configuration file ...
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
(base) [root@localhost lgk]# sudo grub2-editenv list 🎯 检查是否生效
saved_entry=0
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet modprobe.blacklist=nouveau 
boot_success=0
boot_indeterminate=0

请添加图片描述

G. 设置临时的Grub选择项,在其生效后会恢复成默认的启动选项

在这里插入图片描述
在 Linux 中,要临时设置默认的启动项而不更改永久设置,可以使用 grub2-reboot 命令,而不是直接使用 grub2-set-default。这是因为 grub2-reboot 会将默认的启动项设置为一次性生效,下一次启动后恢复为之前的默认项。

步骤

  1. 确定启动项编号
    首先,列出当前的 GRUB 启动项,查看你需要设置的启动项编号:

    grep menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
    

    输出示例:

    CentOS Linux (4.18.0-425.3.1.el8.x86_64) 8 (Core)
    CentOS Linux (4.18.0-425.19.2.el8.x86_64) 8 (Core)
    Rescue mode
    

    这些启动项按顺序编号,从 0 开始。例如:

    • 0: 第一个启动项
    • 1: 第二个启动项
    • 2: Rescue mode
  2. 临时设置默认启动项
    使用 grub2-reboot 命令设置一次性的默认启动项,例如:

    sudo grub2-reboot 2
    

    这会将默认启动项临时设置为编号为 2 的启动项(Rescue mode)。

  3. 重新启动系统
    设置完成后,重启系统以使更改生效:

    sudo reboot
    

注意事项

  • 如果需要永久更改默认启动项,请使用 grub2-set-default
    sudo grub2-set-default <编号>
    
    然后更新 GRUB 配置(RHEL 系统):
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  • grub2-reboot 不会修改永久设置,重启后系统会恢复到原来的默认启动项。

这种方法可以确保在测试特定内核或模式时,不会意外更改系统的永久默认启动项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuokLiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值