在分区类型标志表中,0x0B 和 0x0C 均被标记为 FAT32,这是由历史兼容性和技术演进共同导致的。以下是具体原因:


一、根本原因:LBA 模式的支持差异

类型码 名称 关键区别 出现背景
0x0B Win95 FAT32 仅支持 CHS 寻址 Windows 95 早期版本(1995)
0x0C Win95 FAT32 (LBA) 支持 LBA(逻辑块寻址) Windows 95 OSR2(1996)及以后

技术细节

  1. CHS(柱面-磁头-扇区)的限制

    • 最大寻址范围:约 8GB(受限于24位地址空间)。
    • 分区起始位置需通过磁头、柱面等参数计算。
  2. LBA(逻辑块寻址)的优势

    • 直接使用32位扇区号,支持 超过8GB的大容量磁盘
    • 避免CHS的几何参数兼容性问题(如不同BIOS对CHS的解释差异)。

二、为什么需要两种类型码?

1. 向后兼容性

  • 旧系统(如DOS):只能识别 0x0B,若使用 0x0C 可能导致分区不可见。
  • 新系统(Win95 OSR2+):优先使用 0x0C 以支持大磁盘。

2. 磁盘工具的智能处理

  • 格式化工具(如 fdisk)会根据磁盘容量自动选择:
    • 若磁盘 ≤ 8GB → 使用 0x0B
    • 若磁盘 > 8GB → 强制使用 0x0C

3. 实际影响

场景 类型码选择 结果
2GB U盘 0x0B 所有系统兼容
32GB 移动硬盘 0x0C 仅支持LBA的系统可识别
误用0x0B于大磁盘 0x0B 超过8GB的部分无法访问

三、现代系统中的处理

  1. Windows 10/11

    • 完全支持 0x0B0x0C,但默认格式化大磁盘时使用 0x0C
  2. Linux

    • 内核忽略类型码差异,统一按FAT32处理(依赖BPB参数)。
  3. 数据恢复工具

    • 需区分两者,避免误判分区边界(如 testdisk 会检测LBA标志)。

四、如何验证分区类型?

1. 使用 fdisk(Linux)

sudo fdisk -l /dev/sdX

输出示例:

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdb1          2048 61439999 61437952 29.3G  c W95 FAT32 (LBA)  # 0x0C
/dev/sdc1          2048  2099199  2097152    1G  b W95 FAT32        # 0x0B

2. 使用 diskpart(Windows)

diskpart
  list disk
  select disk 1
  list partition

输出示例:

分区 ### 类型              大小     偏移量
分区 1   主要              29 GB    1024 KB  # FAT32 (LBA)

五、总结

  • 历史原因0x0B0x0C 分别代表 FAT32 的 CHS 和 LBA 模式,源于Windows 95的版本迭代。
  • 技术差异:LBA模式(0x0C)突破8GB限制,成为现代大容量存储的标准选择。
  • 兼容性建议
    • 小容量设备(如U盘)可任选 0x0B0x0C
    • 大容量硬盘必须使用 0x0C 以避免数据截断。

此设计体现了微软在过渡期对兼容性和新技术的平衡,最终LBA成为行业标准(GPT分区表进一步取代MBR)。