
任务2.2 恢复FAT32文件系统中丢失的文件
2.2 恢复FAT32文件系统中丢失的文件

2.2.1 删除文件操作
数据恢复是在数据丢失后通过技术手段恢复丢失的文件。数据丢失有很多种情况,例如:文件误删除、目录破坏或者丢失、误格式化等。本节对文件删除进行介绍,了解文件删除前后文件系统的结构变化。
1.文件删除前的底层分析
首先分析FAT32文件系统下正常文件删除前后文件系统发生的变化,主要对比FAT、根目录、文件内容扇区等内容。以“test1.txt”文件为例,讲解文件的各部分结构。
该文件在FAT32文件系统中分为3部分管理,分别为文件目录项、FAT和数据区。文件“test1.txt”目录项的内容如图2-7所示。

图2-7 文件“test1.txt”目录项内容
从目录项可知,该文件只占用一个簇,即3号簇,文件大小为11H(十进制值为17),图2-8为该文件在FAT中的存储情况。

图2-8 文件“test1.txt”在FAT中的存储情况
使用WinHex跳转至3号簇,“test1.txt”文件内容如图2-9所示。

图2-9 “test1.txt”文件3号簇的内容
2.文件删除后的底层分析
现在把“test1.txt”文件彻底删除,再对FAT、文件目录项和数据区进行分析。
首先彻底删除“test1.txt”文件,查看其目录项,如图2-10所示。

图2-10 “test1.txt”文件删除后的目录项
从图中可以看到文件名的第1字节“54”已改为“E5”,其他字节没有发生变化。
注:因为FAT32文件系统是用4字节记录文件开始簇号的,当文件被删除后,文件开始簇号高位的2字节是要被清零的,所以“文件开始簇号”实际上已经发生了改变,因为这个文件的开始簇号高位2字节本身就是零,所以看不出变化。另外,文件的大小没有发生变化。
高位簇在后面章节中会详细讲解。
“test1.txt”文件删除后,FAT的情况如图2-11所示。
通过对比可以发现,3号簇由FFFFFF0F变为00000000,而“test1.txt”文件就放在3号簇。跳转至3号簇,文件数据区如图2-12所示。

图2-11 “test1.txt”文件删除后的FAT

图2-12 3号簇的内容
可以发现3号簇所在的文件内容没有发生任何变化。数据区内容是最重要的,如果数据区被清除了,则文件将无法恢复,正因为数据内容还在,所以提供了数据恢复的可能性。通过以上对比,可以总结出文件删除后文件系统发生的变化。
1)对应文件内容占用簇的FAT表项清零,则表示该簇可以被其他文件使用。如果没有写入新文件,那对应簇的文件内容不变,但如果有新文件写入,则有可能会写入该簇,原有的内容会在新文件写入时会被覆盖,原文件可能无法再恢复成功。
2)目录区中文件目录项首字节修改成“E5”。
2.2.2 恢复删除的文件
通过对FAT32文件系统删除文件前后进行对比,可以得出结论:文件删除后只是FAT中的簇链被清零,文件目录项的首字节修改成“E5”,数据区无变化。对于FAT中簇链连续的被删文件,其恢复过程相对简单。对于簇链不连续的被删文件,恢复过程较复杂,恢复成功的可能也相对较小。
文件删除的恢复方法通常有以下两种。
1.通过底层数据恢复软件(WinHex)恢复
用WinHex直接打开故障磁盘,在目录项中可以看到文件第一个字符变成了“?”,如图2-13中①处。

图2-13 故障磁盘文件目录项
只需要右击文件,在弹出的快捷菜单中选择“Recover/copy”命令(图2-13中②处),就可以直接将被删除的文件恢复到目标位置中。
2.使用R-Studio恢复
使用R-Studio打开故障磁盘,分区内容如图2-14所示。

图2-14 故障磁盘分区内容
从图中可知,“?est1.txt”为被删除文件,选择该文件,右击,从弹出的快捷菜单中选择“恢复”命令或者按〈Ctrl+F2〉快捷键,将其恢复至目标位置,如图2-15所示。
恢复的“?est1.txt”文件可以正常打开,如图2-16所示。
至此,完成通过R-Studio对被删除文件的恢复。

图2-15 恢复文件

图2-16 恢复的“?est1.txt”文件内容
2.2.3 有高位簇文件的删除恢复
数据存储时,当文件较多或较大时,低位簇被全部占用,则须启用高位簇。文件删除的同时会清除目录项中的高位簇,导致文件所在位置错误,这时按照之前文件删除的恢复方法恢复出来的文件是错误的。
下面以恢复“106.txt”文件为例,分析高位簇文件的删除恢复。
“106.txt”文件删除前的目录项如图2-17所示。

图2-17 “106.txt”文件删除前的目录项
从图中可知“106.txt”文件的高位簇号(14H~15H处)为0003H,即3,低位簇号(1AH~1BH处)为50F5H,即20725。彻底删除“106.txt”后其目录项内容如图2-18所示。
由2.2.1节可知文件删除后,文件目录项中的低位簇、文件大小未变化,文件名的首字节修改成“E5”,FAT中相应的表项簇链被清空,而高位簇文件被删除后会增加一个变化:目录项的高位簇删除。
恢复高位簇删除文件,主要是确定其高位簇号。通常会用以下两种方法完成高位簇删除文件的恢复。
1.使用R-Studio扫描
使用R-Studio扫描到的文件通常非常多,有的不一定是需要的,这时需要从大量数据中找到所需恢复的文件。扫描结果如图2-19所示。

图2-18 “106.txt”文件删除后的目录项

图2-19 R-Studio扫描后的分区文件
双击“?06.txt”文件,内容如图2-20所示。由图可知,此txt文件内容正常,说明文件定位正确,而且是被删除文件。根据目录中的前后文件判断,此文件为被删除的“106.txt”文件。

图2-20 “?06.txt”文件内容及相应属性
选择“?06.txt”文件,右击,在弹出的快捷菜单中选择“恢复”命令,并将此文件恢复至目标位置。恢复出的文件可正常打开,内容如图2-21所示。

图2-21 “?06.txt”文件内容
2.通过子目录下其他文件的高位簇来定位
被删文件的同目录下有正常文件存在时,可以定位至正常文件的目录项,通过尝试正常文件高位簇来定位被删文件,也可以通过被删文件所在子目录的高位簇来推出被删文件的高位簇。
在图2-22中,“?06.txt”文件的前后文件均为正常文件,在FAT32文件系统中,通常会按文件的存储顺序依次写入文件的目录项。从目录项判断其前后文件所在的高位簇为3,故此文件的高位簇为3的可能性很大。

图2-22 “?06.txt”文件所在子目录区
此文件低位簇为50F5H,即20725,高位簇为3,计算得出簇号为3×65536+20725=217333,定位至相应的位置,内容如图2-23所示。

图2-23 “?06.txt”文件所在区域
由图2-23可知文件定位正确,此文件的高位簇为3。可选中文件内容,按〈Ctrl+Shift+N〉快捷键,将新建文件保存至目标位置,完成高位簇文件恢复。
2.2.4 任务实施
下面以实例讲解如何提取高位簇文件。此例中演示如何手工提取“常用器件01.rar”文件。操作步骤如下。
(1)加载磁盘,定位文件目录项
在Windows操作系统中加载磁盘,使用WinHex打开磁盘及分区,定位文件所在的目录项,如图2-24所示。
(2)根据文件目录项判断文件是否为高位簇文件
由图2-24可以判断文件已被标记删除,文件的目录项中高位簇为0,此时需要判断此文件是否位于高位簇,读取此文件的低位簇号0801H,即2049,此例中簇大小为16,跳转至2049号簇,即73712号扇区,内容如图2-25所示。

图2-24 文件目录项

图2-25 2049号簇所在位置数据区域
从图中可知数据开头部分不符合“rar”文件头的要求,因而可判断此文件是高位簇文件。
(3)根据目录区及前后文件判断高位簇号,并计算起始簇号
根据前面提到的方法,利用文件所在的子目录区目录项所记录的高位簇号进行尝试,从而确定文件起始簇号。此例中目录区所在的高位簇号为5,文件所在的低位簇号为2049,代入公式
文件起始簇号=高位簇号×65536+低位簇号
进行计算,文件的起始簇号为5×65 536+2049=329 729,簇大小为16,即5 316 592扇区,记录文件的大小,跳转至文件的起始扇区。
(4)定位文件,提取文件
跳转至文件起始扇区,此区域数据符合“rar”文件头的格式,判断文件高位簇号正确,根据文件大小提取文件至目标位置,如图2-26所示。

图2-26 提取文件
(5)测试文件
提取的文件是“rar”格式,利用解压软件打开文件,单击“测试”按钮检测文件的好坏,如图2-27所示,该文件没有损坏,提取文件正确。

图2-27 测试文件
至此,高位簇删除文件“常用器件01.rar”恢复完成。
2.3 恢复子目录
