文件系统(五):exFAT 文件系统原理详解
前言
exFAT是微软2006年推出的一种文件系统,距今已快二十年,相比于FAT16和FAT32,exFAT还是算年轻。exFAT一直是微软的一个专用文件系统,直到2019年微软发布它的规范,目前微软拥有exFAT多个元素的专利,如果产品上使用exFAT,需要微软授权,否则有可能侵权。
exFAT被SD协会采用作为大于32GB SDXC卡的默认文件系统,在win11系统上,SDXC卡默认格式化选项已经没有FAT32选项,exFAT文件系统的使用范围正逐渐扩大。
为啥微软要用exFAT来代替FAT32呢?
因为exFAT数据结构开销比NTFS低,但它又可以突破FAT32 单个文件大小和分区大小的限制。
(一)磁盘布局

在Windows系统上将一张TF卡格式化成exFAT文件系统,发现它是将整个TF格式化成了exFAT文件系统,没有前面介绍的MBR和GPT分区表信息。
整体分为5个部分:
- DBR及其保留扇区
- FAT 文件分配表
- 簇号位图
- 大写字符
- 目录和文件(根目录在该区最开始位置)
(1) DBR

DBR 中主要有:跳转指令,OEM代号、BPB参数、引导程序、结束标志组成。这里只介绍BPB(BIOS Parameter Block,BIOS参数块),其它部分在前面其它文章中已经有介绍过了。
根据上面第0扇区的DBR信息,可以解析exFAT的BPB参数如下:

从上面解析的数据我们可以知道:
- FAT表在第2048扇区
- 簇位号图在第4096扇区=首簇起始扇区号=第2号簇
- 大写字符在第4160扇区=簇位号图的下一个簇=4096 + 64 = =第3号簇
- 根目录在第4224扇区=首簇起始扇区号 + 根目录首簇号 - 2 = 4096 +(4-2)*64 = 第4号簇
(2) FAT表
与FAT32不同,exFAT只有一个FAT表,没有备份

表项里的内容与FAT32的类似:4个字节表示一个簇,每个簇都有自己的编号,F8 表示介质类型为硬盘,写入4个FF,表示结束标志。具体可查看上一篇文件系统(四):FAT32文件系统实现原理
与FAT32不同的是:exFAT文件系统中FAT表中记录的是不连续存储文件的簇链,如果是连续的簇链,在FAT表中不会体现。
上面exFAT文件系统FAT表中为0的簇,并不能表示该簇是未使用,也有可能它是连续簇
exFAT文件系统的簇使用情况,是通过簇位号图来实现的
(3) 簇号位图
簇位图中的每一个位,实际映射到数据区中的每一个簇。
如果对应簇已经被使用,簇位图上对应该簇的位值就是1,否则就为0

上面我们看,簇位图上的值为:FF FF FF FF FF FF FF FF FF FF FF 03
FF = 11111111b = 8个簇,11个FF表示88个簇,03的二进制位11b,表示2个簇
FF FF FF FF FF FF FF FF FF FF FF 03
表示从第2号簇到92号簇的90个簇号已经被使用了。
为什么这里是从第2号簇开始呢?
因为0号和1号FAT项有特殊用途,无法与数据区中的簇形成映射,只能从2号FAT项开始与数据区中的第一个簇映射,所以数据区中的第一个簇也就编号为2号簇。
(4)大写字符元文件

exFAT是一个大小写不敏感的文件系统
大写字符元文件(UPCASE file)里面存储的是一个全局字符映射表,包含了所有可能字符的大小写映射。
它主要作用是:大小写转换、文件名比较、国际化支持(跨语言)
(5) 目录项

exFAT 包含4种目录项
- 卷标目录项(32字节)
- 簇位图文件的目录项(32字节)
- 大写字符文件的目录项(32字节)
- 用户文件的目录项(至少3个目录项)
前面三个是系统目录项我们就不分析了,简单介绍一下用户文件的目录项 以上图中test3目录为例进行分析:

用户目录项的三个目录项被称为三个属性,
- 第一个目录项称为“属性1”,目录项首字节的特征值为“85H”;
- 第二个目录项称为“属性2”,目录项首字节的特征值为“C0H”;
- 第三个目录项称为“属性3”,目录项首字节的特征值为“C1H”。
第一目录项

与FAT32 文件系统相比多了附属目录项数,校验和,这里重点介绍一下校验和的作用。
校验和
校验和是用来确保目录项数据的完整性和可靠性,防止和检测目录项数据损坏。
在目录项读取的时候,可以通过校验和确定目录项数据是否损坏或是被篡改。
第二目录项

这里需要注意文件碎片标志和文件名Hash值两个参数,这是FAT32文件系统不具有的功能。
文件碎片标志
文件碎片是用来标记文件是否连续存储。
如果值为0x03,表示文件是连续的,没有碎片,在FAT表中不会有记录。在文件读取的时候,可以直接根据文件所在的起始簇号,直接进行数据连续读取,而不需要去查找FAT表的中FAT项。
如果值为0x01,表示文件是不连续的,有碎片,在FAT表中会记录该文件簇链,在文件读取的时候,除了文件的起始簇号,还需要根据FAT表中的信息去寻找下一个簇号。
因为有了文件碎片标记,exFAT文件读写效率要比FAT32高。
文件名Hash值
文件名Hash值是用来加速文件查找过程,通过快速匹配Hash值减少详细比较的次数。
在目录查找过程中,通过先比较Hash值,可以减少实际需要比较完整文件名的次数。
如果Hash值不匹配,则文件名一定不匹配;如果Hash值匹配,再进行文件名的详细比较。
第三目录项
在exFAT 中没有长文件名和短文件名的区分,统一记录到文件名位置,如果文件名超出了第三目录项空间,就继续写入到下一个目录项中,
比如上面第一个文件 System Volume Information
的目录项
(二)实现原理
这里从文件创建、写入、读取、删除、查找的角度来介绍一下exFAT文件系统的实现原理
(1)文件创建
- 根据簇号位图查找空闲簇号
- 将簇号位图中该簇号标记为已使用
- 目录项中添加一个新的目录条目,记录新文件的元数据,包括文件名、文件大小、创建时间、起始簇号、HASH值、校验和等信息
(2)文件写入
- 通过目录项找到文件的起始簇号
- 如果数据超过了一个簇大小,通过簇号位图查找下一个可写入的簇
- 如果下一个簇与当前簇不连续,则将簇号信息同步到FAT表中,同时目录项文件碎片标志设置为0x01
- 如果一下簇与当前簇是连续的,FAT表信息就不需要修改
- 更新目录项的其它信息,比如文件大小和最后修改时间
(3)文件读取
- 通过目录项找到文件的起始簇号,通过件碎片标志判断文件是否连续
- 如果文件连读,可根据起始簇号直接按序读取
- 如果文件不连续,还需要根据FAT表查找下一个数据所在的簇号
(4)文件删除
- 文件删除是文件创建的一个逆过程
(5)文件查找
- 通过BPB(BIOS参数块)定位到根目录或是起始目录位置
- 读取目录簇数据
- 计算目标文件名的Hash值
- 遍历目录,逐个比较目录项的Hash值,如果Hash值相同,则进行文件名比较
- 文件名比较,使用UPCASE表(大写字符元文件)进行大小写无关的比较
- 检查匹配结果,如果匹配,则读取该目录项的详细信息并进行校验
- 如果未找到匹配项且当前目录有子目录,递归进入子目录继续查找
(三)优缺点
优点
(1)支持大文件和大容量卷
FAT32 支持最大文件4GB、最大卷2TB、每子目录最大支持65534个文件
exFAT 支持最大文件16EB、最大卷128PB、每子目录最大支持2796202个文件
(2)轻量级和高兼容性
exFAT与FAT32类似,文件系统的元数据比较小,适用于内存空间有限的嵌入式设备
同时,exFAT也可以兼容Windows、Linux、macOS 这几个常用操作系统
(3)支持元数据校验
exFAT 目录项上有校验和参数,当目录项内容损坏或是被篡改的时候,可以通过校验和进行检测
(4)效率比FAT32高
exFAT 采用簇号位图+簇号链表的方式来管理簇号,比FAT32只能通过簇号链表的方式效率高
exFAT 文件查找的时候,首先是根据Hash值查找,在匹配文件名,比FAT32只能比较文件名效率高
缺点
(1)专利和授权限制
微软拥有exFAT的多项专利,使用exFAT在某些情况下可能会涉及专利和授权问题,尤其是对于商业产品。
(2)缺乏日志功能
与NTFS相比,exFAT缺乏日志功能,这意味着在突然断电或系统崩溃时,数据损坏的风险更高。
(3)碎片问题:
虽然exFAT在一定程度上减轻了文件碎片的问题,但它依然没有NTFS那么高效地管理碎片。
结尾
以上就是关于exFAT文件系统的介绍,如有错误,欢迎在下面评论区批评指正,不胜感激。下一篇将介绍ext4 或是ntfs 文件系统。
---------------------------End---------------------------如需获取更多内容请关注 liwen01 公众号
文件系统(五):exFAT 文件系统原理详解的更多相关文章
- kafka原理和实践(五)spring-kafka配置详解
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- 节点地址的函数list_entry()原理详解
本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...
- (转)MySQL备份原理详解
MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之 ...
- Java网络编程和NIO详解6:Linux epoll实现原理详解
Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...
- NFS原理详解
NFS原理详解 摘自:http://atong.blog.51cto.com/2393905/1343950 2013-12-23 12:17:31 标签:linux NFS nfs原理详解 nfs搭 ...
- epoll原理详解及epoll反应堆模型
本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻 ...
- Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计
在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...
- Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程
上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...
- Influxdb原理详解
本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...
- 【转载】JAVA消息服务JMS规范及原理详解
转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...
随机推荐
- 第一篇:Python入门基础
主要内容 1.Python简介 2.变量 3.字符编码 4.用户交互 5.if 流程判断 6.while循环 7.for循环 一.Python简介 1.python的创始人为吉多·范罗苏姆(Guido ...
- nginx重新整理——————http请求的11个阶段中的preaccess[十四]
前言 简单整理一下preaccess. 正文 主要是介绍一下上文提及到的limit_req以及limit_conn. 里面是http_limit_conn_module 默认编译进去. 生效范围: 全 ...
- WPF开发随笔收录-操作注册表
一.前言 在windows平台软件开发过程中,注册表的操作是经常会遇到的一个场景.今天记录一下在操作注册表时遇到的一些坑: 二.正文 1.操作注册表,于是直接从网上找了一段代码来用 /// <s ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇
1.简介 这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法.答案当然是:肯定有的.宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享. ...
- 企业实施定制鞋厂ERP软件需要注意哪些问题?
企业实施定制ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: (1) . 确立ERP系统实施和定制的决策者: (2) . 做好前期咨询与调研工作: ...
- 力扣92(java&python)-反转链表Ⅱ(中等)
题目: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 . ...
- 冬奥幕后故事:从低碳火炬到AI裁判,十四年后中国科技再上场
北京冬奥会开幕后,一个段子在社交媒体上流传甚广:"夏奥开幕式和冬奥开幕式就差半年,这半年人类科技进步真大啊." 文|张婧怡 封面来源|北京日报客户端 冬奥季终于到来. 2月4 ...
- 监控最佳实践--redis及业务接口
简介: 监控最佳实践--redis及业务接口 1. 背景 1.1 问题 2020-12-04,客户侧redis集群版监控DB0 CPU突增至100%,导致数据库无法正常服务,经排查客户侧业务上存在2M ...
- 行业实战 | 5G+边缘计算+“自由视角” 让体育赛事更畅快
简介: 世界本是多维的.进入5G时代,观众对多维度视觉体验的需求日益增长,5G MEC网络与边缘计算的结合,具备大带宽.低延迟特性,使视频多维视觉呈现成为现实.在第二十三届CUBA中国大学生篮球联赛期 ...
- All in one:如何搭建端到端可观测体系
简介:一文看懂可观测! 作者:西杰 & 白玙 可观测的前生今世 系统的可观测与故障可分析作为系统运维中重要的衡量标准,随着系统在架构.资源单位.资源获取方式.通信方式演进过程,遇到了巨大挑战 ...