前言

本节将学习 exFAT 文件系统的特点、结构及引导扇区。

你可以前往 exFAT 文件系统规范 - Win32 apps | Microsoft Docs 查看 Microsoft 官方对 exFAT 文件系统的描述。

知识点总览

  • exFAT 文件系统的特点
  • exFAT 文件系统的结构
  • exFAT 文件系统的 DBR 分析

exFAT 文件系统的特点

本小节多为 exFAT 相关理论,与实操无关,可以跳过本小节。

exFAT 全称为 Extended File Allocation Table File System,即扩展文件分配表,是微软在 Windows Embeded 6.0(包括 Windows CE 6.0、Windows Mobile)中引入的一种适合于闪存的文件系统。

exFAT 专为满足当今数字媒体的需求而构建,无论使用何种设备或操作系统,exFAT 均可使用永久性或可移动媒体进行无缝文件传输和存储。

消费者和企业正在创造越来越多的高质量照片、视频和其他数字媒体。 一旦创建,该媒体就需要在多个平台和产品之间存储和共享。 云技术可以简化共享流程,但是在许多应用程序中,可移动存储的便利性是无法替代的。

扩展文件分配表(exFAT)是 Microsoft 专利文件系统。exFAT 可以处理非常大的文件,并可以在使用可移动存储的设备之间进行无缝文件交换,而与设备或操作系统无关。 exFAT 结合了广泛的互操作性和几乎无限规模的文件处理能力,对于寻求有效的文件存储和传输解决方案的公司来说,exFAT 是必不可少的。

exFAT 只是 Microsoft 授予原始设备制造商(OEM)的一项技术,可帮助他们创建移动设备和平板电脑,明天的设备物联网。exFAT 还可以用于台式计算机、工业设备、照相机以及许多其他需要互操作文件存储和传输解决方案的设备中。

来源:exFAT 的许可| Microsoft IP 许可

exFAT 文件系统跟原来的 FAT 文件系统相比,主要有以下优点:

  • 可拓展至更大磁盘大小,理论上 64ZiB,推荐最大 512TiB,相较 32 位限制的 FAT32 分区的 2TB(每扇区 512 字节)。
  • 理论的文件大小限制为 264 - 1 字节(16 exbibytes - 1),而 FAT32 文件系统中单一文件限制大小为 232 - 1 字节(4 GiB)。对于单档超过 4 GB 的用户来说,exFAT 提供了很好的解决方案。
  • 大小最大可为每扇区225 字节,最大 32 MB。
  • 由于采用了空余空间寻址,空间分配和删除的性能得以改进。
  • 在单一文件夹内支持超过 216 个文件。
  • 支持访问控制清单(但在 Windows Vista SP1 中尚未支持)。
  • 提供给 OEM 的可定义参数可以使这个文件系统适应不同特色的设备。
  • 支持热插拔资料完整无损机制Transaction-Safe FAT(TFAT,在WinCE中可选的功能)。
  • 时间戳记能够使用UTC时间而不仅仅是所在时区(从Vista SP2开始)

来源:exFAT - 维基百科,自由的百科全书 (wikipedia.org)

exFAT 文件系统跟原来的 FAT 文件系统相比,主要有以下缺点:

  • 某些旧设备(如个人数码助理(PDA)和数字相机)无法使用 exFAT 格式的存储卡。
  • 使用 exFAT 的设备将不能用Windows VistaReadyBoost功能。(Windows 7 以上版本中的新的 exFAT 系统支持ReadyBoost
  • 专利授权方式不明确。夏普、RIM、任天堂分别和微软达成了 exFAT 授权协议。存在专利费。微软曾经为 FAT 的一部分申请专利。曾经有用户从三星的 Android 中分离出不基于 FUSE 实现的 exFAT 内核模块代码并按照 Linux 的 GPL 协议释放出来,被认为三星得到微软支持下开发的。之后三星也正式释放了相应模块代码。
    • 2019 年 8 月,微软公开了 exFAT 的技术文档,并支持将 exFAT 功能集成到Linux 内核中。Linux 内核将于版本 5.4 中提供初步支持。
  • Windows XP SP3 之前的旧版 Windows 暂时不支持 exFAT,Windows XP 可以安装修改更新 KB955704 来支持 exFAT,Linux 操作系统需要通过第三方开发的文件系统驱动来支持 exFAT(例如,谷歌公司的 exfat 工具、FUSE exfat、exfat-nofuse、sdfat),Mac OS X 可透过升级至 10.6.5 来全面支持 exFAT。
  • UEFI不支持 exFAT,只支持FATFAT32,格式化为 exFAT 的 EFI 启动磁盘将无法被识别。然而现今支持 EFI 引导安装的主流操作系统,其安装文件都存在单个文件大于 4GB 的情况(如Windows 10install.wimLinux 发行版放置系统文件的SquashFS映像),显然不能再使用FATFAT32

来源:exFAT - 维基百科,自由的百科全书 (wikipedia.org)

exFAT 文件系统的结构

ExFAT文件系统结构总览

exFAT 文件系统是由 DBR 及其保留扇区、FAT、簇位图文件、大写字符文件、用户数据区五个部分组成。

这些结构是在分区被格式化时创建出来的,它们的含义如下:

① DBR 及其保留扇区。DBR 的全称为 DOS Boot Record,含义是 DOS 引导记录,也称为操作系统引导记录。在 DBR 之后往往有一些保留扇区,其中 12 号扇区为 DBR 的备份。

② FAT。FAT 的全称为 File Allocation Table,含义是文件分配表。

ExFAT 一般只有一份 FAT,而不像 FAT 文件系统那样有两个 FAT 表:FAT1 和 FAT2。

③ 簇位图文件。簇位图文件是 ExFAT 文件系统中的一个元文件,类似于 NTFS 文件系统中的元文件$BitMap,用来管理分区中簇的使用情况。

④ 大写字符文件。是 ExFAT 文件系统中的第二个元文件,类似于 NTFS 文件系统中的元文件$UpCase,Unicode 字母表中每一个字符在这个文件中都有一个对应的条目,用于比较、排序、计算 Hash 值等方面。

该文件大小固定为 5836 字节。

⑤ 用户数据区。是 ExFAT 文件系统的主要区域,用来存放用户的文件及目录。

exFAT 文件系统的 DBR 分析

ExFAT 文件系统的 DBR 由 6 部分组成,分别为跳转指令、OEM 代号、保留区、BPB 参数、引导程序和结束标志。

image-20211208165426103

1.跳转指令

跳转指令本身占用两个字节,它将程序执行流程跳转到引导程序处。例如,当前 DBR 中的“EB 76”,就是代表汇编语言的“JMP 76”。需要注意该指令本身占用两个字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于 78H。紧接着跳转指令的是一条空指令 NOP(90H)。

2.OEM 代号

这部分占 8 字节,其内容由创建该文件系统的 OEM 厂商具体安排。例如,微软的 Windows Vista 系统将此处设置为文件系统类型“ExFAT”。

3.保留区

从 DBR 的 0BH ~ 3FH 处是原来的 FAT 文件系统 BPB 所占用的空间,ExFAT 文件系统不使用这些字节。

4.BPB(BIOS Parameter Block,BIOS 参数块)

ExFAT 的 BPB 从第 DBR 的 40BH 偏移处开始,占用 56 字节,记录了有关该文件系统的重要信息。

ExFAT文件系统的DBR分析

(1)0x40 ~ 0x47:隐藏扇区数

隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致:对于主磁盘分区来讲,是 MBR 到该分区 DBR 之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其 EBR 到该分区 DBR 之间的扇区数。

(2)0x48 ~ 0x4F:扇区总数

扇区总数是指分区的总扇区数,由 8 字节组成,也就是 64 位,所以能管理的最大分区为 264×512 = 273Byte = 8ZB。微软官方网站提供的信息称:ExFAT 理论上最大可以支持 64ZB 的分区,但从这里只能算出 8ZB。

(3)0x50 ~ 0x53:FAT 起始扇区号

该值为相对于文件系统起始号扇区而言,也就是从 DBR 到 FAT 表之间的扇区数。

(4)0x54 ~ 0x57:FAT 扇区数

是指 FAT 表包含的扇区数,ExFAT 文件系统只有一份 FAT 表。

(5)0x58 ~ 0x5B:首簇起始扇区号

该值用来描述文件系统中的第 1 个簇的起始扇区号。与传统 FAT 文件系统一样,ExFAT 文件系统的第一个簇也是 2 号簇,通常 2 号簇分配给簇位图文件使用,因此,该值也就是簇位图文件的起始扇区号。

(6)0x5C ~ 0x5F:分区内的总簇数

分区内的总簇数是指从分区内第一个簇算起,到分区末尾所包含的簇的总数。

(7)0x60 ~ 0x63:根目录首簇号

分区在格式化为 ExFAT 文件系统时,格式化程序会在数据区中指派一个簇作为 ExFAT 的根目录区的开始,并把该簇号记录在 BPB 中。通常分区中的第一个簇被分配给簇位图文件使用,簇位图文件之后是大写字符文件,大写字符文件的下一个簇就根目录的起始位置了。

(8)0x64 ~ 0x67:卷序列号

卷序列号是格式化程序在创建文件系统时生成的一组 4 字节的随机数值。

(9)0x6C ~ 0x6C:每扇区字节数描述

这个字节用来描述每扇区包含的字节数,描述方法为,假设此处值为 N,则每扇区大小字节数为 2N。例如,本例中该值为“09”,即每扇区大小字节数为 29 = 512。

(10)0x6D ~ 0x6D:每簇扇区数描述

这个字节用来描述每簇包含的扇区数,描述方法为,假设此处值为 N,则每簇扇区数为 2N。例如,本例中该值为“06”,即每簇扇区数为 26 = 64。

ExFAT 文件系统能够支持从 512B ~ 32MB 的簇大小。

5.引导程序

ExFAT 的 DBR 引导程序占用 390 字节(78H ~ 1FDH)。这部分字节对于 ExFAT 来说也是很重要的,如果这些数据被破坏,文件系统将无法使用。

6.结束标志

ExFAT 的 DBR 结束标志与 FAT 的 DBR 结束标志一样,也是“55 AA”。

在 ExFAT 的 DBR 之后还有很多保留扇区,其中 12 号扇区为 DBR 的备份,如果 DBR 遭到破坏,可以用其备份 DBR 进行修复。