jsp网站开发的mvc,社交电商,传奇网站如何建设,男女做暧昧视频网站下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。假设我们有一个文件名叫 ‘test.txt’$ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt注意#xff1a;: “-il” 选项表示显示文件的i-node号#xff08;15#xff09;#xff0c;如果你… 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。假设我们有一个文件名叫 ‘test.txt’$ls -il test.txt 15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt注意: “-il” 选项表示显示文件的i-node号15如果你不知道Unix/Linux文件系统的“I结点”的话你有必要先补充一下相关的知识。简单说来i结点就是操作管理文件的一个标识号。我们再看一下其内容$ cat test.txtthis is test file好现在我们开始删除文件.$rm test.txtrm: remove write-protected regular file test.txt’? y使用 Journal 和 Inode 号恢复注意如果你删除文件后重启了系统那么相关的文件 journal 会丢失我们也就无法恢复文件了。所以恢复文件的前提是Journal不能丢失即系统不能重启。因为我们已经知道 test.txt 文件的 inode 号是 15所以我们可以使用 debugfs 命令来查看debugfs: logdump -i 15FS block 1006 logged at sequence 404351, journal block 7241(inode block for inode 15):Inode: 15 Type: regular Mode: 0664 Flags: 0×0 Generation: 0User: 0 Group: 0 Size: 20File ACL: 0 Directory ACL: 0Links: 1 Blockcount: 8Fragment: Address: 0 Number: 0 Size: 0ctime: 0x48159f2d — Mon Apr 28 15:25:57 2008atime: 0x48159f27 — Mon Apr 28 15:25:51 2008mtime: 0x4806f070 — Thu Apr 17 12:08:40 2008Blocks: (01): 10234No magic number at block 7247: end of journal.请注意上面信息中的这一行Blocks: (01): 10234这就是inode 15存放文件的地址数据块。然后我们知道了这个地址我们就可以使用 dd 命令把这个地址上的数据给取出来。#dd if/dev/sda5 of/tmp/test.txt bs4096 count1 skip 1023410 records in10 records outif 是输入的设备of 是输出的设备.bs 指定一个block的大小count 说明有多少个block需要dumpskip 说明从开始的地方跳过 10234 个block并从取下一个block的数据下面让我们看一下被恢复的文件$cat /tmp/test.txt this is test file当然上面的文件恢复是基于我们知道文件的inode可在现实中我们并不知道这个信息如果我们不知道inode我们还可能恢复吗是的这是可能的让我们来看一下如何恢复。使用 Journal 和 文件名恢复如果我们不知道文件的inode我们可能恢复吗我可以告诉你这是不可能的事情。不过我们有办法知道文件的inode号。下面让我们来看看怎么做到$rm mytest.txtrm: remove write-protected regular file mytest.txt’? y注意我们并不知道其inode号但我们可以使用 debugfs 命令来查看使用其 ls -d 选项。debugfs: ls -d 2 (12) . 2 (12) .. 11 (20) lostfound 2347777 (20) oss2121567 (20) mytest.txt你看文件名了吧它的inode号是 2121567 注意被删除了的文件的inode都是用尖括号包起来的。即然知道了inode号那么我们就很容易恢复了使用 logdump选项debugfs: logdump -i 2121567Inode 2121567 is at group 65, block 2129985, offset 3840Journal starts at block 1, transaction 405642 FS block 2129985 logged at sequence 405644, journal block 9 (inode block for inode 2121567): Inode: 2121567 Type: bad type Mode: 0000 Flags: 0×0 Generation: 0 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0×00000000 — Thu Jan 1 05:30:00 1970 atime: 0×00000000 — Thu Jan 1 05:30:00 1970 mtime: 0×00000000 — Thu Jan 1 05:30:00 1970 Blocks: FS block 2129985 logged at sequence 405648, journal block 64 (inode block for inode 2121567): Inode: 2121567 Type: regular Mode: 0664 Flags: 0×0 Generation: 913772093 User: 100 Group: 0 Size: 31 File ACL: 2130943 Directory ACL: 0 Links: 1 Blockcount: 16 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x4821d5d0 — Wed May 7 21:46:16 2008 atime: 0x4821d8be — Wed May 7 21:58:46 2008 mtime: 0x4821d5d0 — Wed May 7 21:46:16 2008 Blocks: (01): 2142216上面有很多信息让我们仔细地查看你可以看到下面一行信息 FS block 2129985 logged at sequence 405644, journal block 9并且其类型是 Type: bad type 再仔细看一下文件的时间戳下面的Blocks: 什么也没有。那么让我们看一下下一个blockFS block 2129985 logged at sequence 405648, journal block 64 (inode block for inode 2121567):这一条Journal就有block信息了Blocks: (01): 2142216这就是被删除文件的地址让我们再次运行恢复命令$sudo dd if/dev/sda5 of/home/hchen/mytest_recovered.txt bs4096 skip2142216 count1再让我们来检查一下文件内容$ cat mytest_recovered.txtthis is my test file 小结好了下面是我们的一些总结1)使用 debugfs: ls -d 找到被删除文件的inode号。2)使用 debugfs:logdump找到文件的数据块地址。3)使用dd 命令把数据取出来存成文件参考资料:http://coolshell.cn/articles/1265.html 转载于:https://blog.51cto.com/jerryxbao/1318966