这是我前段时间使用 bootmgr 命令解决的一个问题,没有任何麻烦,而且没有丢失我的 BCD,但它之前的工作方式让我很感兴趣。
我有一个 SSD 磁盘和一个普通的 SATA 磁盘。我在 SSD 上安装了 W7,但由于我的 SATA 上有一个 FreeDos,我认为 W7 安装程序使用 FreeDos 分区来存储 bootmgr,因为它认为这是唯一可丢弃的链式加载程序,即使它被安装在不同的磁盘上。当从 mgr 菜单中选择 W7 时,SATA FreeDos 分区上有一个系统分区,而 SSD 上有一个启动分区。
如果我从 SSD 启动。这是否意味着我的 VBR 指向了不同磁盘中的 bootmgr?这可能吗?
答案1
我的 VBR 指向的是不同磁盘中的 bootmgr?
不。假设 MBR 分区(而不是 UEFI),BCD 中的条目指向不同磁盘上的 \Windows 目录。
MBR(磁盘的 0 块,不属于任何分区)中的分区表指示主分区的位置以及哪个分区是“活动的”。MBR 中的代码会从该分区加载 VBR 的第一个块,并将控制权移交给该代码。
VBR 代码的第一个块读取 VBR 的其余部分(对于 NTFS 来说,是 8 个块)。VBR 不会“指向”除其自身之外的任何分区……至少,我听说过的任何 VBR 都不会。但 VBR 因操作系统和文件系统类型而异,因此从理论上讲,这种情况可能会发生。
但传统上,来自 VBR 的代码会在 VBR 所在的同一分区上找到您的操作系统引导加载程序(Windows Vista 及更高版本为 bootmgr,Windows 早期版本为 ntldr),加载其前几个块,并将控制权移交给该代码。 bootmgr 随后加载其自身的其余部分,并读取您的 BCD。 BCD 条目指示从哪个磁盘和分区加载操作系统。
请注意,VBR 代码必须对其自身分区上的文件系统有一点了解。在 Windows 中,它只需能够在根目录中按名称查找文件并读取它们。ntldr 或 bootmgr 的代码必须能够对启动卷执行相同操作,但必须理解子目录。