grub之bios & uefi

yuanheci 2025年09月07日 11次浏览

https://zhuanlan.zhihu.com/p/1902633201882609187

https://zhuanlan.zhihu.com/p/1906255362828506951


如何判断linux系统用的是是bios还是uefi?

✅ 总结:

  1. /sys/firmware/efi 是否存在 → 最快最准的方法
  2. efibootmgr 能用就一定是 UEFI
  3. lsblk/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模块:
image


bios和uefi是如何接力到grub的:

📌 BIOS 启动时 GRUB 的加载过程

  1. BIOS 固件初始化
    通电 → BIOS 完成自检(POST),初始化基本硬件(内存、显卡、键盘)。

  2. BIOS 读取 MBR (Master Boot Record)

  • BIOS 会从启动磁盘的第一个扇区(LBA 0,大小 512 字节)加载到内存,并执行。
  • 这个扇区里包含 分区表 + 引导程序(boot.img,GRUB 的第一个小片段)。
  • 因为 512 字节太小,boot.img 的功能非常有限,只能负责“加载下一步”。
  1. 加载 GRUB 的 core.img
  • boot.img 知道去哪里找 core.img(通常安装在磁盘的“空闲扇区”或者 /boot/grub/i386-pc/core.img)。
  • core.img 就是 GRUB 的第二阶段引导代码,功能更强大。
  1. core.img 初始化 GRUB 环境
  • 负责加载 GRUB 的模块(/boot/grub/i386-pc/*.mod)
  • 设置文件系统驱动,让 GRUB 能读 ext4、xfs 等分区。
  1. GRUB 正式运行
  • core.img 找到并解析 /boot/grub/grub.cfg 配置文件。
  • 进入 GRUB 菜单,等待用户选择内核(或默认倒计时自动进入)。
  1. 加载 Linux 内核
  • GRUB 把内核 (vmlinuz) 和 initramfs (initrd.img) 加载到内存。
  • 把控制权交给 Linux 内核 → 内核开始执行。

📊 和 UEFI 的对比

  • UEFI 模式:UEFI 固件本身就能读 FAT32 文件系统,直接去 EFI 分区找 grubx64.efi 并执行 → 跳过了 “MBR + core.img” 这层中间过程。

  • BIOS 模式:BIOS 没有文件系统的概念,只会加载第一个扇区 → 所以需要分阶段(boot.img → core.img → GRUB 完整模块)。