手工数据恢复你也行:FAT文件系统DBR损坏后的恢复

简介:




对于FAT16文件系统,因为没有DBR备份扇区,所以当DBR损坏时,就需要根据分区中的数据存储情况重建其DBR,手工恢复如此,软件也如此,只不过软件是虚拟出一个文件系统而已。

对于 FAT32 文件系统,如果只是 DBR 意外损坏,位于文件系统 6 号扇区的备份完好的情况下,可以使用备份 DBR 恢复主 DBR 。如果备份 DBR 也已经损坏,同样只能通过重建 DBR 来恢复其中的数据。
CIH 病毒破坏后的结果应该算是重建 DBR 的最好案例,也是使用 FAT2 恢复 FAT1 的最好案例。 CIH 病毒对文件系统的破坏方式是使用随机码由文件系统的起始处开始覆盖,通常覆盖掉 FAT1 的部分内容后即导致计算机死机并崩溃。如图 10.32 所示,加亮的部分被 CIH 病毒进行了覆盖写入。
下面我们仍以随书光盘中的虚拟磁盘文件 format.hdd 为例,使用其中的第二个分区,即 F32 分区来说明在这种情况下如何使用 FAT2 恢复 FAT1 ,并根据分区中的数据存储情况计算 BPB 参数从而重建 DBR
首先将虚拟磁盘文件加载为虚拟盘后,向 F32 分区中拷入一些文件和目录(也可以直接在其中建立一些目录和文件),以营造数据存储环境。为了便于讲述,我们在其中建立三个目录并分别命名为“目录 1 ”、“目录 2 ”、“目录 3 ”(见图 10.33 ),每个目录下都有一个文件或目录。
 
然后,我们将保留区域及 FAT1 中的内容全部清空,制造 DBR FAT1 被破坏的实际情景(该镜象文件位于随书光盘 A 的“第 10 章”目录下,文件名为 DBR_delete.hdd 。读者可以将其拷贝到本地磁盘根目录下跟随我们一起完成 DBR 的重建过程。恢复成功后的镜象文件请保存好,在后面的删除分析章节中我们将会使用这个文件)。完毕后,将虚拟磁盘卸载后重新加载,发现该分区的卷标已经不再显示,试图打开分区时提示未格式化。
这时候,在 Winhex 中的逻辑磁盘内选择该分区也无法将其打开, Winhex 会提示没有找到可识别的文件系统。这是因为使用 Winhex 直接打开一个文件系统分区时,也是通过调用 DBR 中的参数对文件系统中的内容进行解释, DBR 损坏后当然也就无法打开了。所以,我们应该选择打开物理磁盘,然后在打开的物理磁盘界面中单击   按钮选择该分区将其打开。如图 10.34 所示。
 
在物理磁盘界面中之所以能够打开 DBR 已经损坏的分区,是因为这时候 Winhex 并不是使用该分区的文件系统参数对分区内的数据进行解释,而只是利用分区表对该分区的起始位置及大小描述将其空间呈现给我们而已。
分区打开后,我们看到分区 DBR 已经不存在,向下翻看几十个扇区也没有找到可用的内容。在实际工作中,遇到这种情况时,我们有可能已经了解到该分区原来的文件系统格式为 FAT32 ,也有可能是不知道的。因此,我们第一步应该进行尝试性搜索,来确定原文件系统的类型。下面我们就开始对该分区进行分析与恢复。
步骤1  通过搜索十六进制字节“F8FFFF”寻找FAT表。搜索位于某个扇区偏移0字节处的“F8FFFF”是为了尝试寻找FAT表,如果能找到FAT表,说明原来的文件系统是FAT系列文件系统,然后根据FAT表的特征值进而判断是哪一种FAT类型。这也是我们不建议直接搜索“F8FFFF 0F ”的原因,因为目前没有确定该分区就是一个FAT32分区,如果是一个FAT16分区的话,它的FAT表起始处就会是“F8FFFFFF”,所以搜索它们的共性更容易搜索到目标。搜索十六进制“F8FFFF”时,设置如图10.35所示。
 
很快,在 779 号扇区找到一个“ F8FFFF ”,如图 10.36 所示。
 
可以看到,这个扇区的内容是一个 FAT32 FAT 表,说明原来的文件系统为 FAT32 。因此,我们下面要做的就是重建它的 DBR
重建 FAT32 DBR 需要以下几个参数:保留区大小扇区数、 FAT 表个数(通常为 2 )、每 FAT 表大小扇区数、根目录簇号(通常为 2 号簇)、每簇扇区数、分区前隐含扇区数及分区大小扇区数(这两个数值可以在该分区的分区表项中找到)。下面我们就来分析并计算这些参数。
通常 FAT1 的起始处位于 40 号扇区以前,而我们搜索到的这个 FAT 表位置在 779 号扇区,所以我们应该考虑到它是 FAT2 ,我们按 F3 键继续向下搜索,没有再次找到该值,说明这确实是 FAT2 的起始扇区。我们可以画一个简单的示意图。如图 10.37 所示。
 
步骤2   寻找根目录。寻找根目录是为了确定 FAT2 的大小,从而可以使用 FAT2 恢复 FAT1
寻找根目录的方法有多种:
u  一种是搜索回收站。在文件系统刚刚创建时,该文件系统下是没有回收站“Recycled”目录的。在第一次将数据删除至回收站时,系统即会在根目录下建立该目录。因此,可以通过搜索字符“Recycled”来寻找根目录。但理论上来讲,如果在第一次分配给根目录的2号簇装满目录项前没有进行过删除操作,那么Recycled目录就会建立在分配给根目录的后续簇空间中,而这个簇可以是未分配的任何一个簇。在这种情况下,我们通过搜索“Recycled”找到的根目录就不是根目录的起始簇。
u  还有一种方法是估算法。由于FAT2起始于779号扇区,通常FAT32文件系统的FAT1起始于3040号扇区的位置,由此可以估算出一个FAT表的大小扇区数,然后向后跳过该扇区数,手工查找根目录。根目录前为FAT2的结尾处,而这个结尾处一定会有大量的“00”存在,可以据此判断是否正确地找到了根目录的位置。
u  第三种方法是搜索卷标。如果为文件系统设置了卷标,则根目录下的第一个目录项一定是卷标目录项。
u  第四种方法是搜索较早建立于根目录下的目录或文件名。
其他方法我们不再一一列举,读者可以在实际恢复中根据不同情况区别对待,灵活掌握。
为了向读者介绍如何在 Winhex 中搜索字符,在此我们使用第四种方法。假定我们知道根目录下有一个目录的名字为“目录 1 ”,在 Winhex 工具栏中单击搜索文本字符按钮   或选择菜单栏中的 Search | Find Text ,即可弹出文本搜索设置框。如图 10.38 所示。
 
在设置框中进行如下设置:
u  在搜索文本框中输入“目录1”。
u  字符集选择“ASCII/Code page”,这是因为FAT32使用ASCII码存储文本字符。如果在NTFS下,则需要选择“Unicode”。
u  因为我们当前所处的位置是FAT2的起始扇区,要搜索的根目录位于其后,因此在搜索方向中选择“Down”,即向下搜索。
u  每个目录项的大小为32个字节,所以我们只需要位于可以被32整除的偏移处的结果,因此偏移调制设置为“?MOD 32   0
设置完毕后单击 OK 即开始搜索,最终在 1520 号扇区找到“目录 1 ”。同时还可以看到了其他两个目录的目录项。也如图 10.39 所示。
 
我们将根目录添加进文件系统结构示意图中,如图 10.40 所示。
 
现在,我们可以计算出 FAT2 的大小为 1520 – 779   741 个扇区。因此, FAT1 的起始位置为 779 – 741   38 号扇区,如图 10.41 所示。
 
 
至此,我们已经得到的参数有:保留区为 38 个扇区;每 FAT 大小为 741 个扇区。我们只要再计算出每簇大小扇区数就可以进行文件系统的修复工作了。
步骤3   计算每簇大小扇区数。在此我们只介绍计算 FAT 文件系统每簇大小扇区数最常用的方法,这种方法需要依赖于分区原来的根目录下有子目录,如果分区中原来没有子目录,只在根目录下存储所有的文件,则无法使用此方法。不过这种情况毕竟很少出现,没有哪个用户会这样存储数据。
我们知道,为子目录分配的簇空间中,第一个目录项一定是一个“ . ”目录项,这个目录项用以描述该子目录本身,其中有一个参数描述了它现在所处的扇区的簇号。我们利用两个子目录间的起始扇区号差和它们的簇号差,就可以计算出每个簇的大小扇区数。甚至只需要利用一个子目录和根目录间的扇区号差及簇号差就可以计算得到。
要搜索一个子目录,可以在 Winhex 中搜索位于扇区起始处的十六进制值“ 2E20202020202020202020 ”,这是“ . ”后面跟随 10 个空格的十六进制表现形式。其搜索设置框如图 10.42 所示。
第一个搜索到的子目录起始于 1521 号扇区,由第一个目录项可以获知该扇区所在的簇号:偏移 0x14 0x15 为簇号的高二位,偏移 0x 1A 0x1B 处为簇号的低二位,不要忘记,这两个位置的数字本身都是以 little-endian 顺序存储的,也就是低位在前,高位在后。因此该扇区的簇号为 0x00000003 ,即 3 号簇。如图 10.43 所示。
 
其实,我们现在已经可以利用该子目录的信息和根目录的信息计算出每簇的大小扇区数:根目录的簇号为 2 ,起始扇区为 1520 ;当前子目录的簇号为 3 ,起始扇区为 1521 ,所以: ( 1521 – 1520 ) / ( 3 – 2 ) = 1 ,即每簇大小为 1 个扇区。
由于在实际当中,有可能某个子目录的信息是过去某个文件系统遗留下来的,所以为了确保结果正确,首先应该验证计算结果是否为 2 的整数次幂,如果不是 2 的整数次幂,结果一定是错误的。另外,就是要多搜索几个子目录,根据不同子目录间的关系计算簇大小,以验证当前的结果是否正确。为了节省篇幅,我们在此不再对这个过程进行讲述。
步骤  从该分区的分区表项中获得其分区前隐含扇区数及分区大小扇区数。如图 10.44 所示,在物理磁盘界面中,单击按钮   ,然后选择丢失分区下的 Partition table(template) 即可跳转到该分区的分区表所在扇区,并自动用模版将其打开,可以从中获知该分区前的隐含扇区数及分区大小扇区数。
从其分区表项中可知,该分区的分区前隐含扇区数和分区大小扇区数分别为 63 96327
步骤5   重构文件系统。目前为止,我们已经得到了所有需要的参数:保留扇区数 38 FAT 表个数 2 ,每 FAT 表大小扇区数 741 ,每簇扇区数 1 ,由分区表得到分区前隐含扇区数和分区大小分别为 63 96327 ,可以重构文件系统了。
1)     利用我们前面讲到的备份 DBR 的方法,复制 FAT2 ,然后转到 38 号扇区将其写入,重建 FAT1
2)     复制一个 FAT32 DBR 扇区,写入 0 号扇区。如果没有现成的 FAT32 DBR ,可以虚拟一个磁盘,划分一个分区后将其格式化成 FAT32 文件系统,然后复制它的 DBR 扇区。恰好我的计算机 C 分区是 FAT32 ,所以直接将它复制过来。然后修复其中的参数。如图 10.45 所示。
可以看到,我们需要修改的参数只有图中所示的四个位置。修改完毕后,将其写入 0 号扇区。
提示:偏移 0x43 处的卷序列号也做了修改,因为这个 DBR 是由笔者计算机的 C 分区拷贝而来,为了避免冲突造成的不稳定,所以对其进行了修改。读者在实际恢复过程中也应该注意到这一点。
3)     0 号扇区复制一份,备份至 6 号扇区。
步骤6   重新识别硬盘。在我们的讲解中使用的是虚拟磁盘,所以将虚拟磁盘卸载并重新加载后原分区再现。如果在实际恢复中使用硬盘,可以在设备管理器中将其卸载后再检测新硬件,硬盘被重新加载后即可完成恢复。
在恢复过程中我们可以注意到,对于 Fsinfo 信息扇区可不必理会,并不影响数据的正常恢复。
 
《摘自数据重现-文件系统原理精解与数据恢复最佳实践》
 






















本文转自老骥伏枥51CTO博客,原文链接: http://blog.51cto.com/sjhfml/137126  ,如需转载请自行联系原作者
相关文章
|
6月前
|
数据挖掘 Linux
服务器数据恢复-重装系统导致XFS分区丢失的数据恢复案例
服务器数据恢复环境: MD1200磁盘柜中的磁盘通过RAID卡创建了一组RAID5阵列,分配了一个LUN。在Linux操作系统层面对该LUN进行了分区,划分sdc1和sdc2两个分区,通过LVM扩容的方式将sdc1分区加入到了root_lv中;sdc2分区格式化为XFS文件系统。 服务器故障: 服务器重装系统后,磁盘分区改变,sdc2分区丢失,无法访问。
服务器数据恢复-重装系统导致XFS分区丢失的数据恢复案例
|
存储 算法 数据挖掘
服务器数据恢复—Zfs文件系统误删除文件的数据恢复案例
一台zfs文件系统服务器,管理员误操作删除服务器上的数据。
服务器数据恢复—Zfs文件系统误删除文件的数据恢复案例
|
存储 安全
u盘文件损坏怎么恢复数据 ,兔八哥爱分享轻松带你恢复数据
随着电脑和移动设备的广泛使用,U盘已经成为了人们在数据传输和备份中不可或缺的重要工具之一。特别是在计算机方面,一天要用的数据很多。但有时,我们可能会遇到U盘文件损坏的情况,导致无法访问里面的数据,又不清楚是什么原因造成的,这也是很让人烦恼的。那我们可以用什么方法呢?其实先了解u盘出现损坏的原因再对症下药会简单很多。今天兔八哥爱分享就给大家分享一些 u盘恢复数据方法,操作方法简单实用,大家可以试试!
2508 0
u盘文件损坏怎么恢复数据 ,兔八哥爱分享轻松带你恢复数据
|
15天前
|
数据挖掘 Linux 数据库
服务器数据恢复—reiserfs文件系统数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区+LVM卷+swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障: 服务器操作系统在运行过程中由于未知原因崩溃,管理员重装操作系统后发现分区结构变为:boot分区+swap分区+LVM卷(按照顺序),LVM卷中文件系统位置有个空的reiserfs超级块。 用户方需要恢复reiserfs文件系统中所有数据,包含数据库、网站程序与网页、OA系统中所有办公文档。
服务器数据恢复—reiserfs文件系统数据恢复案例
|
6月前
|
数据挖掘 Linux
服务器数据恢复—误操作导致xfs文件系统丢失,无法访问的数据恢复案例
一台服务器+MD1200磁盘柜通过RAID卡创建了一组RAID5阵列并分配一个LUN。在Linux系统层面将该LUN划分了sdc1和sdc2两个分区。通过LVM扩容的方式将sdc1分区加入到了卷组中的一个逻辑卷中,sdc2分区格式化为XFS文件系统使用。Linux操作系统采用的xfs文件系统。
服务器数据恢复—误操作导致xfs文件系统丢失,无法访问的数据恢复案例
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—V7000存储NTFS文件系统分区数据恢复案例
服务器存储数据恢复环境: 一台挂载在Windows server服务器上的v7000存储。存储空间划分了一个分区,采用NTFS文件系统,存放oracle数据库。 服务器存储故障: 服务器在运行过程中宕机,于是管理员重启服务器。服务器进入系统自动进行磁盘扫描修复时,管理员强制关机并断开了存储和服务器之间的连接,导致这台存储上的文件系统损坏,报错“文件或目录损坏且无法读取”。
|
3月前
|
存储 运维 数据挖掘
服务器数据恢复—修复xfs文件系统导致数据丢失的数据恢复案例
某公司一台服务器,连接了一台存储。该服务器安装linux操作系统,文件系统为xfs。 在运行过程中该服务器出现故障,管理员使用xfs_repair工具试图对xfs文件系统进行修复但失败,服务器中所有数据丢失。
|
5月前
|
Linux KVM 数据库
服务器数据恢复—EXT4文件系统下误删除虚拟机数据恢复案例
服务器数据恢复环境&故障: 1台服务器,Linux操作系统+EXT4文件系统,部署了数台KVM虚拟机,每台虚拟机包含一个qcow2格式的磁盘文件,和一个raw格式的磁盘文件。 工作人员操作失误删除了3台服务器上的KVM虚拟机,需要恢复raw格式的磁盘文件。
服务器数据恢复—EXT4文件系统下误删除虚拟机数据恢复案例
|
5月前
蓝易云 - 服务器数据恢复-reiserfs文件系统损坏如何恢复数据?
请注意,这只是一种可能的数据恢复流程。具体的流程可能会根据你的具体情况有所不同。如果你不确定如何进行,最好寻求专业的帮助。
29 0
|
6月前
|
数据挖掘 Linux
服务器数据恢复—XFS文件系统服务器数据恢复案例
服务器数据恢复环境: 服务器使用磁盘柜+RAID卡搭建了一组riad5磁盘阵列。服务器上层分配了一个LUN,划分了两个分区:sdc1分区和sdc2分区。通过LVM扩容的方式,将sdc1分区加入到了root_lv中;sdc2分区格式化为XFS文件系统。服务器安装的Linux系统。 服务器故障: 服务器重装操作系统后sdc磁盘分区发生改变,原sdc2分区丢失,无法访问。
服务器数据恢复—XFS文件系统服务器数据恢复案例