SteveHawk's Blog

exFAT 文件系统



1. 目的

由于闪存设备容量日益增加,微软于 1996 年发布的 FAT32 系统不再能够满足需求。FAT32 的最大不足在于只支持最大 4 GB 的单个文件,这在很多情况下是不可接受的,也不满足 SDHD 标准的要求。于是微软在 2006 年发布了 exFAT 文件系统,又名 FAT64,旨在解决 FAT32 的诸多问题。

2. 结构

2.1 简介

  • 磁盘空间
    • 主引导区域
    • 主引导备份
    • FAT 区域
      • FAT 1
      • FAT 2 (可选)
    • 数据区域
      • 簇堆对齐区
      • 簇堆
        • 簇堆分配位示图
        • 大写转换表
      • 数据区

2.2 详细说明

  • 主引导区域

    位置 大小 块名
    0 1 引导扇区
    1 8 扩展引导扇区
    9 1 OEM 信息记录
    10 1 保留
    11 1 引导校验扇区
  • 主引导备份区域

    位置 大小 块名
    12 1 引导扇区
    13 8 扩展引导扇区
    21 1 OEM 信息记录
    22 1 保留
    23 1 引导校验扇区
  • FAT 区域

    位置 大小 块名
    24 fat_offset - 24 FAT队列
    fat_offset fat_length FAT 表1
    fat_offset + fat_length fat_length FAT 表2 (仅 TexFAT)

    注:TexFAT 为事务安全的 exFAT 文件系统(A transaction-safe exFAT)。

  • 数据区域

    位置 大小 块名
    fat_offset + fat_length * fat_number cluster_heap_offset - (fat_offset + fat_length * fat_number) 簇堆对齐(Cluster Heap Alignment)
    cluster_heap_offset cluster_number $\times$ $2^{SectorsPerClusterShift}$ 簇堆
    cluster_heap_offset + cluster_number $\times$ $2^{SectorsPerClusterShift}$ volume_length - (cluster_number $\times$ $2^{SectorsPerClusterShift}$) 数据区

2.3 簇堆

簇堆是 exFAT 文件系统设置簇是否保存数据的地方,其构造如下:

  • Root Directory 根目录

  • Files 文件

  • Directories 目录

  • Bitmap Allocation Table 簇堆分配位示图

  • UP-Case Table 大写转换表

簇的分配状态由簇堆自己的 Bitmap Allocation Table 追踪。

  • 簇堆分配位示图

    簇堆分配位示图,记录分区上所有簇的使用情况。每一个 bit 代表一个簇,0 表示空簇,1 表示该簇已被占用。起始簇号从 2 开始,也就是 BIT0 对应簇号 2,BIT1 对应簇号 3。簇堆分配位示图以文件存储的方式存在,一般对应根目录下第一个文件,也就是第二个目录项。他的大小由总簇数决定,占用 N 个簇的空间。

  • 大写转换表

    大写表是一张 Unicode 字符映射图,每一个字符占用 2 个字节。文件名比较时,先把文件名格式转换成 Unicode,再通过该表把文件名转成大写 Unicode,转换完成后才进行文件名比较。大写表中的数据进行了部分压缩,压缩起始标志码 FFFFh,随后跟一个压缩长度。

2.4 目录结构

exFAT 使用树状结构来描述文件和目录之间的关系。根目录树定义目录在 RootDirectoryCluster 之中。子目录单向连接到它,(.) 和 (..) 目录指向自己本身和父目录,这像 FAT16/FAT32一样。每个 directory 包括一系列的目录条目,目录条目的优先等级如下:

  • Primary Directory Entries

    1. Critical Primary Entries
    2. Benign Primary Entries
  • Secondary Directory Entries

    1. Critical Primary Entries
    2. Benign Primary Entries

Critical entries 是必须项,benign entries 是可选的,Primary directory entries 对应文件系统中的条目,Secondary directory entries 是 primary directory entry 数据扩展和关联。一组 primary/secondary entries 组成 directory entry 设置文件或目录,设置第一个 directory entry 为 primary directory entry,所有子条目必须是 Secondary directory entries 。

3. 优点

exFAT 相较于之前 FAT 文件系统的优势在于:

  • 可拓展至更大的磁盘大小,理论上 64 ZB,推荐最大 512 TB。相较 32 位限制的 FAT32 分区的 2 TB(每扇区 512 字节)大了很多。
  • 理论的文件大小限制为 $2^{64} - 1$ 字节(16 EB - 1),而 FAT32 文件系统中单一文件限制大小为 $2^{32} - 1$ 字节(4 GB)。
  • 簇大小最大可为每扇区225字节,最大32 MB。
  • 由于采用了空余空间寻址,空间分配和删除的性能得以改进。
  • 在单一文件夹内支持超过 $2^{16}$ 个文件。

4. 缺点

exFAT 比过去的 FAT 文件系统的劣势在于:

  • 某些旧设备无法使用exFAT格式的存储卡。
  • exFAT 为微软专有,专利授权方式不明确。夏普、RIM 分别和微软达成了 exFAT 授权协议。存在专利费。微软曾经为 FAT 的一部分申请专利。
  • Windows XP SP3 之前的旧版 Windows 暂时不支持 exFAT。

5. 应用

如果有跨平台使用 u 盘 / 硬盘的需求,那 exFAT 将会是一个很好的选择(如果需要使用 Windows XP 或者更老的系统,那还是请使用 FAT32)。exFAT 在 Windows,MacOS,Linux 上均有原生支持,并且支持大文件的存储。


#courses
1402 words

↪ comment
↪ reply by email