前言

本节将学习 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进行修复。