我正在设计枚举系统中分区的代码。阅读了大量文档后,我无法为该算法设计出完整而明确的约束列表,也无法找出约束存在的原因。
- 根 MBR 有 4 个条目,因此 MBR 可能包含 4 个主分区;
- 在此根 MBR 列表中,可能只有一个扩展分区,然后该分区链接到具有逻辑卷的辅助 MBR。
问题:
- 为什么 DOS 6.22 FDISK 不允许创建 3 个主分区,而只允许创建一个?
- 为什么扩展分区链中的辅助 MBR 只能有一个逻辑卷,而它可以有 3 个(为扩展分区列表保存 2 个额外的链接)?
- 当检查扩展分区中的逻辑驱动器直至其链的末尾时,枚举是否会返回到根 MBR 并从扩展分区条目后的下一个条目继续?为什么不呢?
- 如果 DOS 或 Windows 操作系统发现 MBR 条目不符合约束条件,会发生什么情况(请参阅上面的问题 1 至 3)?换句话说,是否有关于操作系统枚举其分区/逻辑驱动器的过程的描述?
答案1
主引导记录是一种用于 IBM PC 兼容系统的引导扇区。MBR 的原始版本由 IBM 的 David Litton 于 1982 年 6 月编写,并于 1983 年随 PC-DOS 2.0 公开推出。然而,PC-DOS 仅实现了最重要的功能,而不是全部。
最接近“规格”(我知道的)的是https://thestarman.pcministry.com/asm/mbr/STDMBR.htm
MBR结构如下:
地址十六进制 (dec) | 尺寸 | 功能 |
---|---|---|
0x0000 (0) | 440 | 引导加载程序 |
0x01B8 (440) | 4 | 磁盘签名(自 Windows NT 家族以来) |
0x01BC 和 0x01BC(444 和 445) | 2 | 零 (0x0000) |
0x01BE (446) | 64 | 分区表 |
0x01FE 和 0x01FF(510 和 511) | 2 | 签名 |
全部的 | 512 |
答案:
- 为什么 DOS 6.22 FDISK 不允许创建 3 个主分区,而只允许创建一个?
1983 年 3 月,IBM PC DOS 2.0 引入了对分区媒体的支持,但当时仅支持一个主分区。这一点从未改变。DOS 本身绝不使用了多个主分区。因此,FDISK
无法创建多个主分区。
- 为什么扩展分区链中的辅助 MBR 只能有一个逻辑卷,而它可以有 3 个(为扩展分区列表保存 2 个额外的链接)?
不完全确定您所说的“辅助 MBR”到底是什么意思,所以以下内容最终无法回答您的问题。(请小心处理!)
DOS 3.2 增加了对扩展分区的支持。DOS 3.30 增加了扩展分区内的嵌套逻辑驱动器。
每个扩展分区表都定义一个逻辑分区,并指向下一个扩展分区表(如果需要)。换句话说,扩展分区表按照链式列表原则工作。它的起始扇区是相对于当前分区表的位置指定的。第二个条目可以包含与另一个扩展分区表的连接,并且始终具有类型 5。此条目的起始扇区始终相对于第一个扩展分区的扇区进行引用。由于它是按定义链接的,因此您无法引用所有扩展分区,因此您无法保存 2 个额外的链接。
- 当检查扩展分区中的逻辑驱动器直至其链的末尾时,枚举是否会返回到根 MBR 并从扩展分区条目后的下一个条目继续?为什么不呢?
不,因为没有“下一个条目”这样的东西。
- 如果 DOS 或 Windows 操作系统发现 MBR 条目不符合约束条件,会发生什么情况(请参阅上面的问题 1 至 3)?换句话说,是否有关于操作系统枚举其分区/逻辑驱动器的过程的描述?
如果分区无法识别,则无法使用。如果找不到第一个主分区,则 DOS/Windows 无法启动。
笔记: 以前版本的 Windows 依赖于 MS-DOS 确定的驱动器号,但从 Windows 2000 开始,这些映射存储在注册表项中,例如 HKLM\SYSTEM\MountedDevices。对于某些系统配置,磁盘签名还用于 boot.ini 文件,该文件是 Windows NT 引导加载程序 (NTLDR) 的一部分。Windows 在初始化新磁盘时分配磁盘签名。