我想详细了解 grub2 在 MBR 分区磁盘和 GPT 分区磁盘上的工作原理,也就是说,在每种情况下,所有分区都需要什么,会创建哪些文件等等,以及在启动任何操作系统时,在这两种情况下如何访问/修改这些分区。如果有人能在这方面指导我,那将很有帮助。
答案1
实际上有四种常见(或至少半常见)的情况:
- MBR 上的 BIOS 模式 GRUB-- 这是传统的 PC 配置。其中,GRUB 分为多个阶段。第一阶段位于主引导记录 (MBR) 的前 440 个字节中。然后,第一阶段加载并执行 GRUB 的第二阶段,该阶段通常位于紧跟 MBR 之后的扇区中。大多数 MBR 磁盘上的这个空间是正式未分配的,因此将 GRUB 代码放在那里有点冒险;但通常可以正常工作。其他代码驻留在文件中,通常位于
/boot/grub
用于安装 GRUB 的操作系统的目录中。此配置可能存在多种变体。例如,将 GRUB 第一阶段放在分区引导记录 (PBR;分区的第一个扇区) 中曾经很流行,但如今已很少见,事实上,我不能 100% 确定现代 GRUB 2 是否仍然支持此选项。 - GPT 上的 BIOS 模式 GRUB-- 在此变体中,GRUB 的第一阶段仍驻留在 MBR 中(对于 GPT 而言,它被称为保护性 MBR,主要用于阻止不支持 GPT 的工具弄乱磁盘)。但是,GPT 磁盘上 MBR 后面的扇区是 GPT 数据结构,因此 GRUB 无法使用。相反,GRUB 2 依赖于称为BIOS 启动分区,其 GPT 类型代码为 21686148-6449-6E6F-744E-656564454649(在基于 libparted 的工具中设置了“bios_grub 标志”,或在 GPT fdisk 中键入 EF02)。其他文件驻留在目录中
/boot/grub
,与 BIOS/MBR GRUB 安装一样。 - MBR 上的 EFI 模式 GRUB-- 在此配置中,第一个 GRUB 代码驻留在存储在EFI 系统分区(ESP;MBR 磁盘上的类型代码为 0xEF)。此文件可以任意命名,但通常在以发行版命名
grubx64.efi
的子目录中调用EFI
(例如EFI/ubuntu/grubx64.efi
),有时EFI/BOOT/bootx64.efi
(“后备文件名”,最常用于可启动的外部媒体,如 USB 驱动器)。与 BIOS 模式 GRUB 一样,其他配置和驱动程序文件位于其他地方,通常位于/boot/grub
安装操作系统中;但是,某些发行版将这些文件与主 GRUB 二进制文件一起放在 ESP 上。请注意,这是四种配置中最不常见的,因为很少有基于 EFI 的计算机从 MBR 磁盘启动。 - GPT 上的 EFI 模式 GRUB-- 此配置与 MBR 上的 EFI 模式类似,不同之处在于 ESP 的类型代码为 C12A7328-F81F-11D2-BA4B-00A0C93EC93B(在基于 libparted 的工具上设置“启动标志”,或在 GPT fdisk 中键入 EF00)。随着从 BIOS 到 EFI 的过渡快速推进,此配置正迅速成为最常见的配置。
除了这些情况之外,还有一些不太常见的情况,涉及更奇特的固件和分区表。
如您所见,细节上存在相当大的差异,并且某些细节会因您的 Linux 发行版而异 - 或者如果您从源代码手动安装 GRUB,则您如何自己设置细节。