1.rm -rf
 系统管理员经常执行rm -rf,须知“慎用rm -rf”以成为系统管理员需要遵循的守则之一,除非你知道删除的后果。误操作、错误的当前目录,有可能让你陷入万劫不复的境地!
2.ext3grep恢复被rm -rf 删除的文件(普通文件,数据库表)
 ext3grep是一个开源的ext3文件系统反删除工具,虽然ext3有debugfs命令来可以对ext2文件系统来做一些恢复,但是对ext3文件系统无能为力。ext3是一个日执行文件系统,ext3grep正是通过日志来恢复被删除的文件和数据的。
3.ext3grep恢复原理
    首先请了解文件系统inode的原理。inode是文件系统组成的最基本单元,是文件系统连接任何子目录、任何文件的桥梁。他包括了文件系统中文件基本属性和存放数据的位置等现相关信息。每个文件由2部分组成:inode+block。(这个在培训的ppt文档里有详细的说明),inode用来存放数据索引信息,包括文件大小、读写权限、属主、归属的用户组等。操作系统根据用户指令,通过inode值来定位文件所在。
    打个比方,存储设备和磁盘分区相当于一本书,block相当于书的内容页,inode相当于目录。
    在Linux下可以通过”ls -id”查看某个文件或者是目录的inode的值。例如查看根目录的inode值,可以输入:ls -id。 可以得出 2  /,由此可知,根目录的Ionde值为2.
    利用ext3grep恢复文件,并不依赖特定文件格式。首先ext3grep通过文件系统的root inode(根目录的inode一般为2)来获得当前文件系统下的所有文件信息,包括存在的和已经删除的文件,这些信息包括文件名和inode,然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份踹,从而恢复数据。
4.ext3grep 的安装
    环境:CentOS 5.4
    ext3grep版本:ext3grep-0.10.1
    ext3grep官网:http://code.google.com/p/ext3grep/
    所需的系统相关包:
    rpm -qa |grep e2fsprogs
    e2fsprogs-libs-*
    e2fsprogs-1.39-8.el5
    e2fsprogs-devle-1.39-8.el5
    这几个包均装上了即可。
编译安装,过程如下:
编译安装一般选择在/usr/local下建立相应目录,我这里建立/usr/local/ext3grep目录,相关操作都在这个下面进行,
tar -zxvf ext3grep-0.10.2.tar.gz
cd ext3grep-0.10.2
./configre
make && make install
至此安装完成,如果有错误,请检查相关包,以及gcc等编译工具是否安装齐全。
5.通过ext3grep恢复数据
命令介绍,安装完成后就可以使用ext3grep命令了
如下:
ext3grep –help 查看命令帮助信息
ext3grep -v 查看版本信息
ext3grep /mydata/disk1  –ls  –inode 2   :/mydata/disk1为数据丢失的目录 ,这里是列出/mydata/disk1目录的inode信息,目录inode信息一般为2.
这个命令主要扫描当前文件系统下所有文件信息,包括存在的和已经删除的文件,其中含有D标志的就是已被删除的文件,如果不记得被删除的文件名称,可以通过以下命令获得要恢复的文件名称
ext3grep /mydata/disk1  –dump-names  :此命令列出当前文件系统下所有文件信息
情景1(恢复/mydata/disk1下被删除的文件)
[root@www /]# mkdir /disk
[root@www /]# cd /mydata/
[root@www mydata]# dd if=/dev/zero of=/mydata/disk1  bs=1024 count=10240
:此命令式建立一个没有系统的空文件,/dev/zero为磁盘没有数据的块,of为输出 bs每个块大小,count表示有多少个bs
[root@www mydata]# mkfs.ext3 /mydata/disk1
:将disk1这个文件格式化成ext3格式
[root@www mydata]# mount -o loop /mydata/disk1 /disk/
[root@www mydata]# cp /etc/profile  /etc/hosts /boot/*   /disk/
[root@www mydata]# mkdir  /disk/ext3grep
[root@www mydata]# cp /etc/hosts /disk/ext3grep
:挂载/mydata/disk1到/disk 并cp一些系统文件到/disk
[root@www disk]# rm -rf /disk/*
:删除文件
[root@www disk]# cd /opt/
[root@www opt]# umount /disk/
[root@www opt]# ext3grep /mydata/disk1 –ls –inode 2
:执行命令就开始搜索可以恢复的数据文件信息(包括已删除的和存在的),其中包含D标志的是已被删除的文件,如果不记得被删除的文件名,可以通过下面命令获得。
[root@www opt]# ext3grep /mydata/disk1   –dump-names
[root@www ext3grep]# ext3grep /mydata/disk1  –restore-file  ext3grep/hosts
:恢复单个文件,需注意ext3grep/hosts,是相对的路径,因之前的hosts是在/mydata/disk1挂载到的/disk目录的ext3grep下,所以此处是如此表示。
[root@www RESTORED_FILES]# ext3grep /mydata/disk1  –restore-inode 12
通过inode号来恢复。
[root@www RESTORED_FILES]# ext3grep /mydata/disk1  –restore-all
恢复所有文件。
数据库表被删除也可以通过这个方式来恢复,恢复的表记得改成oracle相应权限即可。