注意:
我分析一下上面的结果:
①、“WARNING”,这种情况出现在系统处于“脏”的状态或者是被恢复磁盘处于挂接状态,特别要注意,对于被恢复文件所在的磁盘一定要处于未被挂接的状态;
②、“Writing output to directory RESTORED_FILES/”,恢复完成后会在用户当前所在的目录中创建一个名RESTORED_FILES的目录,恢复的文件就放置在该目录相应的目录中;同时也要注意,如果在目录RESTORED_FILES/jj已存在,那么它不会被覆盖; ③、“D”和“d”,“D”表了包含了目录的开始;而“d”表示了包含多个目录条目;
④、“sdb1.ext3grep.stage2”包含了分析报告; ⑤、“Restoring jj”表示成功恢复了该文件。
按次序,恢复工作会经过两个阶段(stage),阶段1和阶段2,并且创建了两个文件DEVICE.ext3grep.stage1和DEVICE.ext3grep.stage2。
我们看一下,以下是在执行“ext3grep
/dev/sdb1--restore-file jj”命令之前的目录结构,只有ext3grep命令:
[root@nas bin]# pwd /usr/local/ext3grep/bin [root@nas bin]# tree . `-- ext3grep
0 directories, 1 file |
在执行完成“ext3grep
/dev/sdb1--restore-file jj”命令之后的目录结构:
[root@nas bin]# tree . |-- RESTORED_FILES |
`-- jj |-- ext3grep |-- sdb1.ext3grep.stage1 `-- sdb1.ext3grep.stage2 |
为了证实,你可看一下文件jj的内容:
[root@nas bin]# cat RESTORED_FILES/jj 123456 |
没问题,绝对恢复了,这是我们要得到的结果。
在ext3grep的命令行选项中使用--dump-names可以转储所有文件的文件名:
[root@nas ~]# ext3grep
/dev/sdb1 --dump-names Running ext3grep version 0.10.2 Number of groups: 597 Minimum / maximum journal block: 1545 / 35886 Loading journal descriptors... sorting... done The oldest inode block that is still in the journal, appears to be from 1273827555 = Fri May 14 16:59:15 2010 Number of descriptors in journal: 109; min / max sequence numbers: 5 / 39 Loading sdb1.ext3grep.stage2... done .jj.swp jj lost+found pp |
如果对选项--dump-names的输出满意,那么就可以用--restore-all选项代替--dump-names来恢复所有文件。--restore-all在效果上实际上就是--restore-file和--dump-names的组合。
正如以前提到的,正确的使用选项--after 是一个明智的选择,这样使得ext3grep工作更有效,既避免了ext3grep试图恢复更旧的文件,也缩短了用户的等待时间。注意,这时--dump-names的输出是未滤过的,而--restore-file(--restore-all)可以联合使用--after选项。
例如:
[root@nas ~]#ext3grep
/dev/sdb1 --restore-all --after=1274249319 Running ext3grep version 0.10.2 Only show/process deleted entries if they are deleted on or after Wed May 19 14:08:39 2010.
Number of groups: 597 Minimum / maximum journal block: 1545 / 35886 Loading journal descriptors... sorting... done The oldest inode block that is still in the journal, appears to be from 1273827555 = Fri May 14 16:59:15 2010 Number of descriptors in journal: 109; min / max sequence numbers: 5 / 39 Loading sdb1.ext3grep.stage2... done Not undeleting ".jj.swp" because it was deleted before 1274249319 (3214533652) Not undeleting "jj" because it was deleted before 1274249319 (3214533652) Restoring lost+found Restoring pp |
可以看到,在这里只有pp文件被恢复,按照--after设定的时间它是最后一个被删除的文件,--after精确到秒级,在设置--after时要比要恢复的文件大1即可。
阶段1的格式:
阶段1的过程被写入DEVICE.ext3grep.stage1文件,这里的DEVICE会被驱动器的名字所替代(例如/dev/sdb1,那么DEVICE就是sdb1)。
例如:
[root@nas /]# more sdb1.ext3grep.stage1 # Stage 1 data for /dev/sdb1. # Inodes and directory start blocks that use it for dir entry '.'. # INODE : BLOCK [BLOCK ...]
//注意这里的格式
2 : 1539 1628 1781 1790 2036 2048 2097 3257 3437 11 : 1540 32769 : 1779 1830 1867 1883 1889 1895 1913 1919 1926 1952 1978 2012 96256 507905 : 3435 1021952 1048577 : 3255 3266 3282 3293 3299 3309 3317 3323 3338 3561 3568 2123776 1048578 : 3337 3344 3352 3357 3370 3378 3383 3396 3409 3414 2111488 3522561 : 7057408 3522616 : 7072649
…… 7503873 : 15022080 # Extended directory blocks. 36067 102245 …… 7073648 # END |
在这个sdb1.ext3grep.stage1文件中,首先表明了工作对象/dev/sdb1,然后指明了节点和块的格式,在格式这一部分中,第一栏是节点,然后再跟一个空格,空格之后是一个冒号,然后又是一个空格,空格之后是一个使用空格符作为分隔符的block号列表。
阶段2的格式:
阶段2的过程被写入DEVICE.ext3grep.stage2文件,例如:
[root@nas bin]# more sdb1.ext3grep.stage2 # Stage 2 data for /dev/sdb1. # Inodes path and directory blocks. # INODE PATH BLOCK [BLOCK ...] 2 '' 1539 11 'lost+found' 1540 7073648 # END |
在这个阶段,由函数init_directories()来负责,包含了很多启发式的代码。首先决定哪些块是真正的目录开始块,然后分配每一个扩展目录块到其中的目录,最后将这个结果保存在一个文件(DEVICE.ext3grep.stage2),那就是这里的sdb1.ext3grep.stage2。注意文件中每一个条目的格式,万一出了错,你能够通过编辑这个文件(删除无效的或添加正确的块)来修复,然而绝对不要添加或移除注释:如果你对这个文件改变的太多,那么会使得ext3grep感到“困惑”,而不能够正常工作。
最后再次提一点,正确的使用“--after dtime”和“--before dtime”参数特别重要。
|