是否有任何针对 MBR(主引导记录)格式的完整 RFC 文档 - 最好有解释?

是否有任何针对 MBR(主引导记录)格式的完整 RFC 文档 - 最好有解释?

我正在设计枚举系统中分区的代码。阅读了大量文档后,我无法为该算法设计出完整而明确的约束列表,也无法找出约束存在的原因。

  • 根 MBR 有 4 个条目,因此 MBR 可能包含 4 个主分区;
  • 在此根 MBR 列表中,可能只有一个扩展分区,然后该分区链接到具有逻辑卷的辅助 MBR。

问题:

  1. 为什么 DOS 6.22 FDISK 不允许创建 3 个主分区,而只允许创建一个?
  2. 为什么扩展分区链中的辅助 MBR 只能有一个逻辑卷,而它可以有 3 个(为扩展分区列表保存 2 个额外的链接)?
  3. 当检查扩展分区中的逻辑驱动器直至其链的末尾时,枚举是否会返回到根 MBR 并从扩展分区条目后的下一个条目继续?为什么不呢?
  4. 如果 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

答案:

  1. 为什么 DOS 6.22 FDISK 不允许创建 3 个主分区,而只允许创建一个?

1983 年 3 月,IBM PC DOS 2.0 引入了对分区媒体的支持,但当时仅支持一个主分区。这一点从未改变。DOS 本身绝不使用了多个主分区。因此,FDISK无法创建多个主分区。

  1. 为什么扩展分区链中的辅助 MBR 只能有一个逻辑卷,而它可以有 3 个(为扩展分区列表保存 2 个额外的链接)?

不完全确定您所说的“辅助 MBR”到底是什么意思,所以以下内容最终无法回答您的问题。(请小心处理!)

DOS 3.2 增加了对扩展分区的支持。DOS 3.30 增加了扩展分区内的嵌套逻辑驱动器。

每个扩展分区表都定义一个逻辑分区,并指向下一个扩展分区表(如果需要)。换句话说,扩展分区表按照链式列表原则工作。它的起始扇区是相对于当前分区表的位置指定的。第二个条目可以包含与另一个扩展分区表的连接,并且始终具有类型 5。此条目的起始扇区始终相对于第一个扩展分区的扇区进行引用。由于它是按定义链接的,因此您无法引用所有扩展分区,因此您无法保存 2 个额外的链接。

  1. 当检查扩展分区中的逻辑驱动器直至其链的末尾时,枚举是否会返回到根 MBR 并从扩展分区条目后的下一个条目继续?为什么不呢?

不,因为没有“下一个条目”这样的东西。

  1. 如果 DOS 或 Windows 操作系统发现 MBR 条目不符合约束条件,会发生什么情况(请参阅上面的问题 1 至 3)?换句话说,是否有关于操作系统枚举其分区/逻辑驱动器的过程的描述?

如果分区无法识别,则无法使用。如果找不到第一个主分区,则 DOS/Windows 无法启动。

笔记: 以前版本的 Windows 依赖于 MS-DOS 确定的驱动器号,但从 Windows 2000 开始,这些映射存储在注册表项中,例如 HKLM\SYSTEM\MountedDevices。对于某些系统配置,磁盘签名还用于 boot.ini 文件,该文件是 Windows NT 引导加载程序 (NTLDR) 的一部分。Windows 在初始化新磁盘时分配磁盘签名。

相关内容