您的位置:首页 > 其它

extundelete恢复文件

2015-12-15 14:42 369 查看
一、首先我们先来了解下文件删除原理: 1) linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count和i_nlink。2)当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。3) 当你发现你误删除了文件后,要做的第一件事是马上卸载被误删除文件所在的分区,或者以只读的方式来挂载该分区。原因大家都很清楚,文件被删除后,文件中的数据还存在磁盘上,除非存放这些数据的数据块又被操作系统分配出去了。我们这一步就是尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。二、了解完后,实战演练方案1)现在我向大家介绍使用extundelete恢复文件(适合rhel6.X系统的ext4)#上传extundelete-0.2.4.tar.bz2包传到/usr/local/src下#tar -jxvf extundelete-0.2.4.tar.bz2# cd extundelete-0.2.4#./configure (这步出现错误,请看下文)#mount /dev/cdrom /mnt#rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
(必须安装否则,前面./configure报错)#./configure (成功)make && make install软件安装完毕,下面我们来恢复文件吧1)我先创建一个恢复目录mkdir recovercd recoverextundelete /dev/sda4 --inode 2 (看到你所删除的文件)#extundelete /dev/sda4 -restore-inode 15 (按对应的节点来恢复文件)#extundelete /dev/sda4 -restore-file a.txt (按对应文件名来恢复文件)#extundelete /dev/sda4 -restore-dirctory etc (按对应的目录,这里我以etc目录)##extundelete /dev/sda4 -restore-all (全部恢复)方案2)使用lsof自带一个的神秘功能原理:大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:# lsof |grep /var/log/messagessyslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)从 上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:# head -n 10 /proc/1283/fd/2Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org)(gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007 Aug 4 13:50:15 holmes86 kernel:BIOS-provided physical RAM map: Aug 4 13:50:15 holmes86 kernel: BIOS-e820:0000000000000000 - 000000000009f000 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820:000000000009f000 - 00000000000a0000 (reserved) Aug 4 13:50:15 holmes86 kernel:BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable) Aug 4 13:50:15 holmes86 kernel:BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved) Aug 4 13:50:15 holmes86kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved) Aug 4 13:50:15holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)从上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。方案3)使用ext3grep恢复文件(适合rhel5.X系统的ext3)#上传ext3grep-0.10.1.tar.gz包传到/usr/local/src下#tar -jxvf ext3grep-0.10.1.tar.gz# cd ext3grep-0.10.1#./configure (成功)make && make install软件安装完毕,下面我们来恢复文件吧1)我先创建一个恢复目录mkdir recovercd recoverext3grep /dev/your-device --restore-filepath/to/your/file/filename需要注意的是,上面的文件路径,是在该分区上文件路径。假设我们要恢复/dev/sda3分区上文件,这个分区原来的安装点是/home,现在想恢复文件/home/easwy/vi/tips.xml,那么输入的命令应该是: ext3grep /dev/sda3--restore-file easwy/vi/tips.xml所有恢复的文件都会放在当前目下在RESTORED_FILES目录下,大小也一样,这里RESTORED_FILES目录是执行ext3grep的当前目录下如果你忘记了文件名,或者你误删除的是一个目录而你无法记全该目录中的文件,你可以先用下面的命令查询一下文件名:ext3grep /dev/sda3 --dump-names | tee filename.txt上面的命令把ext3grep命令的输出记录到文件filename.txt中,你可以慢慢查看,或者使用grep命令过滤出你需要的信息。当你知道了目录/文件的信息后,就可以用上面说的命令进行恢复了。复所有文件和目录,但是目录的话,如果删除时间较长,不一定能完全恢复,压缩文件一般都能恢复ext3grep /termite/cc-disk --restore-allext3grep /dev/sda3 --ls --inode 2 创建扫描分区文件:sda5.ext3grep.stage1和sda5.ext3grep.stage2如果想要重新生成可以删除这个两个文件,再次执行这条命令。另外当第一次执行ext3grep /dev/sda3 --restore-file test/a.txt进行还原时也会自动生成扫描分区文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: