是否存在(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
您可以考虑几个问题/因素。
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 分区顺序是个问题,但我知道这在当时并不常见,如果这是一个问题,我一点也不惊讶。所以我肯定会避免它。换句话说,将主分区放在扩展分区之前以避免出现问题。
似乎您已经知道 boot.ini 如何计算分区,但对于那些没有读过的人来说:
- 分区号从 1 开始分配(而不是 0)。
- 首先为主分区分配编号。
- 接下来为逻辑分区分配编号。
- 扩展分区根本没有分配编号。
对于主分区,我们需要考虑分区表中分区的实际顺序。分区布局的顺序可能与主分区表中分区的顺序不同。因此,考虑 3 个主分区
分区 a - 分区 b - 分区 c
而分区表看起来像
Partition b
Partition c
Partition a
如果Partition a
是“系统分区”,则 boot.ini 条目可能需要指向分区(3)而不是分区(1),这是根据驱动器上分区的位置所期望的。
当时存在一些工具可以按照分区表条目在驱动器上出现的顺序对其进行排序。