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 模式启动过程:
- 系统固件(BIOS)从启动设备加载 MBR(主引导记录)。
- GRUB 阶段 1 位于 MBR 中,它会加载阶段 1.5 和阶段 2。
- GRUB 阶段 2 读取
/boot/grub2/grub.cfg
配置文件来显示引导菜单并启动系统。
UEFI 模式启动过程:
- 系统固件(UEFI)直接从 EFI 分区加载启动项,例如
/boot/efi/EFI/redhat/grubx64.efi
。 - 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 模式启动的:
-
检查启动模式:
sudo ls /sys/firmware/efi
- 如果目录存在,说明系统以 UEFI 模式启动。
- 如果不存在,则是 BIOS 模式。
-
检查当前 GRUB 配置文件:
根据启动模式,实际使用的 GRUB 配置文件通常是以下之一:- UEFI 模式:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- BIOS 模式:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- UEFI 模式:
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
。
- BIOS 模式:使用
- 推荐确认系统运行的启动模式,并主要维护对应的 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
会将默认的启动项设置为一次性生效,下一次启动后恢复为之前的默认项。
步骤
-
确定启动项编号
首先,列出当前的 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
-
临时设置默认启动项
使用grub2-reboot
命令设置一次性的默认启动项,例如:sudo grub2-reboot 2
这会将默认启动项临时设置为编号为
2
的启动项(Rescue mode
)。 -
重新启动系统
设置完成后,重启系统以使更改生效:sudo reboot
注意事项
- 如果需要永久更改默认启动项,请使用
grub2-set-default
:
然后更新 GRUB 配置(RHEL 系统):sudo grub2-set-default <编号>
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-reboot
不会修改永久设置,重启后系统会恢复到原来的默认启动项。
这种方法可以确保在测试特定内核或模式时,不会意外更改系统的永久默认启动项。