用ext3grep恢复rm -rf 误删除的文件
Linux作为企业级服务器,数据安全性至关重要,任何有价值的数据被误删除都是不能容忍的,甚至可能带来大的灾难!作为linux系统管理员,一定要有数据保护意思,不但要做好数据备份工作,还应该有在将重要数据误删除后恢复的能力.在这里给大家介绍一个开源的数据恢复工具ext3grep,该工具可以恢复rm –rf误删除的文件
一、ext3grep的原理:
利用ext3grep恢复文件并不依赖于任何文件格式,首先ext3grep利用root的inode来获取文件系统中所有的文件信息,包括存在的或已删除的文件,这些信息包括文件名、inode号、然后利用inode结合系统日志去查询该inode所在的block位置,包括直接、间接块的信息,最后用dd命令来将数据信息备份出来,从而恢复数据!
当发现文件被误删除后,首先做的第一件事就是马上卸载该文件所在的分区,或者以只读的方式挂载该分区,原因是文件被删除后,文件内的数据还保留在磁盘上,除非系统将这些数据所在的块分配出去了,要不然一直都会存在,所以为了保险,首先做的事就是卸载文件所在的分区,
至于根分区的话,可以重启系统,然后以单用户模式进入系统,以只读的方式挂载根分区:
mount –o ro,remount /
二、ext3grep安装
在安装之前首先检查一下系统是否已安装e2fsprogs相关软件,如果没有需要下载安装,要不然安装ext3greep时会报错!
[root@localhost ~]# rpm -qa|grep e2fs
e2fsprogs-devel-1.39-23.el5_5.1
e2fsprogs-libs-1.39-23.el5_5.1
e2fsprogs-1.39-23.el5_5.1
e2fsprogs-libs-1.39-23.el5_5.1
可以从网上下载ext3grep源码包:
wget http://code.google.com/p/ext3grep/downloads/detail?name=ext3grep-0.10.2.tar.gz
解压、编译、安装
tar zxf ext3grep-0.10.2.tar.gz
cd ext3grep-0.10.2
./configure –prefix=/usr/local/ext3grep
make
make install
三、利用ext3grep恢复rm –rf删除的数据
首先我们模拟一个磁盘分区,创建一个虚拟设备
[root@localhost ~]# mkdir /disk 创建挂载点
[root@localhost ~]# mkdir /virtual
[root@localhost ~]# dd if=/dev/zero of=/virtual/disk1 conut=102400
[root@localhost ~]# mkfs -t ext3 /vittual/disk1
[root@localhost ~]# mount -o loop /virtual/disk1 /disk
[root@localhost ~]# echo “this is a ext3grep test,thank you” >/disk/ext3grep-test.txt
用rm –rf 删除刚才创建的文件
rm –rf /disk/*
然后查看确认文件已被删除
三、用ext3grep恢复被删除的文件
创建一个专门用来存放被恢复文件的目录
mkdir restore
cd restore
四、恢复文件的过程
在刚创建的restore目录下执行
查看被删除的文件信息
[root@localhost restore]# /usr/local/ext3grep/bin/ext3grep /virtual/disk --ls --inode 2
.-- File type in dir_entry (r=regular file, d=directory, l=symlink)
| .-- D: Deleted ; R: Reallocated
Indx Next | Inode | Deletion time Mode File name
==========+==========+----------------data-from-inode------+-----------+=========
0 1 d 2 drwxr-xr-x .
1 end d 2 drwxr-xr-x ..
2 end d 11 D 1340620814 Mon Jun 25 18:40:14 2012 drwx------ lost+found
3 end r 12 D 1340620814 Mon Jun 25 18:40:14 2012 rrw-r--r-- ext3grep-test.txt
[root@localhost restore]# /usr/local/ext3grep/bin/ext3grep /virtual/disk --restore-file ext3grep-test.txt
Running ext3grep version 0.10.2
WARNING: I don't know what EXT3_FEATURE_COMPAT_EXT_ATTR is.
Number of groups: 7
Minimum / maximum journal block: 16616 / 20729
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1340620763 = Mon Jun 25 18:39:23 2012
Number of descriptors in journal: 20; min / max sequence numbers: 2 / 5
Writing output to directory RESTORED_FILES/
Loading disk.ext3grep.stage2... done
Restoring ext3grep-test.txt
由上面的输出可以得知,ext3grep-test.txt文件已经恢复成功,在当前目录下生成一个RESTORED_FILES目录,恢复过后的文件就放在那里。
[root@localhost RESTORED_FILES]# ls
ext3grep-test.txt
总结:此工具虽然能够恢复被rm –rf 命令删除的文件,但是做为一个系统管理人员应该在脑海中每时每刻都应该有一个备份数据的概念,毕竟备份才是王道!