Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1765851
  • 博文数量: 290
  • 博客积分: 10653
  • 博客等级: 上将
  • 技术积分: 3178
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 23:08
文章存档

2013年(6)

2012年(15)

2011年(25)

2010年(86)

2009年(52)

2008年(66)

2007年(40)

分类:

2010-04-22 11:54:58

FAT数据恢复设计原理

由于FAT与FDT对数据的链式存储管理的,可以通过链式搜索查找。只有FAT表和FDT配合使用,才能可以统一管理整个磁盘文件,也就可以准确定位被删除的文件的确切位置。

]在 Window操作系统下对文件的删除工作,是将FDT中该文件的第一个字符改“E5”来表示该文件已经删除,同时改写引导扇区的第二个扇区中表示该分区点 用空间大小的相应信息。因此,在设计的时候,根据其存储结构,对相应的地方进行修改,搜索E5删除标志,再按被删文件数据链进行恢复。

具体步骤如下:
(1) 获取磁盘分区类型,分区存储空间,FAT、FDT、文件等存储的起始扇区。

(2) 获取FAT、FDT表项内的簇信息,即簇的删除、未使用、坏簇、以及文件占用簇的起始扇区信息等。

(3) 通过FAT、FDT计算不同文件在物理扇区的起始位置,包括有标识E5的删除文件起始位置、文件类型、占用大小和存储的所在簇。

(4) 改变删除位,通过第3步得到的结果,并按FAT表对文件进行链式查找并缓存,当达到文件所在簇尾时,停止操作。

(5) 对存储的数据进行转换,生成文件。

(6) 对文件进行异区存储。 而操作系统在读写文件时,会根据FDT中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置,然后顺序读取每个簇的内容,文件的查找如图4-1所示。具体的方法如下:
(1)在文件目录项FDT中找到存放在FAT表中的文件File的地址M(2)2*M得到FAT表中File文件数据链表首地址B。

(3)在FAT表中的B地址中,存放有文件FILE数据链表头P。

(4)P*4得到在FAT表项中的下一个偏移位置,即下一个数据链表。

(5)如 果下一个数据链表内的信息为0FFFFFFH,则表示文件存储已经结束图4-1查找文件流程需要说明的是,新建文件时,系统在FAT表中查找未用的簇记录 在新文件目录项中做为首簇;FDT文件目录项中,第0~7字节为文件名(若有剩余字节用20填充)第1字节表明了该文件的状态,第1字节又表明了文件的状 态,00HE5H及其它字符。当该字节为00H时,表示该目录项是空表项,可以使用。当为E5H时,表示该目录项以前用过,但是文件被已经删除了。


NTFS数据恢复设计原理

NTFS利用B-Tree文件管理方法来跟踪文件在磁盘上的位置。这种技术比在FAT文件系统中使用的链接表技术具备更多的优越性。文件名是顺序存放的因而查找速度更快。B-tree的数据结构使查找一个条目所需的磁盘访问次数最少。
那么,文件是怎么样被删除了的,在NTFS文件系统下文件的删除原理又是怎么的呢。当在NTFS卷中删除一个文件时,系统至少在三个地方做了改变:

(1)该文件MFT头偏移16H处的一个字节,该字节为0表示文件被删除,为1表示该文件是正被使用的文件,为2表示其是一个目录,为03的时候表示其为删除目录;

(2)其父文件夹的INDEX_ROOT属性(90H属性)或者INDEX_ALLOCATION(A0H属性);

(3)在位图($Bitmap)元数据文件中把该文件所占用的簇对应的位置置0,这样好给其他文件腾出空间。

既然知道了文件的删除原理,那么我们对文件的恢复就容易了许多。这里我们从删除原理着手,分几步将数据进行恢复:

第一步:由于文件是通过主文件表MFT来确定其在磁盘上的存储位置的,因此我们首先要找到MFT。

第二步:找到MFT后,通过分析MFT中的文件记录信息,(对于大型文件还可能有多个记录与之相对应),其中第一个文件记录称为基本文件记录,而当中存储有其他扩展文件记录的一些信息。

第三步:通过文件记录的INDEX_ROOT索引根、INDEX_ALLOCATION索引分配以及位图Bitmap对被删文件加以确认和定位。找到该文件在数据区中的存储位置。

第四步:恢复该文件。

需 要注意的是,在文件被删除以后,虽然磁盘中被删文件的相关属性发生了改变。但是在我们对其进行数据恢复时,我们仅仅是将其相关信息复制到了内存,并将相关 信息做了修改。也就是说,对于为了修复数据而做的修改,其实并没有写回到原文件属性上。这就有效的避免了被访文件的再次破坏。 

在 主文件表中,目录的索引根属性包含一些文件名,它们是到达B-Tree的第二层的索引。在这个索引根属性中的每一个文件名都包含了个指向索引缓冲区的指 针。这个索引缓冲区中包含有一些文件名,它们位于索引根属性中的文件的名字之前。通过这种关系,我们可以使它们排在索引缓冲区中的那个文件之前。图4-3 所示,利用这些索引缓冲区,NTFS可以进行折半查找,从而获得更快的文件查找速度。
阅读(4619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~