本版
查看: 706|回复: 3

[[color=#ff0000]未解决[/color]] 为什么在legacy启动模式,可以从一个非活动的EFI分区启动引导加载程序?

[复制链接]
楼主(1#)
发表于 2026-6-3 17:28:51 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
事情是这样的下图是我的电脑启动管理界面,这个界面我使用BOOTICE编辑过,添加了若干的系统,如图1, 图2是我电脑的磁盘管理页面,BIOS设置为legacy only,第一启动项设置为磁盘3(MBR分区表),默认启动的操作系统是 win 10 Entrp LTSC 2019 x64 2024, 这个操作位于磁盘4(MBR分区表)的第一个分区(图2中的G盘),我通过比确认目前windows启动管理器使用的BCD文件位于磁盘3的第一个分区/boot目录下(图2中的L盘 非活动的EFI分区),磁盘3的第二个分区才是为活动分区(图2中的G盘,另外一个操作系统盘),而且这个分区下根目录没有/boot文件夹,也就是没有引导程序,现在问题是为什么我能够启动? 按照BOIS的legacy的启动逻辑不是去找第一启动顺序磁盘(磁盘3)的活动分区吗,活动分区根目录没有/boot文件夹不应该报错吗?

总之问题可以表述为:为什么在legacy启动模式,可以从一个非活动的EFI分区启动引导程序并加载此分区下的BCD?

补充一些线索:
1. 进入win 10 Entrp LTSC 2019 x64 2024系统之后,通过msconfig 查看启动项(当前系统注册表指向的BCD),此时显示启动操作系统项列表为空(是因为第一启动顺序磁盘(磁盘3)的活动分区没有/boot文件夹的原因吗)。
2. 确认当前系统处于传统BIOS模式,通过msinfo32查看 BIOS模式显示传统。



图1

图2


回复

举报

沙发(2#)
 楼主| 发表于 2026-6-3 17:31:14 | 只看该作者
请大佬帮忙分析,我可以继续协助测试,我也想搞清楚,不想糊里糊涂。
回复

举报

板凳(3#)
发表于 2026-7-7 09:58:47 | 只看该作者
本帖最后由 alovelydoge 于 2026-7-7 10:00 编辑

关于 MBR 磁盘非活动分区成功引导操作系统的技术分析

一、概念澄清
首先需要厘清一个关键前提:在 MBR 分区表架构下,不存在"EFI 系统分区"(ESP)这一概念。​ ESP 是 GPT 分区表中 UEFI 规范定义的专有分区类型(GUID C12A7328-F81F-11D4-BEA3-08002B69A5B2)。你所指的"L 盘"虽为 FAT32 文件系统,但在 MBR 语境下仅为一块被标记为普通主分区的 FAT32 数据卷,BIOS Legacy 模式并不对其施加任何 EFI 语义。因此,"从非活动 EFI 分区启动"这一表述在技术上不成立——准确描述为:系统从 MBR 磁盘上非活动状态的 FAT32 主分区完成了引导链的初始化。

二、Legacy BIOS 引导链中"活动分区"标志的作用边界
传统 IBM PC 兼容机的 Legacy 引导链通常表述为:
BIOS固件 → MBR(0扇区) → 活动分区PBR → bootmgr → \Boot\BCD → winload.exe然而,这一模型隐含了一个容易被忽视的前提——MBR 中的引导代码是 Microsoft 标准代码。事实上,"活动分区"(Active Partition,分区表项的 0x80 标志位)仅在引导链的最初两个阶段发挥作用:
[list=1]
[*]MBR 引导代码阶段:位于 LBA 0 的 446 字节引导代码扫描分区表,定位具有 0x80 标志的主分区,将其 VBR(Volume Boot Record,即 PBR)读入内存并执行。
[*]VBR/PBR 阶段:VBR 在其所在卷的根目录中检索 bootmgr文件并加载之。
[/list]关键转折点在于:一旦 bootmgr被成功加载进入内存并开始执行,后续所有行为均由其内部逻辑驱动。bootmgr是一个具备独立文件系统驱动能力的微型运行时环境,它通过 VBR 传入的隐藏扇区参数(Hidden Sectors)及 MBR 磁盘签名(Disk Signature)来确定自身所在的卷,进而在该卷的固定路径 \Boot\BCD中读取启动配置数据。此后,bootmgr不再查询分区表中的 0x80 活动标志位——该标志位的使命在控制权移交的那一刻即告终结。

三、本案实际引导路径的技术还原
结合你提及曾使用 Bootice 工具修改过启动配置,实际发生的引导过程可还原如下:
[list=1]
[*]BIOS 固件初始化:设置为 Legacy Only 模式,第一启动设备指向磁盘3(MBR 分区表)。
[*]MBR 阶段异常跳转:由于你通过 Bootice 修改了磁盘3 的 MBR 引导代码,引导代码的执行逻辑偏离了"仅加载 0x80 活动分区 VBR"的默认行为,转而将控制权交予第一个主分区(L 盘,非活动,FAT32)的 VBR。
[*]VBR 阶段:L 盘的 VBR(FAT32 引导扇区)在其根目录成功定位 bootmgr文件并将其载入内存。
[*]bootmgr 阶段:bootmgr基于 VBR 传入的卷标识参数,在其所在卷(L:)的 \Boot\BCD中解析启动条目,该 BCD 存储中配置了指向磁盘4 上 Windows 10 LTSC 的启动参数(device与 osdevice分别指向磁盘4 的目标分区)。
[*]内核加载阶段:bootmgr依据 BCD 配置加载磁盘4 上的 winload.exe,完成操作系统内核的初始化。
[/list]整条引导链在技术上是自洽的,并未违反任何 Legacy BIOS 引导规范——它只是绕开了 Microsoft 标准 MBR 代码中"必须跳转至 0x80 活动分区"这一约定。

四、msconfig 显示启动项为空的原因分析
msconfig(系统配置实用程序)在枚举启动项时,其逻辑依赖于当前运行系统所关联的 BCD 存储。具体而言,它读取由 Windows 内核在启动时映射的 BCD 注册表 hive(HKLM\BCD00000000),该 hive 对应的是本次启动所使用的那份 BCD 文件。
在本案例中,存在以下不一致:
  • 实际控制引导的 BCD:位于磁盘3 L 盘 \Boot\BCD,由 VBR 加载的 bootmgr所引用。
  • 当前系统视角下的 BCD:Windows 运行后,msconfig尝试访问的 BCD 可能与实际生效的 BCD 并非同一物理文件,尤其当引导链中存在跨磁盘、非标准路径加载的情况时,msconfig无法正确解析或关联到该 BCD 存储。
可通过以下命令验证实际生效的 BCD 配置:
bcdedit /store L:\Boot\BCD /enum all
若执行结果中可见完整的 {default}或 {current}启动条目,即可证实上述推断。

五、结论
Legacy BIOS + MBR 架构下,"必须从活动分区启动"这一约束仅适用于 Microsoft 标准 MBR 引导代码的默认行为。​
当 MBR 或 VBR 被第三方工具(如 Bootice)修改后,引导链的初始跳转目标可以被重定向至任意主分区的 VBR,而 bootmgr被加载后完全独立于分区活动标志运作。本案中系统从非活动的 FAT32 分区(L 盘)加载 bootmgr,继而读取同卷的 \Boot\BCD并链式引导磁盘4 上的 Windows 10 LTSC,是一条技术上合法且完整的引导路径,不构成异常。
如需进一步取证,建议使用 Bootice 或 DiskGenius 检查磁盘3 的 MBR 引导代码类型及第一个分区的 VBR 内容,以确认具体的重定向机制。



回复

举报

地板(4#)
发表于 2026-7-15 08:58:41 | 只看该作者
分析的很详细了,重新温习一下。谢谢。
回复

举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2026-10-18 05:35 , Processed in 0.07 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表