在Linux系统下,通过命令“rm -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常 规的手段是无法恢复的,因此使用这个命令要非常慎重。在使用rm命令的时候,比较稳妥的方法是把命令参数放到后面,这样有一个提醒的作用。其实还有一个方 法,那就是将要删除的东西通过mv命令移动到系统下的/tmp目录下,然后写个脚本定期执行清除操作,这样做可以在一定程度上降低误删除数据的危险性。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。
1、extundelete的恢复原理
在介绍使用extundelete进行恢复数据之前,简单介绍下关于inode的知识。在Linux下可以通过“ls -id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:
由此可知,根目录的inode值为2。
在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一 般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该 inode所在的block位置,包括直接块、间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
2、安装extundelete
其目前的稳定版本是extundelete-0.2.4。在安装extundelete之前需要安装e2fsprogs和e2fsprogs-libs两个依赖包。e2fsprogs和e2fsprogs-libs安装非常简单,这里不做介绍。但是对ubuntu系统而言需要安装的依赖包是
执行:#sudo apt-get install e2fslibs-dev
上面指令仅是下载安装extundelete-0.2.4的依赖包,还需在官网中下载extundelete-0.2.4.tar.bz2 。
然后安装extundelete-0.2.4,如下:
# tar jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure
# make
# make install
成功安装extundelete后,会在系统中生成一个extundelete可执行文件。extundelete的使用非常简单,可以通过“extundelete --help”获得此软件的使用方法。
下面就是找回被删除文件usb_camera.c的过程:
a、查看文件系统类型和分区
我的文件系统类型为ext4,extundelete支持的类型为ext3/ext4 ,而ext3grep仅支持ext3文件系统的恢复。用户文件系统在/dev/sdal根文件系统中,被rm的文件也在这里。
b、执行:# extundelete --inode 2 /dev/sda1
其中,--inode 2为查找当前目录下的文件和被rm掉的文件。先从根目录查起。
被我删除的文件放在/win7files目录下。
c、# extundelete --inode 1438977 /etv/sda1
win7files的节点号为1438977,--inode1438977就是查看/win7file目录下的文件及被删除的文件。依次下去,直到找到usb_camera.c的节点号。执行代码如下:#extundelete --inode 2 /dev/sda1(上一步已经执行过该命令)# extundelete --inode 1438977 /etv/sda1# extundelete --inode 1438977 /dev/sda1# extundelete --inode 1453508 /dev/sda1# extundelete --inode 1455584 /dev/sda1
d、# extundelete --restore-inode 1455587 /dev/sda1
setup.sh的节点号为1455587,--restore-inode1455587就是恢复这个节点文件。
e、查看恢复结果
在根目录下产生了一个RECOVERED_FILES目录,恢复的文件就在该目录中。file.1455587主是要恢复的usb_camera.c。我将同一文件恢复了两次,所在这时有个file.1455587与file.1455587.v1。