是否有(Win NT)规则规定 MBR 主分区必须位于扩展分区之前?
活动分区位于 rdisk(0) 上
我有一个带有 4/5 个分区的辅助驱动器(取决于您如何计算),parted 显示:
1 主要 2 扩展,包含 (3) 个逻辑 4 主要 5 主要
要引导逻辑分区,使用 boot.ini,
multi(0)disk(0)rdisk(1)partition(4)\WINDOWS="14" /noexecute=optin /fastdetect
parted 列出了所有 5 个分区:已知 NTLDR 不会统计容器分区,并在枚举主分区后枚举逻辑分区,因此逻辑分区为(4)。
到目前为止,我无法从接下来的两个主分区加载HAL.DLL
multi(0)disk(0)rdisk(1)partition(2)\WINDOWS="12" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(1)partition(3)\WINDOWS="13" /noexecute=optin /fastdetect
这是 NTLDR 的一个已知问题吗——主分区必须位于扩展分区之前?(或者只是我在其他地方出错了。)
您可以考虑几个问题/因素。
1. 1024缸问题。
在引导过程中,Windows NT 4.0 使用 INT13 BIOS 功能来访问驱动器。INT13 函数的最大“范围”为 256 个磁头、1024 个柱面和 63 个扇区。这大约为 7.8 GB(每个扇区 512 字节)。
因此整个系统分区必须驻留在 1024 个柱面以下。
系统分区定义为包含系统初始启动所需文件的分区。对于 Windows NT,这些文件是 Ntdetect.com、NTLDR、Boot.ini,有时还有 Ntbootdd.sys
2. Boot.ini 和分区号。
我不是 100% 确定 pri - 扩展 - pri 分区顺序是一个问题,我确实知道这在当时很不寻常,如果这是一个问题,也不会感到惊讶。所以我肯定会避免它。IOW,将主分区放在扩展分区之前以避免出现问题。
看来您已经知道 boot.ini 如何计算分区,但无论如何对于那些阅读过但没有阅读过的人:
对于主分区,我们需要考虑分区表中分区的实际顺序。分区布局的顺序可以与主分区表中的分区顺序不同。所以考虑3个主分区
分区 a - 分区 b - 分区 c
而分区表看起来像
Partition b
Partition c
Partition a
如果
Partition a
是“系统分区”,则 boot.ini 条目可能需要指向分区(3)而不是分区(1),这是您根据驱动器上分区的位置所期望的。当时存在一些工具,可以按照分区表条目在驱动器上出现的顺序对其进行排序。