exFAT文件系统分析及DBR手动修复
王赟
【摘 要】随着exFAT文件系统在闪存中的广泛应用,exFAT文件系统下数据被破坏故障也越来越多,特别是由于DBR被破坏后产生的“提示格式化”故障更为普遍.这类故障一旦处理不当将给用户的数据带来不可估量的损失.本文通过实际案例详细分析exFAT文件系统结构,介绍手动修复DBR方法及过程,有效解决了此类问题,具有普遍应用价值.
【期刊名称】《山西电子技术》
【年(卷),期】2018(000)004
【总页数】4页(P62-64,74)
【关键词】exFAT文件;DBR;数据恢复
【作 者】王赟
【作者单位】山西职业技术学院,山西太原030006
【正文语种】中 文
【中图分类】TP316
0 引言
随着信息化的不断发展,闪存中单个大文件的存储需求越来越高,FAT32文件系统的闪存很多时候已不能满足需求,NTFS文件系统则不适用于闪存介质(执行每一个读写操作都需要对介质进行多次访问,对闪存芯片损伤较大)。exFAT(Extended File Allocation Table File System)文件系统的出现有效解决了这一难题,同时exFAT文件系统下数据恢复需求也随之增加,只有深入了解exFAT文件系统结构,才能有效恢复丢失数据,减少用户损失。
1 exFAT文件系统简介
1.1 exFAT文件系统结构
exFAT文件系统是由DBR、FAT表、位图文件(BITMAP)、大写文件(UPCASE)、数据区(DATA)组成[1]。结构示意图如图1所示。
DBRFAT表位图文件大写文件数据区(包括目录存放区以及用户数据)
图1 EXFAT结构示意图
1.2 DBR参数信息标注图(如图2所示)
下面对这些参数做详细的分析。
1) 跳转指令:固定值。
2) 铭文标志:EXFAT。微软将此处设置为EXFAT。
3) MBR保留:MBR到当前位置的扇区数。
4) 分区大小:分区所占用扇区数。
5) FAT表起始扇区:FAT表开始的扇区号。
6) FAT表大小:FAT表所占用扇区数。
7) 首簇起始扇区号:首簇即第二簇(位图文件)开始的扇区号。
8) 分区内总簇数:分区内一共有多少个簇(也是从二号簇开始计算)。
9) 根目录首簇号:根目录位于第几簇。
10) 卷序列号:无意义。
11) 每扇区字节数:2的9次,512。
12) 每簇扇区数:2的6次,64。
图2 DBR信息标注
在exFAT文件系统下0-8扇区都是作用分区,即结尾都写55 AA结束标志,一旦55AA被破坏,分区则提示未格式化。
1.3 FAT表分析
exFAT文件系统和FAT32有极大的相似性,数据都从第二簇开始记录,也都有FAT表[2]。在FAT32中,有两个FAT表,用来记录簇的占用情况。而在exFAT中,只有一个FAT表,并且
只有产生碎片文件时,才会在FAT表中记录[3]。FAT表的位置在DBR中偏移50H-53H位置中指定[4]。在图2中,FAT表的开始位于2048。FAT表的搜索标志为F8 FF FF 0F。FAT表的第一项记录了FAT表的开始标志。第二项紧接着就写了它的结束,用4个FF表示,所以第0簇和第1簇都被占用。数据就从第二簇开始记录了(这个等同于FAT32的FAT表)。第2簇记录位图文件可以看出占用了四个簇。第6簇记录大写文件字符,占用一个簇。第7簇开始就是用户存放数据的区域了。
1.4 簇位图文件
exFAT文件系统中FAT表之后就是位图文件了,但是位图文件并不是紧随FAT表之后的,FAT表之后一般还有一些保留扇区(视具体分区情况而定)。位图文件的位置在DBR参数中就有描述,偏移58H-5BH ,跳转到10240扇区。exFAT中的簇位图文件就类似于NTFS文件中的BITMAP文件,它的作用是用来记录分区中簇的使用情况。读法和NTFS中BITMAP的读法一样,如FF 07 转换为二进制,1111111100000111;,0-7簇已使用,8-12簇空闲,13-15簇已使用。
1.5 大写字符文件
exFAT中的大写字符文件就类似于NTFS中的UPCASE文件[5]。他就像一本字典,将Unicode编码中的每个字符都存储在其中,用于比较排序等。大写字符文件是exFAT文件系统中的第二号元文件,图2中DBR得知BITMAP共占用4个簇,(64*4=256)。BITMAP的搜索标志是固定的。搜索00 00 01 00,偏移位置512=0。
1.6 目录项分析
不管是FAT32、NTFS还是exFAT它们的文件系统中存储的每一个文件都有与其对应的目录项。在FAT32中,目录区是由长短文件名组成,短文件名记录文件的创建修改时间、开始簇以及文件大小。在NTFS中,每个目录项由一项MFT记录。MFT又分多个属性具体记录。从图2 DBR中得知,根目录首簇号是7,转换成扇区10240+(7-2)*64=10560。跳转到10560扇区, 在根目录区域包括卷标目录项,位图文件目录项,大写文件目录项等,下面我们做一个具体的分析。百度数据恢复
1.6.1 卷标目录项
卷标就是分区的名称,用户可以自行命名。exFAT对其管理的方式就是将其放在根目录下,用Unicode编码进行存储。
1.6.2 位图文件目录项
位图文件目录项和卷标目录项一样,都占用了32个字节,并且也有自己的搜索特征值81H。位图文件总是位于第二簇,即首簇。在其目录项中主要记录了它的开始位置和大小。
1.6.3 大写文件目录项
大写文件的目录项也是占用了32个字节,在目录项中也同样主要记录开始位置和大小。
1.6.4 用户文件的目录项
exFAT文件系统中的每个用户文件都有三个目录项。也就是我们的85H、C0H、C1H三个属性。
2 手动修复exFAT文件系统下被破坏的DBR
U盘(或者分区)双击打开时突然提示格式化,排除物理故障后就是DBR的问题了。修复DBR需要重构DBR的一些关键信息。首先去DBR的备份,exFAT 文件系统中DBR的备份位于
12扇区[3]。如果备份也遭到了破坏,那就需要手动修复被破坏的DBR信息了。首先从别的exFAT分区复制一个完整的DBR,然后对其关键值进行修改(图3中标注的值就是我们要修改的值),下面我们就其关键值的计算方法做具体说明。
图3 损坏的DBR
1) 计算MBR保留:首先确定当前分区是主分区还是逻辑分区,主分区就写当前DBR的真实位置,如果是逻辑分区就是相对于他的EBR的位置。我们这里只有一个分区(主分区),当前在0扇区就写0。
2) 分区大小:分区大小的计算首先要判断你的硬盘里有多少个分区,有没有保留扇区,我们这里只有一个分区,而且没有保留扇区,所以直接跳看他的扇区总数。如图4 。填写62914560。
图4 扇区总数
3) FAT表的开始:向下搜索F8 FF FF FF,偏移位置512=0。如图5(一般就位于2048扇区)。从FAT表中看出,第二簇是首簇,且位图文件占用4个簇,大写文件占用一个簇。
图5 FAT表
4) 簇大小:根据FAT看出大写文件占用一个簇,并且下一个文件是根目录文件,用根目录的开始扇区减去大写文件的开始扇区就是簇的大小。10560-10496=64 那么簇大小就是64。
5)首簇起始扇区号:就是位图文件开始的扇区号,我这里给大家提供两种算法。第一种:搜索特征值,位图文件开始的值大多为FF FF(存放的数据太少就不是FF FF了),可以直接搜索此值。第二种:根据下一个元文件(大写文件)推算。大写文件的搜索值是固定的,00 00 01 00,偏移512=0 。簇大小也算出来了,然后向上推几个簇。计算为10240扇区。
6)总簇数:(扇区总数-目录区以前的扇区)/ 簇大小(62914560-10240)/ 64 = 982880
7)根目录首簇号:从FAT表中看出了根目录位于第7簇。或者也可以到大写文件再向下推一个簇。
8)FAT表大小:FAT表示记录分区内所有簇占用情况的,每四个字节为一项。总簇数我们也知道,但是FAT表中还有开始的两项(F8 FF FF FF FF FF FF FF)也需要加上。然后每个扇
区有128项FAT项,用这个值除以128。(982880+2)/ 128 = 7678.76。但是在exFAT系统中,FAT表的大小都是簇大小的整数倍,所以不能直接将这个值写进去。7678.76四舍五入就是7679,7679 / 64 = 119.9 ,近似为120。然后(120+1)*64 = 7744。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。