最近公司想做一款Windows文件恢复软件,通过此软件,把一些用户误删除或误格式化的文件恢复回来。让我先做下这方面的预判(由于我对NTFS有些了解,上个项目就是跟NTFS相关)。
想做文件恢复,那就涉及到文件系统,目前windows端,最常用的就是NTFS文件系统。其次是FAT文件系统。FAT文件系统又可以细分为FAT16、FA32、exFAT等。这里先说下对于NTFS文件系统内,文件恢复的大概的思路(目前FAT还没详细了解,后续查了相关资料再说)。
NTFS文件系统里,NTFS分区主要由引导扇区、主文件表(Master File Table,MFT)、系统文件和文件存储区域等4个部分组成。而文件的读写是以簇为单位。
新建一个文件或文件夹时,会在MFT里增加一条记录,用以记录文件的相关信息(文件的大小、访问时间、修改时间、存储位置、父目录、文件属性等),并在一个BitMap的系统文件里,改变文件所占簇的使用情况。
删除一个文件时,MFT表有如下改动:
1.把MFT表里,这个文件的标志位改为未使用状态
2.把这个文件,在BitMap里所占用的簇,标记未0(未使用)
3.从MFT里,文件所在目录里,移除此文件
通过上面的描述,可以看出,NFTS文件系统里,文件删除实际上只是一个标记的删除,真正的内容还是存在的,只要MFT表里相应的文件记录没有被覆盖,并且文件内容所在的簇,没有被重写,文件是完全有可能被恢复的。(这也是很多文件恢复软件,反复提及、恢复文件时,要对硬盘少操作。因为一旦硬盘发生了写操作,文件的MFT记录或者是文件所占用的簇,就有可能被新文件覆盖)
文件恢复操作的实际过程:
1.遍历MFT表,找出标记为删除的文件记录
2.从文件记录里,获取文件所占用的簇
3.分析BitMap,判断文件所占用的这些簇,是否是未使用状态(*注:如果恢复前对这些簇进行了读写操作,此判断会不准确)
4.对数据进行读取及恢复