rm删除文件恢复,原作者kaihui

-----by netbuddy.org  kaihui。荆棘鸟 shi1110

1。在/home/songzy/test这个文件系统中任意cp一个文件,为方便我编辑了一个文本文件叫“song”,其中内容为“I LOVE IT”,使用ls -il song可看到: 17 -rw-r--r-- 1 root sys 10 Dec 01 16:13 song 
2。现在使用ls -id (文件所在目录),由于song就在/home/songzy/test下,所以为ls -id /home/songzy/test: 2 /home/songzy/test 
3。记住目录的I节点号,这里是2 
4。umount /home/songzy/test 
5。fsdb /home/songzy/test 
6。到第2个i-node处,2由步骤3得到:2i 这将显示目录的inode信息。其a0,a1,a2,。。。寄存器是到数据块block的指针 
7。到第一个寄存器指针指的block处: a0b 
8。p128c(以字符方式显示128个bytes): 显示目录i-node中的内容 
9。a0b 

10。p128e(以十进制方式显示128个bytes): p128e 0x0000009000: 0 2 12 1 11776 0 0 2 0x0000009010: 12 2 11822 0 0 16 20 10 0x0000009020: 27759 29556 11110 28533 28260 0 0 17 0x0000009030: 448 4 29551 28263 0 0 0 0 0x0000009040: 0 0 0 0 0 0 0 0 0x0000009050: 0 0 0 0 0 0 0 0 0x0000009060: 0 0 0 0 0 0 0 0 0x0000009070: 0 0 0 0 0 0 0 0 0x0000009080: 0 0 0 0 0 0 0 0 0x0000009090: 0 0 0 0 0 0 0 0 0x00000090a0: 0 0 0 0 0 0 0 0 0x00000090b0: 0 0 0 0 0 0 0 0 0x00000090c0: 0 0 0 0 0 0 0 0 0x00000090d0: 0 0 0 0 0 0 0 0 0x00000090e0: 0 0 0 0 0 0 0 0 0x00000090f0: 0 0 0 0 0 0 0 0 
11。q 
12。mount /home/songzy/testnew,删除该文件:rm song 
13。umount /home/songzy/testnew 
14。以下进入关键部分,运行“fsdb /home/songzy/testnew” 
15。到第2个i-node处,2由步骤3得到:2i 
16。到第一个寄存器指针指的block处: a0b 
17。p128c(以字符方式显示128个bytes): 仔细查找显示的128个字符,寻找删除文件名。如果无法找到,需要对a1、a2等寄存器重复8、9两步,直到找到文件名。记住删除文件名开始地址和前一个文件开始地址 这里song是9034,lost+found是9020 
18。a0b 
19。p128e(以十进制方式显示128个bytes): p128e 0x0000009000: 0 2 12 1 11776 0 0 2 0x0000009010: 12 2 11822 0 0 16 468 10 0x0000009020: 27759 29556 11110 28533 28260 0 0 17 0x0000009030: 448 4 29551 28263 0 0 0 0 0x0000009040: 0 0 0 0 0 0 0 0 0x0000009050: 0 0 0 0 0 0 0 0 0x0000009060: 0 0 0 0 0 0 0 0 0x0000009070: 0 0 0 0 0 0 0 0 0x0000009080: 0 0 0 0 0 0 0 0 0x0000009090: 0 0 0 0 0 0 0 0 0x00000090a0: 0 0 0 0 0 0 0 0 0x00000090b0: 0 0 0 0 0 0 0 0 0x00000090c0: 0 0 0 0 0 0 0 0 0x00000090d0: 0 0 0 0 0 0 0 0 0x00000090e0: 0 0 0 0 0 0 0 0 0x00000090f0: 0 0 0 0 0 0 0 0 根据9的结果找到两个文件相应的位置,仔细研究,我们可以发现很多有趣的东西,文件名前第一个字是文件名的长度;文件名前第三个字是文件的inode号;而文件名前第二个字是什么????对比文件删除前后a0b中的值可发现它是文件是否删除的关键!因为只有删除文件前一个文件的这个值改变了!而且这个值似乎就是这个文件记录的长度,它后面一个文件删除后,它就直接跨过删除文件,所以它原来的值就是从它的I-node号到删除文件I-node号的字长度,具体到我这个例子就是20(因为e是双子表示)。那么只要恢复原来的值是否就可恢复文件? 

20。恢复原来的值,注意在恢复前一定要确保“error checking on”,这可以使用“O”来切换: O 0x901c.W=20 

21。17i “17”为由第19步中得到的删除文件i-node号,如果此时“a0”、“szl”等项值非零,那表示文件还可恢复,否则就放弃吧(因为即使恢复,内容也已没有,我不清楚为什么有时刚删除的文件就恢复不出)。 

22。17i.ln=1 
23。q 

24。fsck /home/songzy/test Bad Inode Map; SALVAGE? y ** Phase 5b - Salvage Inode Map ** Phase 6 - Check Block Map Bad Block Map; SALVAGE? y ** Phase 6b - Salvage Block Map 9 files 352 blocks 7840 free ***** Filesystem was modified ***** 运行“fsck”会检查文件系统的一致性,自动修复文件的inode map、block map,均选择“y” 
25。mount /home/songzy/test 

26。ls -l可以看到文件已经恢复。

如果你需要转贴这篇文章请写明原作者kaihui(我有幸1年前和他一起做的试验) 
--- kaihui。荆棘鸟 shi1110
谢谢

posted on 2011-09-23 15:24  xuq  阅读(308)  评论(0)    收藏  举报

导航