NTFS的安全性能给数据恢复提供了很大的便利,在NTFS上出错后数据恢复的成功率还是不错的。 下面根据我自己的经历谈一谈NTFS格式化为NTFS后原盘数据恢复的方法。
NTFS格式化为NTFS后,在XP系统下只是重写了前32个MFT项,在WIN7系统下重写了前255个MFT项,在这种情况下,用软件扫一般都能恢复,但如果分区比较大,文件比较多的话,第一需要很长时间,第二碎片文件可能不容易恢复成功。所以我谈一下手工恢复的方法。
首先说一下手工恢复的思路,既然只是重写了前32个或前255个MFT,后面的MFT不变,所以只要在0号MFT上修改一下链接指向这些MFT,那么就能够实现原盘恢复了。
具体要修改的地方主要有4处(根据实际情况不同):MFT起始簇号、80H属性的起始和结束VCN、属性体的分配、实际、初始大小和DATARUN数据。
具体步骤如下:
第一、MFT起始簇号。首先判断现在的MFT起始簇号是不是格式化前的MFT起始簇号。转到31号或是255号MFT,前后看看MFT号是否连续,如果连续,表明格式化前后的MFT起始簇号相同,如果不连续,表明格式化前后的MFT起始簇号不相同。起始簇号相同,则不用管它,记下这个起始簇号,后面要用到它的;起始簇号不相同,就要找原来的MFT起始簇号,也就是把现在的MFT起始簇号向前或向后提一下,同样记下现在的MFT起始簇号。
第二、80H属性的起始和结束VCN。搜索最后一项MFT,依据MFT头标志“46494C45”来搜索。这个地方要注意一些技巧,要先估计MFT的大小(一般300G的分区MFT应该不超过100M,当然特殊情况例外),然后相对0号MFT向后跳转估计大小的扇区,向上搜索最后一项MFT。由最后一项MFT即可确定MFT的簇数,从而确定结束的VCN。
第三、属性体的大小。由簇数×每簇扇区数×每扇区字节数,即可得到属性体的大小。
第四、DATARUN数据。包含簇数和起始簇号,这在前面已经算出来了,只需要转换成16进制填入即可。
当然,为了方便起见,用模板填写更容易。
这四步做完后,保存退出,然后重新加载,即可在winhex中看到找回的数据,原来的MFT记录在31号(XP系统)或255号(WIN7系统)之前是看不到的。当然在分区中还是没有数据,把这些数据导出保存(为了保险起见)。为什么在分区中没有数据呢?因为我们只修改了0号MFT,1——31号或1——255号MFT没有修改,手工修改太麻烦了,这时我们可用磁盘管理工具CHKDSK来帮忙,在运行中输入“CHKDSK G:/F”(G:表示要恢复数据分区的盘符),重新加载后,即可在分区中看到消失的数据又回来了(有一小部分数据没有回来,可在winhex中导出)。