作者:清林,博客名:飞空静渡
今天在测试我刚完成的在linux对NTFS分区进行备份和恢复的代码,运行程序备份一个200M的NTFS分区,然后在运行另一个程序恢复数据到这个200M的分区中,然后把这个分区加载到/tmp/sdd1中查看,文件恢复成功 --- 欣喜啊,做了几个星期,终于可以舒一口气了!
因此,想进一步测试一下,所以想把/tmp/sdd1中的内容删除,然后再恢复一次,看是否可以恢复整个分区的数据!因此手快快的运行了rm *。然后发现有个目录没删除,我想“不对啊!我没拷贝目录到这个NTFS分区啊”,然后看一下目录路径,自己的项目路径,因为我是在这个目录下加载/dev/sdd1 到/tmp/sdd1中的,并没有切换目录。这时心的都凉了!做了那么久的项目,那么多的代码文件,说没就没了 :( --- 欲哭无泪啊!
由于项目还没建svn代码库,因此所有代码都是在我机子本地,也没有一个备份,天!这么辛苦到底是为什么,而且还会影响到项目进度啊。
搞了那么久的windows下的文件系统的数据备份和恢复,而且还打算写一个NTFS分区的文件恢复软件,而现在呢,居然载在linux下的文件系统中,悲哀!
马上上网查找一下ext4分区的文件恢复!
找到了两个,一个是photorec,另一个是extundelete。
下面是我的文件恢复历程!
photorec恢复的数据非常凌乱,而且不准确,下面主要说明如何用extundelete来恢复我的数据!
下载的extundelete的源代码(网址:http://extundelete.sourceforge.net/)
这里强调一下,不要把代码下载到你要恢复的分区中,你要恢复文件的分区不要做任何的数据读写操作!
因此,我把extundelete下载到/tmp目录下,然后解压,编译!
在编译之前,需要安装两个库,一个是e2fsprogs,另一个是e2fslibs。
sudo apt-get install e2fsprogs e2fslibs-dev
这就是在ubuntu10.04下安装的。
然后就是到它的源代码目录src下运行make进行编译,最后生成extundelete可执行文件。
然后我就运行
sudo ./extundelete /dev/sda9 --restore-all
这里建议恢复所有的被删除的文件,下面会说明。
在程序结束后,会在程序的目录下生成一个目录RECOVERED_FILES
这个目录下就是所有被删除的文件,然后你就可以在下面找到你的被删除的目录及文件,但是我有很多文件还是找不到,好在我要找的文件是文本文件,因此,我就借助了grep命令来查找。
cd RECOVERED_FILES
到这个目录下,然后根据你的程序文件里的内容,比如说我要找我的PartNtfs类,因为这个文件找不到,因此我这样
grep -rHn "PartNtfs" *
根据输出内容,我找到了这个文件
fjb/.mozilla/firefox/omhuxrnc.default/Cache/CF72B08Ed01
用vim打开这个文件,果然是我需要的文件,因此把它拷贝出来并重命名。
所以在上面说一定要恢复所有被删除的文件,因为extundelete有可能会把恢复的文件改名,并放到其它目录中。
这里用grep来查找还是因此有些恢复的文件变成了隐藏文件,并且恢复的文件非常多,一个一个打开测试会非常麻烦,所以用grep来查找就快的多了。
最后,我很幸运,把整个工程的源代码文件成功恢复了,并重新编译 --- 成功!
这里如果extundelete没完全恢复你的文件数据,你可以再借助一下photorec和grep命令来恢复,photorec可以找回部分数据,但有些数据会比较凌乱,需要你去拼凑!photorec在testdisk中,你只需安装testdisk就会安装了photorec。
哎,虽然做了那么就的数据备份和恢复的软件,一不小心,也会载在这里,所以奉劝各位,一定要小心自己的数据保护和备份自己重要的数据,毕竟硬盘有价,数据无价啊!
原文地址:http://blog.csdn.net/fjb2080