参考 http://wandiankafei.blog.51cto.com/10878910/1716201


方案1)现在我向大家介绍使用extundelete恢复文件(适合rhel6.X系统的ext4)

安装:

下载 extundelete-0.2.4.tar.bz2  wget  http://netassist.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar -jxvf  extundelete-0.2.4.tar.bz2
 cd extundelete-0.2.4
./configure (这步出现错误,请看下文)
yum install  e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm


然后再次执行,成功

make && make install

恢复:

extundelete  /dev/sda4 --inode  2  (看到你所删除的文件)

恢复单个目录:

extundelete  /dev/sdb1 --restore-directory  /mongodb  ##mongodb是一个目录

恢复所有误删文件:

extundelete  /dev/sdb1 --restore-all

恢复一个单个文件:

extundelete  /dev/sdb1 --restore-file  a.txt


方案2)使用lsof自带一个的神秘功能

原理:大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中

假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法

如下:

首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:

# lsof |grep /var/log/messages

syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)

从 上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log

/messages已经标记被删除了。


恢复:

cat  /proc/1283/fd/2   > /var/log/messages  恢复成功


对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。