boot
我接触过的大多数系统都非常简单地只使用和分区来格式化磁盘rootfs
。其他也有recovery
(如 Windows)和swap
,但我试图保持简单。
我还没有阅读任何指定引导加载程序必须位于哪个分区的标准。我从来没有读过任何关于是否有有成为启动分区。当然,指定一个分区boot
是没有意义的。我们只需要一些加载到内存中并由第一阶段引导加载程序(传统/UEFI)执行的分区。
所以,我的问题是:第一阶段引导加载程序如何找到第二阶段引导加载程序?可以:
需要分区表吗?
从磁盘(或您从中启动的任何介质)读取分区表并检查每个分区表是否有可启动文件?
期望第二阶段引导加载程序位于第一个分区中?
我会假设上面列表中的第二个,但这只是猜测的结果。我使用 Linux 作为主要操作系统,但我想这个早期启动过程与操作系统无关。
答案1
我们需要区分遗留系统 (BIOS) 和 UEFI,因为它们非常不同。在非 UEFI PC 或以传统模式运行的 UEFI PC 上,引导过程如下:首先 BIOS 将 MBR 引导扇区加载到 RAM 中并开始执行引导代码。由于引导扇区只有 512 字节长,并且还包含分区表,因此引导扇区无法包含理解即使是最简单的文件系统内部结构的代码。 GRUB 通过在硬盘驱动器的 1-62 扇区中安装附加代码来解决此问题。驱动器的这个区域或多或少是引导扇区和第一个分区开头之间的“无人区”。这个所谓的“Stage 1.5”可以从文件系统读取文件,并从 /boot 目录加载 GRUB Stage 2 和配置文件。
主板闪存中的固件自 BIOS 早期以来一直在发展。虽然 BIOS 能够读取一组固定设备的第一个扇区,但更现代的 UEFI 系统直接在固件中理解 FAT32 文件系统。当 UEFI 系统启动时,它首先查找 EFI 系统分区。包含系统分区的磁盘必须有一个GUID分区表(GPT),系统分区是通过其固定的GUID来识别的。系统分区应该是 FAT32 分区,固件从中读取并执行引导加载程序。或者,要加载的第一个程序也可以是引导管理器,它允许用户选择应执行哪个引导加载程序(以及相应的操作系统)。 UEFI 还可以使用存储在主板上的非易失性存储器中的变量进行配置。