在 UEFI 上启动引导加载程序的概念很简单,只需将.efi
引导加载程序放在 EFI 系统分区上即可。.efi
然后该文件会加载相应的操作系统。但是,我仍然不明白为什么 MBR 需要活动分区来启动操作系统。
从我目前的研究来看,MBR 引导代码位于磁盘的前 446 个字节中,它将在 POST 后由 BIOS 自动执行(这是事实上的标准)。它可以直接加载操作系统,但大多数情况下,代码太小,以至于它的主要工作是加载位于另一个分区上的实际引导加载程序。
为什么我们需要将分区设置为活动分区才能从中启动?理论上,MBR 引导代码可以运行任何内容,从任何位置运行。
答案1
为什么我们需要将分区设置为活动分区才能从中启动?理论上,MBR 引导代码可以运行任何内容,从任何位置运行。
是的,实际上,MBR 引导代码通常就是这样做的。
但引导代码需要一些方法找到引导加载程序下一阶段的存储位置。(整个引导加载程序绝不会只有 446 个字节;MBR 只是其第一阶段。)
拥有一个可以解析 MBR 分区表并查找“活动”标志的引导扇区恰好是该问题的一种非常灵活的解决方案 - 它允许完全静态的引导扇区(不需要特殊工具来生成它),并且任何引导扇区都可以在任何操作系统上同样很好地运行。
例如,系统LinuxMBR 引导扇区似乎与 Windows MBR 引导扇区完全可互换。如果您双启动 Linux 和 Windows,则无论您使用哪个引导扇区,它们都执行相同的操作,因此您只需交换“活动”位即可交换操作系统。(安装引导扇区只是将 mbr.bin 复制到原始磁盘。)
但不同的引导程序肯定有不同的方法:例如,流行的 Linux GRUB2 将其第二阶段存储在“后 MBR 间隙”中,并根据其位置动态生成引导代码;即 MBR 引导扇区知道第二阶段从哪个 LBA 开始(完全忽略分区表和“活动”标志),并且这可能因磁盘而异,因此引导扇区必须grub-install
由程序为每个磁盘单独写入。
(GRUB2 通常也不使用分区 VBR;但它能“chainload” 那些,它的典型配置实际上直接访问真实文件系统并加载操作系统内核文件。)
答案2
看 维基百科 主引导记录 了解有关 MBR 格式历史的信息。
基本上,活动分区的需要是早期 IBM/DOS 引导加载程序的设计选择,并且从那时起一直保持这种状态。
这些早期的引导加载程序会扫描 MBR 嵌入分区表中的分区列表,以找到唯一标有活动标志的分区,然后加载并运行该活动分区的卷引导记录 (VBR)。
这只是 IBM PC 生命周期中的另一个早期设计决策,该决策后来一直延续下来,原因无他,只是早期某个开发团队做出的决定(甚至可能仅由一个人做出)。