boot 方式和分区方案的最佳配合

  1. uefi+gpt
  2. bios+mbr

BIOS+MBR

[!NOTE] MBR (主引导记录)的整体详细结构简单介绍就是:主引导代码+分区表+post-mbr gap

单纯靠 主引导代码 无法完整引导系统,所以要有 post-mbr gap (MBR 与第一个磁盘分区之间的间隙)来辅助引导系统,可以说是一个过渡用的。

  • 第一阶段就是主引导代码,主要作用就是定位和加载下一阶段的引导
  • 第 1.5 阶段就是(post-mbr gap 做的)主要作用就是理解存储阶段 2 引导加载程序的文件系统(例如 ext 4、NTFS 等)所需的基本驱动程序或代码, 就是可能也有一部分加载程序在文件系统(grub additional code)中,这样就可以读取文件 (一些加载程序文件从而辅助 boot)
  • 第 2 阶段就是引导加载程序了(bootloader boot manager)

到此,基本就可以引导完系统了,然后操作系统就加载在内存中了,控制权就交给系统内核了

UEFI+GPT

这个基本就没有什么,就主要在分区时,有个 ESP 分区 就可以了,这个引导程序(bootloader boot manager)就存储在 ESP 分区

一些 linux 中的命令:

  1. 下载配置文件
    grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH  
    
  2. 生成配置文件并放置于/boot 分区(这个 ESP 分区)
    grub-mkconfig -o /boot/grub/grub.cfg 
    
  3. 有多系统的记得下载 os-prober, 并 vim /etc/default/grub 添加 GRUB_DISABLE_OS_PROBER=false 这一行

BIOS+GPT

首先声明,这种情况,你要添加一个 1 M-2 M 的 BIOS 分区才行

理由

gpt 磁盘本身第一个扇区(磁盘的前 512 个字节)就是一个 protective mbr 分区,这是为了向只能 BIOS 引导的旧机子兼容而产生的。

讲述 protective mbr 的文章。大致重要内容如下:

大概内容说白了就是为了兼容和保护 gpt 磁盘

==省流: 就是这个 BIOS boot 分区相当于 mbr 的 post-mbr gap 用来辅助 bootloader 的加载的==

第 1 阶段引导加载程序加载 BIOS 引导分区

  • 由于系统使用的是 GPT 分区方案,因此不存在 后 MBR 间隙(MBR 和第一个分区之间的空间),MBR 系统通常会使用该间隙来存储其他引导加载程序代码(如 GRUB Stage 1.5)。
  • 相反,在磁盘上创建了一个专用的 BIOS 引导分区(通常大小为 1-2 MB)。此分区不包含文件系统,也不用于存储常规文件 - 它仅用于保存 GRUB Stage 1.5
  • 来自保护性 MBR 的 第 1 阶段代码定位 BIOS 引导分区并从中加载 第 1.5 阶段引导加载程序代码。

GRUB Stage 1.5 处理文件系统访问

  • Stage 1.5 是至关重要的一步,因为它包含 GRUB 理解磁盘文件系统(例如 ext 4、Btrfs 等)所需的驱动程序和代码。
  • 加载 BIOS 启动分区后,Stage 1.5 现在可以读取磁盘中的文件,例如 GRUB 配置和Stage 2 引导加载程序代码,这些代码存储在 /boot/grub/ 中。

Stage 2 引导加载程序从 /boot/grub 加载

  • Stage 1.5 加载后,它会找到Stage 2 引导加载程序,这些代码存储在其中一个分区上的 /boot/grub/ 目录中。
  • Stage 2 是功能齐全的 GRUB 引导加载程序。它:
  • 如果您安装了多个操作系统(双启动设置),则显示 GRUB 启动菜单
  • 允许您选择要启动的操作系统或内核。
  • 将所选操作系统的 内核 加载到内存中。