https://zhuanlan.zhihu.com/p/1902633201882609187
https://zhuanlan.zhihu.com/p/1906255362828506951
如何判断linux系统用的是是bios还是uefi?
✅ 总结:
/sys/firmware/efi
是否存在 → 最快最准的方法efibootmgr
能用就一定是 UEFIlsblk/fdisk -l
看有没有 EFI 分区也能辅助判断
┌─────────────────────────┐ ┌─────────────────────────┐
│ BIOS 启动 (Legacy) │ │ UEFI 启动 │
└─────────────────────────┘ └─────────────────────────┘
磁盘分区布局: 磁盘分区布局:
[MBR] + /boot 分区 [ESP 分区 (FAT32)] + /boot 分区
MBR (boot.img) ESP 分区 (/boot/efi/EFI/)
│ ├── Boot/bootx64.efi ← 默认启动文件
▼ ├── Ubuntu/grubx64.efi ← GRUB for UEFI
core.img (GRUB 第二阶段) └── Microsoft/Boot/bootmgfw.efi
│
▼
/boot/grub/i386-pc/ /boot/grub/x86_64-efi/
├── *.mod (GRUB 模块) ├── *.mod (GRUB 模块)
├── *.lst (支持列表) ├── *.lst (支持列表)
├── core.img (可能复制一份) └── grub.cfg
└── grub.cfg (配置文件)
bios下grub模块:
bios和uefi是如何接力到grub的:
📌 BIOS 启动时 GRUB 的加载过程
-
BIOS 固件初始化
通电 → BIOS 完成自检(POST),初始化基本硬件(内存、显卡、键盘)。 -
BIOS 读取 MBR (Master Boot Record)
- BIOS 会从启动磁盘的第一个扇区(LBA 0,大小 512 字节)加载到内存,并执行。
- 这个扇区里包含 分区表 + 引导程序(boot.img,GRUB 的第一个小片段)。
- 因为 512 字节太小,boot.img 的功能非常有限,只能负责“加载下一步”。
- 加载 GRUB 的 core.img
- boot.img 知道去哪里找 core.img(通常安装在磁盘的“空闲扇区”或者 /boot/grub/i386-pc/core.img)。
- core.img 就是 GRUB 的第二阶段引导代码,功能更强大。
- core.img 初始化 GRUB 环境
- 负责加载 GRUB 的模块(/boot/grub/i386-pc/*.mod)
- 设置文件系统驱动,让 GRUB 能读 ext4、xfs 等分区。
- GRUB 正式运行
- core.img 找到并解析 /boot/grub/grub.cfg 配置文件。
- 进入 GRUB 菜单,等待用户选择内核(或默认倒计时自动进入)。
- 加载 Linux 内核
- GRUB 把内核 (vmlinuz) 和 initramfs (initrd.img) 加载到内存。
- 把控制权交给 Linux 内核 → 内核开始执行。
📊 和 UEFI 的对比
-
UEFI 模式:UEFI 固件本身就能读 FAT32 文件系统,直接去 EFI 分区找 grubx64.efi 并执行 → 跳过了 “MBR + core.img” 这层中间过程。
-
BIOS 模式:BIOS 没有文件系统的概念,只会加载第一个扇区 → 所以需要分阶段(boot.img → core.img → GRUB 完整模块)。