当前位置:文档之家› 硬盘数据恢复技术原理及其实现

硬盘数据恢复技术原理及其实现

硬盘数据恢复技术探讨曾志摘要:数据恢复技术是保证计算机数据安全的重要技术,是当前各行各业信息化关注的热点问题。

文章通过对硬盘的数据存储结构的分析,探讨了硬盘数据恢复的基本技术,并结合实际软件开发讨论了数据恢复方法及其实现。

关键词:数据恢复;删除恢复;格式化恢复;Raw恢复1 引言随着科学技术的迅猛发展,信息化已经成为当前各行各业关注的重点问题。

而数据作为信息化管理的核心部分,其安全性已受到了人们越来越多的重视,如何能够迅速而正确地恢复数据也就成了至关重要的问题。

本文结合数据恢复软件开发实例,讨论数据恢复的方法实现。

2 数据恢复的分类从数据恢复方式来看,主要有软件恢复方式、软硬件结合恢复方式和深层信号还原方式三种。

软件恢复方式主要是在硬盘还可以使用的情况下用数据恢复软件恢复数据,这种恢复方式恢复成本低,但对于那些已经坏掉的硬盘就显得无能为力了。

软硬件结合方式则是先修复硬盘或开盘读出盘片中的数据后再用软件恢复数据,这种方式的数据恢复率是相当惊人的,即使是位于物理坏道上面的数据,由于多种信息的缺失而无法找出准确的数据值,也可以通过大量的运算,在多种可能的数据值之间进行逐一代入,结合其他相关扇区的数据信息,进行逻辑合理性校验,从而找出逻辑上最符合的真值,但这种方式还是不能恢复被覆盖了的数据。

深层信号还原方式则通过分析盘片表面的深层磁介质状态,通过使用不同波长、不同强度的射线对这个晶体进行照射,可以产生不同的反射、折射和衍射信号,然后通过分析各种反射、折射和衍射信号,就可以帮助我们“看到”在不同深度下这个磁介质晶体的残影。

但由于这种方式现实技术复杂、恢复成本高,而且目前世界范围内也没有几个国家可以拥有这样的技术,只有极少数规模庞大的计算机公司和不计成本的政府机关能拥有这样级别的数据恢复设备。

3 硬盘的存储结构图1表示了硬盘的存储结构,包括MBR区、DBR区、FAT区、Dir区和数据区五个部分。

图1MBR(Main Boot Record)区位于整个硬盘的0磁道0柱面1扇区,共占512字节。

它由 446字节的主引导程序,64字节的分区表记录和2字节的结束标记(“55AA”)组成。

它的具体内容由分区程序产生,不属于任何一个操作系统,其主要作用是检查分区表是否正确并读出引导分区中的操作系统引导程序。

它不能被操作系统直接访问,一般通过Int 13或扩展Int 13读取数据。

在DOS或Win9x下运行Debug命令,然后依次输入下面的代码读取MBR内容:-a 汇编指令XXXX:0100 mov ax, 201 ah为操作方式,2为读,3为写;al读写的扇区数XXXX:0103 mov bx, 400 bx为读写数据所在的内存地址XXXX:0106 mov cx, 1 高10位为柱面号,低6位为扇区号XXXX:0109 mov dx, 80 dh为磁头号,dl为驱动器号XXXX:010C int 13 调磁盘读写中断XXXX:010E int 3 断点中断XXXX:010F-g=100 执行上述汇编-d 400 显示MBR内容DBR(DOS Boot Record)区位于0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包含引导程序和BPB(BIOS Parameter Block)。

它由格式化程序产生,不同的分区格式的DBR有所不同。

FAT (File Allocation Table )区文件系统给文件分配空间的一张表,它的每一项都与磁盘的数据块一一对应。

在FAT16中每项占用2字节,FAT32中每项占用4字节。

因此在知道分区大小的情况下不难算出FAT 的长度。

为了防止FAT 意外损坏,系统特在FAT 后面备份了一个一模一样的FAT ,当第一个FAT 遭破坏后可以将第二个FAT 恢复后继续使用。

FAT16分区的FAT 长度计算公式为:FAT 扇区数 = 51242 每簇扇区数根目扇区数 - 2 扇区数FAT -保留扇区数-扇区总+⨯⨯数分区 FAT32分区的FAT 长度计算公式为:FAT 扇区数 = 51284 每簇扇区数 2 扇区数FAT -保留扇区数-扇区总+⨯⨯数分区 若结果不为整数时,则按进一法取整。

下面为FAT16分区的计算例子:由240975个扇区组成的FAT16分区中,保留扇区数为6,根目录扇区数为32,每个簇4个扇区组成,求FAT 至少应该包含多少个扇区?FAT = {[(240975 – 6 – 2 × FAT – 32) / 4] × 2 + 4} ≈ 234.839,取整为235,所以该分区的FAT 表至少应该由235个扇区组成。

Dir(Directory)区为文件目录表,它与FAT 配合确定文件的具体位置。

注意,在Dir 区仅保存文名、长度、起始位置、创建时间、修改日间和最后访问日期。

数据区即文件真正存放的位置,保存着文件的详细内容。

4 数据恢复技术4.1 删除恢复4.1.1 FAT 分区文件恢复在FAT 分区中,当我们删除一个文件时仅仅修改了FAT 区和Dir 区的数据内容。

在这个过程中,系统将Dir 区中对应文件的第一个字节改为“E5H ”,然后再将对应的FAT 记录清零释放使用空间,将对应的区域标记为未使用,而修改数据区的内容。

下面是对删除Test.txt 文件前和删除文件后的对比分析图:图2 删除Test.txt文件前的资源管理器图3 删除Test.txt文件后的资源管理器图4 删除Test.txt文件前的FAT图6 删除Test.txt文件前的Dir图7 删除Test.txt文件后的Dir图8 删除Test.txt文件前的数据区因此,当一个文件是连续存放的时,我们可以比较容易地恢复删除的文件。

但有时我们可能会修改某些文件内容或者磁盘剩余空间不是很大的候时,都可能使文件零散存放,这时在恢复数据时就只能从多方面来判断分析数据才能正确地恢复数据。

4.1.2 NTFS 分区文件恢复NTFS 分区与FAT 类似,只是在删除文件时不是修改的FAT 和Dir ,而是修改的MFT 和位图记录。

删除文件的过程中将对应文件的MFT 记录中偏移16H 的2字节改为0即代表该MFT 记录已经被删除,然后再将该MFT 记录在MFT 位图中所对应的位清零,最后将文件所对应的位图清零就完成了文件的删除操作。

MFT 记录及数据流格式请参考 /ntfs 。

MFT 记录的数据(80H )中详细的记录的文件各数据段的起始位置和长度,可以方便的恢复数据,而不用像FAT 那样为文件不是连续存放担心恢复效果。

4.2 格式化恢复4.2.1 FAT 分区当我们重新格式化磁盘时仅仅重写了DBR 、FAT 和根目录区的数据,所以分区、格式化后仍然可以恢复磁盘中的数据。

但由于分区被重新格式化后无法找到以前分区的根目录入口,并且无法准确知道以前分区的簇大小。

因此格式化恢复的重难点在于确定簇大小和根目录的位置。

用过DOS 系统的人都知道用Dir 显示子目录内容时会发现里面有“.”和“..”两个目录,其中“.”代表当前目录,“..”代表上一级目录。

下面我们先看一下FAT32中的FDT (File Directory Table )结构,如图10所示:图 10 FAT32的FDT 表项分析文件名 扩展名 属性 未用 文件创建时间 16位文件长度在格式化恢复时,首先确定数据区的起始位置和簇大小,然后再搜索分区中的残留目录数据,最后恢复数据。

确定数据区的起始位置的基本步骤是:逐一读取分区中的扇区内容,判断扇区中的数据是不是子目录数据,即判断偏移0字节、32字节、33字节处是否为“.”(“2EH”)且是否为目录。

若是,则确定扇区所对应的簇号,并计算簇大小,然后再根据“数据区起始扇区号 = 当前扇区号– (当前簇号– 2) ×每簇扇区数”,公式减2是因为在FAT中前两个簇号为保留簇号,未使用;否则继续搜索下一个扇区。

然后再继续搜索子目录数据,直到搜索完整个分区。

这种方式有的优点是:①实现简单,不需要掌握其体的文件格式;②搜索速度较快。

缺点是:①它只能找出每个目录中第一个簇内的FDT,当一个目录中的文件较多时无法找到存储在后面的FDT;②当文件不是连续存放时恢复难度较大。

4.2.2 NTFS分区恢复NTFS分区中的数据,主要通过查找分区中残留的MFT记录来恢复数据。

仔细阅读NTFS分区资料后会发现所有的文件描述信息都存储在文件的MFT记录中,其中包括文件名,大小,起始位置,长度,创建日期等信息;其次是每个MFT记录头都以“FILE”标记开头。

因此恢复NTFS分区中的文件可以分为以下几步:①在分区中查找以“FILE”开头的扇区;②进一步分析扇区中的内容并判断是否为真正的MFT记录;③按照MFT记录格式解释读出的数据内容;④根据文件的大小和文件所占用的簇数计算出以前分区的簇大小;⑤恢复数据。

由于在MFT的数据流中详细地记录了文件的存储位置,所以在NTFS分区中采用格式化恢复方式恢复数据的成功比FAT分区高得多。

4.3 Raw恢复在恢复数据时,可能会遇到目录结构或MFT已经完全破坏了的情况,而文件真正的数据内容并没有被覆盖,此时删除恢复和格式化恢复方式就显得无能为力了。

Raw恢复是一种文件搜索算法,使用这种方式将读取分区中的所有扇区,从而搜索特定的文件头标记。

基本步骤为:首先将从扇区中读出的数据与数据库中的数据比较,判断是否为已知的文件格式;再根据文件头和数据库中的数据确定文件大小;最后恢复连续区域内的特定大小的数据;采用这种恢复方式的优点是恢复成功率高。

缺点有:①查找文件速度慢,每读出一个扇区数都要与数据库中的数据进行比较;②实现难度大,需要程序员查阅大量的数据资料并了解各种类型文件的文件头;③由于文本文件是无格式文件,没有文件头,因此无法恢复纯文本文件;④由于这种方式是从文件头开始处连续读取指定大小的数据到特定文件中,所以无法正确恢复零散存放的文件。

5 结束语本文虽然讨论了Windows系统下各种数据恢复技术,但数据恢复毕竟只是数据丢失后的一个补救措施。

我们应该养成备份重要数据的良好习惯,特别是操作员应该时刻备份数据,谨防数据丢失。

参考文献:[1] 戴士剑,涂彦晖.数据恢复技术(第二版).北京电子工业出版社,2005[2] /computer/soft/2007/4578.asp[3] /page/e2007/0104/5692.html[4] /ntfs。

相关主题