EXT3文件系统中误删文件的恢复方法(5)

--把扫描到的已删除文件恢复出来
 
[root@ora10g ~]#  ext3grep  /zlm/test1 --restore-all
 Running ext3grep version 0.10.2
 Number of groups: 13
 Minimum / maximum journal block: 519 / 4633
 Loading journal descriptors... sorting... done
 The oldest inode block that is still in the journal, appears to be from 1409119917 = Wed Aug 27 14:11:57 2014
 Number of descriptors in journal: 32; min / max sequence numbers: 2 / 10
 Writing output to directory RESTORED_FILES/
 Loading test1.ext3grep.stage2... done
 Restoring redo01.log
 Restoring redo02.log
 Restoring redo03.log

注意,在哪个目录执行ext3grep命令恢复文件,就会在该目录中生成一个RESTORED_FILES子目录,下面存放所有恢复出来的文件,并且这个目录下的文件是隐含属性的。

[root@ora10g ~]# ls -la RESTORED_FILES/
 total 28
 drwxr-xr-x  3 root root 4096 Aug 27 14:17 .
 drwxr-x--- 17 root root 4096 Aug 27 14:17 ..
 drwx------  2 root root 4096 Aug 27 13:59 lost+found
 -rw-r--r--  1 root root    3 Aug 27 14:12 redo01.log
 -rw-r--r--  1 root root    3 Aug 27 14:12 redo02.log
 
-rw-r--r--  1 root root    3 Aug 27 14:12 redo03.log

如果不想全部恢复,那么可以使用--resotre-file filename的方式来恢复,前提是你必须知道哪些是你需要恢复的文件

--重新挂载磁盘并确认已经挂载成功
 [root@ora10g ~]# mount -o loop /zlm/test1 /oradata/ora10g
 [root@ora10g ~]# df -Th
 Filesystem    Type    Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup00-LogVol00
              ext3    7.7G  5.6G  1.7G  77% /
 /dev/sda1    ext3    99M  12M  82M  13% /boot
 tmpfs        tmpfs    506M    0  506M  0% /dev/shm
 /zlm/test1    ext3    96M  5.6M  86M  7% /oradata/ora10g
 

--把丢失的文件从RESTORED_FILES中复制到源路径中
 
[root@ora10g ~]# cp RESTORED_FILES/*.log /oradata/ora10g
 [root@ora10g ~]# cd /oradata/ora10g/
 [root@ora10g ora10g]# ll
 total 15
 drwx------ 2 root root 12288 Aug 27 13:59 lost+found
 -rw-r--r-- 1 root root    3 Aug 27 14:21 redo01.log
 -rw-r--r-- 1 root root    3 Aug 27 14:21 redo02.log
 -rw-r--r-- 1 root root    3 Aug 27 14:21 redo03.log

--验证被恢复文件的内容
 
[root@ora10g ora10g]# cat redo01.log redo02.log redo03.log
 AB
 CD
 EF
 [root@ora10g ora10g]#
 

至此,3个文件被完整的恢复了,包括文件内容也都没有丢失。

总结:
 
可以看到,之前模拟在文件系统类型为ext3的/zlm/test1分区下rm -f误删除掉的数据文件都是可以恢复出来的,但前提是删除后没有写入操作,如同我们window中删除磁盘上的数据的原理一样,就算是误格式化了分区,只要没有写入过新的数据,还是能通过Easy Recovery之类的软件对数据进行恢复的。所以,当我们在Linux下误删文件,如果这个文件是挂载在某个分区下的,那么请立即卸载该分区,然后通过以上介绍的方法,对数据进行恢复。不过用这种方法恢复,需要你的数据库文件单独挂在在一个分区下,如果是直接用默认的放在/dev/mapper/VolGroup00-LogVol00,我测试过,是无法恢复出文件的,扫描会失败。

在我的实验中,由于是测试环境,没有单独给数据文件分区,只是默认地安装,测试效果可能与实际环境有很大的区别,这里只是提供数据恢复的一种思路。先用创建了一个文件模拟一个磁盘,如:/zlm/test1并把它格式化成ext3grep的文件系统,ext3grep顾名思义,就是用在对ext3文件系统上进行数据文件恢复的工具,对于ext2、xfs等文件系统而言,它就爱莫能助了。当然,我相信还是能有其他方法或工具可以恢复数据的,这里就暂且不研究了。

所以对于数据库系统而言,极力推荐把数据文件单独挂在在磁盘的分区中,而不是采用默认的磁盘分区,如果要使挂载永久生效,还要修改/etc/fstab文件,加入你要挂载的分区和目录信息。一旦发生误删除,而你的文件系统又恰巧是ext3,而数据库又意外地被关闭了。那么,ext3grep也许就是你最后的机会了!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/05aad6cf88ef063d9412909a830a476f.html