用ext3grep恢复删除的文件

由于刚才不当心用rm删了 /etc 目录,就在网上找到了这篇文章,不过由于个人虚拟机都启动不了了,因此我就直接重装了,但但愿对其余人有帮助 node

一个同事不当心使用rm -rf命令误删了本身的代码,这意味着一个月的工做丢失了(一个月没有备份过代码,看来他之前必定没经历计算机崩溃的灾难)。咱们知道rm命令没法撤销,那么有没有办法恢复这个被删除的目录以及其中的所有文件呢?linux

在网上搜索了一下,找到一个名为ext3grep的工具。在这个工具出现之前,恢复ext3文件系统中被删除的数据是不可能的。由于ext3文件系统不一样于ext2文件系统,它在删除一个文件后,会把文件inode结点中扇区指针清为0,而这让文件恢复看起来不太可能。不过,正如ext3grep工具做者所说的,由于ext3是一个日志型的文件系统,经过分析日志信息,有很大的可能从新解析出块指针,从而恢复出目录和文件工具

如下是恢复文件所采用的步骤,但愿对你们有帮助。google

卸载被误删除文件所在的分区,或以只读方式mount ]spa

当你发现你误删除了文件后,要作的第一件事是立刻卸载被误删除文件所在的分区,或者以只读的方式来挂载该分区。缘由你们都很清楚,文件被删除后,文件中的数据还存在磁盘上,除非存放这些数据的数据块又被操做系统分配出去了。咱们这一步就是尽可能下降数据块中数据被覆盖的风险,以提升恢复数据成功的比率。操作系统

若是被误删的文件在根分区,那么你最好重启计算机,进入单用户模式,以只读的方式挂载根分区,而后再进行恢复。要进行单用户模式。.net

进入单用户模式后,根分区仍是以读写方式mount的,用下面的命令,把挂载方式由读写(rw)改成只读(ro)指针

mount -o ro,remount /rest

若是被删除的文件不是根分区,也能够用unmount的方式将该分区卸载。假设文件在分区/dev/sda3中,该分区挂载到/home,那么咱们用下面的命令来卸载:日志

    umount /dev/sda3

或者命令:

    umount /home

固然,在卸载前要保证没有程序在访问该分区,不然卸载会失败。因此,Easwy通常推荐进入单用户模式来恢复文件。

安装ext3grep工具 ]

恢复的第一步固然是安装ext3grep工具。对于Debian/Ubuntu用户来讲,安装ext3grep工具很是简单,只须要执行下面的命令:

aptitude install ext3grep

不过不少公司使用的Linux版本是Centos,因此须要本身手工编译ext3grep工具,其实这也很简单,首先到ext3grep主页上下载它的源代码,而后用下面的命令解压/编译/安装这个工具。

 

tar zxf ext3grep-0.10.1.tar.gz

cd /home/easwy/ext3grep-0.10.1

./configure

make

make install

注:在网上搜了一下,ext3grep也有rpm包能够下载,好比,RHEL/CentOSRPM包能够在这里下载。其它Linux发行版的RPM也能够在rpmfind.net上找到。

前面说过,发现误删除后,要卸载掉该分区,或者进入单用户模式。因此最好在另一台计算机上来编译或安装这个工具,而后把ext3grep这个可执行文件拷贝到U盘中再进行恢复。由于同事的文件刚好在根分区中。若是你也是这种状况,那么在用RPM包安装时,则须要把RPM包安装到你指定的目录中,而后再把它拷贝到U盘中。

U盘里只须要拷贝ext3grep一个文件便可,它不须要动态加载库就能够执行。接下来把U盘插到待恢复的电脑上,用下面的命令加载:

mount -t vfat /dev/sdb1 /mnt

把上面的设备号和安装点换成你本身的。若是你的设备文件还不存在的话,用mknod命令建立一下吧。

如今,咱们能够开始文件恢复了。

恢复文件 ]

在开始恢复前,选择一个目录来存放被恢复的文件。ext3grep程序会在当前目录下建立一个名为RESTORED_FILES的目录来存放被恢复的文件。所以在运行ext3grep命令前,先要切换到一个你可读写的目录中。

由于进入了单用户模式,而且将根分区设成了只读,那么只能把恢复出来的文件放在U盘中了。所以,先cd /mnt进入U盘目录。

若是你有幸记得你误删除的文件名及其路径的话,就能够直接用下面的命令进行恢复了:

    ext3grep /dev/your-device --restore-file path/to/your/file/filename

须要注意的是,上面的文件路径,是在该分区上文件路径。假设咱们要恢复/dev/sda3分区上文件,这个分区原来的安装点是/home,如今想恢复文件/home/xxx/vi/tips.xml,那么输入的命令应该是:

    ext3grep /dev/sda3 --restore-file xxx/vi/tips.xml

若是你忘记了文件名,或者你误删除的是一个目录而你没法记全该目录中的文件,你能够先用下面的命令查询一下文件名:

ext3grep /dev/sda3 --dump-names | tee filename.txt

上面的命令把ext3grep命令的输出记录到文件filename.txt中,你能够慢慢查看,或者使用grep命令过滤出你须要的信息。

当你知道了目录/文件的信息后,就能够用上面说的命令进行恢复了。

ext3grep命令中有一个–depth参数,应该是用来恢复目录以及其中的全部子目录和文件的。

相关文章
相关标签/搜索