进一步阅读

进一步阅读

在 MBR 分区表中,每个分区条目都包含一个单字节标识符,用于描述分区中包含的文件系统类型。FAT 系列文件系统已发布多个这样的 ID,每个 FAT 条目的宽度对应一个 ID。但奇怪的是,除了 FAT12 和扩展引导记录类型之外,每个 FAT 变体还具有用于文件系统“LBA”变体的附加 ID:

ID(非LBA) ID(本地地址) 文件系统
0x01 没有任何 FAT12
0x040x06 0x0e FAT16
0x0b 0x0c FAT32
0x0f 0x05 扩展引导记录

现代操作系统通常能够自行确定驱动器的寻址方式。即使在 LBA 寻址还很年轻并且磁盘通过 BIOS 访问的时候,也应该能够简单地探测适当的中断 13h 调用是否可用,如果不存在则返回到 CHS 版本。因此,额外的分区 ID 似乎是多余的。

那么这些额外的分区 ID 有什么意义呢?它们会以某种方式影响磁盘格式、文件系统驱动程序或引导代码吗?

答案1

它们的作用是停止使用(旧的)操作系统不要使用 LBA I/O尝试访问这些分区并失败。分区类型控制哪些操作系统尝试查看分区中的内容。使用 LBA I/O 的操作系统知道查看具有较新分区类型的分区。操作系统不会将分区视为应忽略的内容。

同样的情况也发生在无法处理大于 16MiB 和 32MiB 的分区的(旧)操作系统上。

进一步阅读

答案2

@JdeBP 的回答是正确的,但不完整。分区类型 ID 的主要目的确实是向无法正确访问分区的旧操作系统(主要指旧版本的 DOS)隐藏分区。有时这是因为磁盘驱动程序的任意大小限制;在其他情况下,这是因为 FAT 磁盘格式本身发生了变化(更宽的 FAT 条目,BPB 结构发生变化)。

完整表格(改编自知识库 Q69912)应如下所示:

类型 DOS 版本 文件系统 寻址 大小限制
0x01 ≥2.0 脂肪≤12 中枢性高血压 ≤ 16 MiB(32768 个扇区)
0x04 ≥ 3.0 脂肪≤16 中枢性高血压 ≤ 32 MiB(65536 个扇区)
0x05 ≥3.30 乙烯-丙烯腈 中枢性高血压 (≤8032.5MiB***)
0x06 ≥4.0 脂肪≤16 中枢性高血压 (≤8032.5MiB***)
0x0b ≥ 7.10** 脂肪≤32 中枢性高血压 (≤8032.5MiB***)
0x0c ≥ 7.10** 脂肪≤32 左心室射血分数 (≤ 2 TiB***)
0x0e ≥ 7.0 * 脂肪≤16 左心室射血分数 (≤~2 GiB****)
0x0f ≥ 7.0 * 乙烯-丙烯腈 左心室射血分数 (≤ 2 GiB *****)

如下读:如果全部最后三列中的约束得到满足(整个分区可以用给定的方案寻址,分区不大于并且 FAT 版本不晚于指定版本),然后一个可能使用第一列中的类型 ID 来将分区暴露给第二列中的 DOS 版本。相反则没有暗示:扇区数少于 32768 的 CHS 寻址 FAT12 分区很可能被标识为0x0c;但这样做用处不大。

所有 DOS 版本都受到簇大小不能大于 64 个扇区 = 32768 字节的限制。如果这个假设不成立,那么最​​好的类型可能是0x07

DOS 7.0 及更高版本以另一种方式使用分区类型 ID:选择使用哪个 BIOS 服务来访问驱动器。顾名思义,CHS 寻址分区通过旧的 INT 0x13 服务(AH=0x02、AH=0x03)访问,而 LBA 寻址分区通过 INT 0x13 扩展(AH=0x42、AH=0x43)访问。CHS 驱动程序还存在某些怪癖和限制,但这些都不适用于 LBA 驱动程序:

  • 如果 CHS 寻址分区从扇区 (0, 0, 1) 开始,即,它与 MBR 扇区重叠,则 DOS 会识别它,但无法访问它。
  • CHS 寻址的扩展引导记录(类型0x05)必须与柱面边界对齐;否则 DOS 将错误计算分区的位置。
  • CHS 寻址的扩展引导记录不得包含 LBA 寻址的逻辑驱动器。
  • 对于包含在 CHS 寻址 EBR 中的逻辑驱动器,存储在 BIOS 参数块(所谓的“隐藏扇区”字段)中的分区偏移量是相对于其包含的扩展引导记录计算的,而不是磁盘绝对偏移量。

* DOS 版本首次与 Windows 95 (4.0.950) 一起发布

** DOS 版本首先随 Windows 95 OSR2 (4.0.1111) 一起发布

*** 分区表(以及 BPB 等数据结构)的寻址方案所施加的限制:CHS 最多可以寻址 1024 × 255 × 63 个扇区,LBA 可以寻址 2 32 个扇区。(知识库文章声称限制为 1024 × 255 × 64,但这可能是错误的。)

**** 最大簇大小为 64 个扇区,因此存在限制;每扇区 512 字节 × 每簇 64 个扇区 × 65525 个簇 ≈ FAT 簇区域中的 2 GiB。理论上,即使存在此限制,也可以通过较大的保留扇区区域或根目录区域来突破此限制,但其他大小限制可能仍然存在。

***** 此限制的来源尚不清楚;也许是虚假的。

相关内容