任务2.1 恢复FAT32文件系统的DBR
任务分析
某公司一位职员习惯使用U盘存放数据,在某次使用时,U盘被格式化。因为存有重要资料,且没有备份,找到维修人员进行数据恢复。
维修人员把U盘插入Windows系统的计算机上,使用数据恢复软件打开该磁盘,发现磁盘0扇区全部为0,如图2-1所示,无法识别文件系统类型,判断DBR被病毒破坏。向下搜索55AA,在第6扇区找到一个DBR备份,经过分析得出该DBR为被破坏的DBR备份,将该DBR备份复制到0扇区就可恢复U盘。
FAT32文件系统的DBR备份在第6扇区,如果完好,可以直接复制备份至DBR位置,从而完成DBR修复。
图2-1 扇区故障
2.1.1 FAT32文件系统
FAT32文件系统的引导区DBR位于文件系统的0号扇区,是文件系统隐藏区域的一部分。DBR中记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。在FAT文件系统中,同时使用扇区地址和簇地址两种地址管理方式。只有存储用户数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。
FAT32文件系统将逻辑盘的空间划分为3部分,依次是引导区(BOOT区)及保留区、文件分配表区(FAT区)和数据区(DATA区)。引导区和文件分配表区又合称为系统区。具体结构如图2-2所示。
图2-2 FAT32 整体结构
2.1.1 FAT32文件系统
1)引导区及保留区:在DBR之后还有一些保留扇区,在实际恢复中可以不管保留区。
2)FAT区:也称为文件分配表区,用来记录分区中文件系统数据区对应簇的使用状态及文件不连续状态下前后链接关系。FAT32文件系统中有两个FAT表,正常只需要一个FAT1,FAT2为FAT1的备份。FAT表有固定的开头F8 FF FF 0F。
3)数据区是FAT32文件系统的核心区域,数据文件均存储在该区域,其中也包含了根目录和子目录,数据区的起始位置就是根目录所在的位置,根目录所在位置为2号簇。
簇的概念:簇是比扇区大的一个存储单元,类似装有多瓶牛奶的一箱牛奶,每一瓶相当于一个扇区,簇就相当于一箱牛奶。一箱牛奶中具体包含几瓶牛奶,不同厂商有不同的标准,同理,簇大小一般分为4、8、16、32、64、128等,这些在系统格式化时已自动分配,一般FAT32文件系统的最大簇有128个扇区。
2.1.2 FAT32数据结构
FAT32文件系统的DBR由5部分构成,分别是跳转指令、系统版本号、BPB参数、引导程序和结束标志,如图2-3所示。
图2-3 FAT32 的DBR
通过FAT32文件系统的DBR模拟修改参数实践可以总结出:在FAT32存储介质中,当文件系统版本和引导程序全部清零之后,存储介质仍可正常使用,但跳转指令、BPB参数和结束标志3部分中,任何一部分遭到修改都会使U盘文件系统损坏,这就说明在DBR中只要记住部分关键参数就可以。结构如表2-1所示(加底纹的为关键参数)。
表2-1 DBR参数
(续)
一般U盘或其他TF卡在格式化时系统会自动分配参数,因为只有一个分区,所以可以不用MBR(主引导)。有的系统在格式化U盘或其他TF卡时产生MBR,而有的则直接以分区出现无MBR(此例无MBR)。MBR的相关内容在项目5中详细介绍,在学习本项目时如果遇到MBR相关问题可以直接进入项目5学习相应的知识,或者使用随书提供的镜像示例文件。
因为DBR很重要,所以系统一般会有备份,备份DBR在相应分区的第6扇区,参数与DBR一致。
2.1.3 重要概念
2.1.3 重要概念
1.目录项
目录项是FAT32文件系统的重要组成部分,其主要作用是管理文件及目录。分区中的每个文件和目录均被分配32字节的目录项,用以描述文件或目录的文件名、属性、大小、起始簇号和时间、日期等信息。
分区根目录下的文件及文件夹的目录项存放在根目录区,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区和子目录区都在数据区中。
FAT32的目录项分为4类:短文件名目录项、长文件名目录项、“.”目录项和“..”目录项、卷标目录项。
2.短文件名目录项
短文件名目录项占32字节,包含文件名、扩展名、属性、起始簇号及文件大小等内容,其含义见表2-2。
表2-2 FAT32短文件名目录项的含义
文件属性的具体值见表2-3。
表2-3 文件属性
根目录中存放若干文件,如图2-4所示,每个文件使用目录项表示,在查看文件所在位置及文件大小时选择短文件名目录项。图中,标①处为主文件名;标②处为扩展名;标③处为文件所在的高位簇号及低位簇号;标④处为E5,当文件被删除时会把第1字节修改成E5;标⑤处为文件属性。
3.长文件名目录项
从Windows 95开始,文件名“8.3”格式的限制被打破了。文件名可以超过8个字符,可以使用中文,扩展名也可以超过3个字符,这种格式的文件名就称为长文件名。当创建长文件名时,对应的短文件名的存储有以下3种处理原则。
图2-4 目录项
1)取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变。
2)如果已存在这个名词的文件,则符号“~”后的数字自动增加。
3)出现DOS和Windows3.x非法字符,则以下画线“_”替代。
每个长文件名目录项也占用32字节,一个目录项作为长文件名目录项使用时可以存储13个字符,如果文件名很长,就需要很多个目录项,这些目录项按倒序排列在其短文件名目录项之前。长文件名各目录项的含义见表2-4。
表2-4 FAT32长文件名目录项的含义
4.根目录
FAT32文件系统中,统一在数据区中的根目录区为根目录创建目录项,并由FAT表为文件的内容分配簇来存放数据。根目录区的首簇由格式化程序指派,并把簇号记录在DBR的BPB中。
5.“.”目录项和“..”目录项
在子目录所在的文件目录项区域中,总有两个特殊的目录项,“.”目录项和“..”目录项,其中“.”目录项描述子目录本身的信息,“..”目录项描述上一级目录的信息。
6.高位簇
在文件目录项的偏移“14H~15H”处是文件起始簇号的高位簇,偏移“1AH~1BH”处是文件起始簇号的低位簇。这4字节共同构成了文件的起始簇号。在手工提取文件时,需要计算文件的起始簇号,计算公式:
文件起始簇号=高位簇×65536+低位簇
7.FAT
FAT(File Allocation Table,文件分配表)是FAT32文件系统中非常重要的组成部分,FAT有两个重要作用:描述簇的分配状态及标明文件或目录的下一簇的簇号。其作用及特点具体如下。
1)FAT由FAT表项组成,FAT32中每个表项占32位(即4字节)。一个扇区512字节,每个表项占4字节,则一个扇区可记录128个表项(512/4=128)。
2)FAT表项从0开始编号。0号表项与1号表项被系统保留并存储特殊标志内容。从2号表项开始,每个表项描述的地址对应于数据区的相应簇号。文件系统的数据区从2号表项(簇)开始记录,也就是根目录所在的簇号。
3)当文件系统被创建时,在FAT1与FAT2的0号表项与1号表项写入特定值。0号表项在完好的FAT32文件系统中固定值为F8 FF FF 0F,1号表项是文件系统的错误标志。
4)如果某个簇未被分配使用,它对应的FAT表项值为0;当某个簇已被分配使用,则它对应的FAT表项内的表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记(0x0FFFFFFF)。
5)如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。
6)当分区格式化后,用户所存储的文件就会以簇的形式记录在文件系统的数据区中,而且一个文件至少占用一个簇。如果文件只占用一个簇,对应的FAT表项将会写入结束标记。如果文件占用多个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表项中写入结束标记。
2.1.4 任务实施
将磁盘插入计算机后,系统提示格式化,如图2-5所示。注意一定要单击“取消”按钮,如果单击了“格式化磁盘”按钮恢复会稍麻烦,在本项目后面会介绍。
图2-5 提示格式化
修复步骤如下。
(1)打开磁盘
使用WinHex打开磁盘,发现0号扇区(此例中为DBR所在扇区)被清零。
(2)搜索
1)通过Find Hex Values(查找十六进制值)功能搜索有用的信息(单击图2-6中标①处所示的“HEX”按钮,则打开对话框),DBR被破坏,最简单的恢复方法是尝试用备份DBR进行修复。
图2-6 查找十六进制值
2)DBR的标志可以通过表2-1中列为固定值的参数进行查找,例如可以搜索“EB5290”,也可以搜索“55AA”。此例搜索“55AA”(图2-6中标②处)。从当前位置往下搜索(图2-6中标③处),注意偏移量是“512=510”(图2-6中标④处),即从每个扇区的510向下开始匹配(因为“55AA”所在位置为一个扇区的最后2字节),如果搜索“EB5290”,则偏移量为“512=0”。单击“OK”按钮,开始搜索(图2-6中标⑤)。
(3)利用备份DBR恢复DBR
通过短暂的搜索,在第6扇区搜索到疑似DBR备份,通过向下验证FAT及根目录的方式,确定其为有效DBR备份。将备份扇区数据选中,通过按〈Ctrl+Shift+C〉键复制,再跳转至0扇区(DBR所在),通过按〈Ctrl+B〉键粘贴并保存。
(4)重新加载磁盘
将磁盘重新加载,系统已不再提示格式化,磁盘可以正常打开,也可以正常打开磁盘内的文件。
至此磁盘修复完毕。
〈Ctrl+B〉键用于覆盖写入,〈Ctrl+V〉键用于插入写入,两者用途不同。修复完故障硬盘后须重新加载刷新数据。如果是U盘,需要重新插拔,虚拟盘则需要卸载后重新加载。