ext3文件系统反删除利器ext3grep应用实战
推荐:10年技术力作:《高性能Linux服务器构建实战Ⅱ》全网发行,附试读章节和全书实例源码下载!
一、“rm –rf”带来的困惑
国外一份非常著名的Linux系统管理员守则中有这么一条“慎用 rm –rf 命令,除非你知道此命令将带来什么后果”,可见,这个命令对系统管理员的重要性。在实际的工作中,由此命令带来的误删除数据案例屡见不鲜,很多系统管理员都遇到过或者犯过这样的错误。由于开发人员对命令的不熟悉,或者粗心大意、疏于管理,执行了此命令,数据在一瞬间就被清空了。Linux不具备类似回收站的功能,这就意味着数据丢失。虽然Linux自身提供了恢复数据的机制,但是这个功能基本没用,要恢复数据,通过常规手段是无法完成的,此时,只有找专业的数据恢复公司来恢复数据,这样无疑要付出很大的成本和费用,造成无法估量的的损失。
可见,作为系统管理员,一定要有数据安全意识,数据保护意识,严格遵守相关维护守则,将这种失误带来的损失降低到最低。幸运的是,Linux下提供了一款开源软件恢复误删的数据,利用这个ext3文件系统数据恢复工具ext3grep可以恢复误删除的数据。
二、 ext3grep的安装与使用
ext3grep是一个开源的ext3文件系统反删除工具,在ext3grep出现之前,数据被删除后,通过常规手段恢复基本是不可能的,虽然debugfs命令可以对ext2文件系统做一些恢复,但是对ext3文件系统就无能为力了。ext3是一个日志型文件系统,ext3grep正是通过分析ext3文件系统的日志信息来恢复被删除的文件和数据的。
操作系统环境:CentOS release 6.4。
ext3grep版本:ext3grep-0.10.1。
ext3grep官方网站:http://code.google.com/p/ext3grep/,可以从这里下载最新的ext3grep版本。这里下载的是ext3grep-0.10.1.tar.gz。
所需的系统相关包:
1
2
3
4
|
[root@localhost ~] # rpm -qa |grep e2fsprogs
e2fsprogs-1.41.12-21.el6.x86_64
e2fsprogs-libs-1.41.12-21.el6.x86_64
e2fsprogs-devel-1.41.12-21.el6.x86_64
|
系统必须要安装e2fsprogs-libs,不然后面ext3grep的安装会出现问题。
下面进入编译安装阶段,过程如下:
1
2
3
4
5
6
|
[root@localhost /opt ] # tar zxvf ext3grep-0.10.1.tar.gz
[root@localhost ext3grep-0.10.1] # ./configure
[root@localhost ext3grep-0.10.1] # make
[root@localhost ext3grep-0.10.1] # make install
[root@localhost ext3grep-0.10.1] # ext3grep -v
Running ext3grep version 0.10.1
|
这样,ext3grep就安装完成了,默认的ext3grep命令放在/usr/local/bin目录下。ext3grep的使用非常简单,这里不做介绍,可以通过“ext3grep --help”获取详细的使用帮助。
三、通过ext3grep恢复误删除的文件与目录
1、数据恢复准则
当发现某个分区的数据被误删除后,要做的第一件事是立刻卸载被误删除文件所在的分区,或者重新以只读方式挂载此分区。
这么做的原因其实很简单:删除一个文件,就是中文件inode节点中的扇区指针清除,同时,释放这些数据对应的数据块,而真实的文件还存留在磁盘分区中,但是这些被删除的文件不一定会一直存留在磁盘中,当这些释放的数据块被操作系统重新分配时,那些被删除的数据就会被覆盖,因此,在数据误删除后,马上卸载文件所在分区可以降低数据块中数据被覆盖的风险,进而提高成功恢复数据的机率。
2、实战ext3grep恢复文件
(1).模拟数据误删除环境
下面通过一个模拟环境,详细介绍利用ext3grep恢复数据文件的过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
[root@localhost /] # mkdir /disk #建立一个挂载点
[root@localhost /] # cd /mydata
[root@localhost mydata] # dd if=/dev/zero of=/mydata/disk1 count=102400 #模拟磁盘分
#区,创建一个空设备
102400+0 records in
102400+0 records out
52428800 bytes (52 MB) copied, 1.20597 seconds, 43.5 MB /s
[root@localhost mydata] # mkfs.ext3 /mydata/disk1 #将空设备格式化为ext3格式
[root@localhost mydata] # mount -o loop /mydata/disk1 /disk #挂载设备到/disk目录下
[root@localhost mydata] # cd /disk/
[root@localhost disk] # cp /etc/profile /disk #复制文件到模拟磁盘分区
[root@localhost disk] # cp /boot/initrd-2.6.18-164.11.1.el5xen.img /disk
[root@localhost disk] # echo "ext3grep test">ext3grep.txt
[root@localhost disk] # mkdir /disk/ext3grep
[root@localhost disk] # cp /etc/hosts /disk/ext3grep
[root@localhost disk] # pwd
/disk
[root@localhost disk] # ls -al
总计 2512
drwxr-xr-x 4 root root 4096 04-07 16:46 .
drwxr-xr-x 31 root root 4096 04-07 16:45 ..
drwxr-xr-x 2 root root 4096 04-07 16:46 ext3grep
-rw-r--r-- 1 root root 14 04-07 16:31 ext3grep.txt
-rw------- 1 root root 2535991 04-07 16:30 initrd-2.6.18-164.11.1.el5xen.img
drwx------ 2 root root 4096 04-07 16:33 lost+found
-rw-r--r-- 1 root root 1029 04-07 16:30 profile
[root@localhost disk] # md5sum profile #获取文件校验码
a6e82d979bb95919082d9aceddf56c39 profile
[root@localhost disk] # md5sum initrd-2.6.18-164.11.1.el5xen.img
031226080e00d7f312b1f95454e5a1ff initrd-2.6.18-164.11.1.el5xen.img
[root@localhost disk] # md5sum ext3grep.txt
5afe55495cdb666daad667e1cd797dcb ext3grep.txt
[root@localhost disk] # rm -rf /disk/* #模拟误删除数据操作
[root@localhost disk] # ls
(2).卸载磁盘分区
执行以下命令卸载磁盘分区:
[root@localhost disk] # cd /opt #切换到/opt目录下
[root@localhost /opt ] # umount /disk #卸载模拟磁盘分区
(3).查询恢复数据信息
执行如下命令,查询需要恢复的数据信息:
[root@localhost /opt ] # ext3grep /mydata/disk1 --ls --inode 2
|
执行该命令后,ext3grep就开始搜索可以恢复的数据文件信息,输出下图所示。
“ext3grep /mydata/disk1 --ls --inode 2”主要用于扫描当前文件系统下所有文件的信息,包括存在的和已经删除的文件,其中含有D标识的就是已被删除的文件,如果不记得被删除的文件的名称,可以通过这种方式来获取要恢复的文件的名称。
通过下面的方式可以获取文件要恢复的路径信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@localhost /opt ] # ext3grep /mydata/disk1 --dump-names
Running ext3grep version 0.10.1
Number of groups : 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1270629014 = Wed Apr 7 16:30:14 2010
Number of descriptors in journal: 63; min / max sequence numbers: 2 / 10
Loading disk1.ext3grep.stage2... done
ext3grep
ext3grep.txt
ext3grep /hosts
initrd-2.6.18-164.11.1.el5xen.img
lost+found
profile
|
(4).恢复单个文件
如果要恢复被删除的某个文件,通过下面方式即可。
1
2
3
4
5
6
7
8
9
10
|
[root@localhost /opt ] # ext3grep /mydata/disk1 --restore-file ext3grep.txt
Running ext3grep version 0.10.1
Number of groups : 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1270629014 = Wed Apr 7 16:30:14 2010
Number of descriptors in journal: 63; min / max sequence numbers: 2 / 10
Writing output to directory RESTORED_FILES/
Loading disk1.ext3grep.stage2... done
Restoring ext3grep.txt
|
由上面的输出可知,被删除的文件ext3grep.txt已经成功恢复。那么恢复的数据放到哪里了呢?在这段操作中,在/opt目录下执行ext3grep命令,恢复的数据文件就存放在/opt/ RESTORED_FILES目录下,也就是说ext3grep会在执行恢复命令的当前目录下自动创建一个RESTORED_FILES目录,这个目录专门用于存放恢复的数据。
下面是恢复指定目录下的某个文件的操作:
1
2
3
4
5
6
7
8
9
|
[root@localhost /opt ] # ext3grep /mydata/disk1 --restore-file ext3grep/hosts
Running ext3grep version 0.10.1
Number of groups : 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1270629014 = Wed Apr 7 16:30:14 2010
Number of descriptors in journal: 63; min / max sequence numbers: 2 / 10
Loading disk1.ext3grep.stage2... done
Restoring ext3grep /hosts
|
这里要注意的是,“--restore-file”后面指定的是恢复文件路径,这个路径应该是文件的相对路径,这里的相对路径指的是相对指定设备的路径,比如,设备/mydata/disk1的挂载点是/disk,而ext3grep.txt文件就在/disk目录下,因此直接指定文件名就可以了。如果要恢复/disk/ext3grep/hosts文件,那么指定的参数应该是“ext3grep/hosts”,也就是上面代码中所指定的形式。
通过“--restore-inode”参数,只需指定文件对应的inode值即可恢复文件,操作如下,其中inode值为12的是profile文件:
1
2
3
4
5
6
7
8
9
|
[root@localhost RESTORED_FILES] # ext3grep /mydata/disk1 --restore-inode 12
Running ext3grep version 0.10.1
Number of groups : 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1270629014 = Wed Apr 7 16:30:14 2010
Number of descriptors in journal: 63; min / max sequence numbers: 2 / 10
Writing output to directory RESTORED_FILES/
Restoring inode.12
|
下面是进入RESTORED_FILES目录,验证文件是否成功恢复:
1
2
3
4
5
6
7
|
[root@localhost /opt ] # cd RESTORED_FILES
[root@localhost RESTORED_FILES] # ls
ext3grep ext3grep.txt inode.12
[root@localhost RESTORED_FILES] # md5sum ext3grep.txt
5afe55495cdb666daad667e1cd797dcb ext3grep.txt
[root@localhost RESTORED_FILES] # md5sum inode.12
a6e82d979bb95919082d9aceddf56c39 inode.12
|
根据校验结果可知,这个校验码与文件被删除之前的校验码完全一致,因此,通过这个方式恢复出来的文件是完整的。
(5).恢复所有已删除数据
当需要恢复的文件较少时,通过前面介绍的指定文件的方式进行逐个恢复是可行的,但是如果要恢复很多个文件,如1000个以上,还采取逐个指定的方式,效率是非常低下的,此时就要利用ext3grep命令的“--restore-all”参数了,具体操作如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@localhost /opt ] # ext3grep /mydata/disk1 --restore-all
Running ext3grep version 0.10.1
Number of groups : 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1270629014 = Wed Apr 7 16:30:14 2010
Number of descriptors in journal: 63; min / max sequence numbers: 2 / 10
Loading disk1.ext3grep.stage2... done
Restoring ext3grep.txt
Restoring ext3grep /hosts
Restoring initrd-2.6.18-164.11.1.el5xen.img
Restoring profile
[root@localhost /opt ] # cd RESTORED_FILES/
[root@localhost RESTORED_FILES] # ls -al
总计 2512
drwxr-xr-x 4 root root 4096 04-07 16:46 .
drwxr-xr-x 31 root root 4096 04-07 16:45 ..
drwxr-xr-x 2 root root 4096 04-07 16:46 ext3grep
-rw-r--r-- 1 root root 14 04-07 16:31 ext3grep.txt
-rw------- 1 root root 2535991 04-07 16:30 initrd-2.6.18-164.11.1.el5xen.img
drwx------ 2 root root 4096 04-07 16:33 lost+found
-rw-r--r-- 1 root root 1029 04-07 16:30 profile
|
根据这个输出可知,“--restore-all”参数将指定存储设备中可以恢复的文件都恢复出来并放到了RESTORED_FILES目录中。“--restore-all”参数对恢复大量数据文件是非常有用的。
本文转自南非蚂蚁51CTO博客,原文链接:http://blog.51cto.com/ixdba/1571334 ,如需转载请自行联系原作者
ext3文件系统反删除利器ext3grep应用实战相关推荐
- ext3文件系统反删除利器-ext3grep
Linux作为企业级服务器,数据的安全性至关重要,任何数据德尔丢失和误删都是不可容忍的!最近我接触到一款软件-ext3grep,它可以恢复误删的数据,下面简单讲解一下这个软件. ext3grep的恢复 ...
- reiserfs文件系统反删除(Undelete)操作的实践(转)
reiserfs文件系统反删除(Undelete)操作的实践(转)[@more@]一.关于Linux的文件系统(Filesystem)请参考: <Linux 文件系统概述>二.reiser ...
- linux下反删除软件,浅谈Linux文件系统反删除方法(二)
列出的档有很多(这里找到2692个),第一字段是档节点号,第二字段是档所有者,第三字段是读写权限,接下来是档大小,占用块数,删除时间.然后就可以根据档大小和删除日期判断那些是我们需要的.比如我们要恢复 ...
- mysql ext3 ext4_给你一个惊喜:EXT3/EXT4文件系统数据删除后的数据恢复
所谓的日志型文件系统,就是文件系统中做了什么操作,操作系统就把它记录下来,比如创建一个新文件,操作系统会在日志文件中记录下来, 删除一个文件,操作系统也会在日志文件中记录下来,记录的信息包括文件名称. ...
- 实例:Linux EXT3文件系统下成功恢复误删的文件
[文章作者:张宴 本文版本:v1.0 最后修改:2009.07.06 转载请注明原文链接:http://blog.s135.com/linux_ext3_undelete/] 环境:CentOS 5. ...
- Linux EXT3文件系统下成功恢复误删的文件
环境:CentOS 5.3 x86_64下,/dev/sdb1为数据分区/data0,EXT3文件系统. 前因:误删了/data0/tcsql/cankao/phpcws-1.5.0/httpcws. ...
- 苹果文件系统数据删除后数据恢复技术难度大
苹果主流文件系统是HFS/HFS+/HFSX,广泛应用于苹果硬件产品,其中包括MAC机器.IPHONE.IPAD.IPOD系列.在数据恢复业务中,经常会碰到苹果设备的数据恢复案例,例如MAC机器误删除 ...
- Lucene知识小总结4:索引的反删除
2019独角兽企业重金招聘Python工程师标准>>> IndexReader提供了一个有时非常有用的方法undeleteAll,该方法能反向操作索引中所有被挂起的删除.需要注意的是 ...
- 恢复Ext3下被删除的文件(转)
前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 'test.txt' $ls -il test.txt15 -rw-rw-r– 2 root ...
最新文章
- 推荐8个实用的办公工具,让你体验起飞的感觉
- 刚刚,2020 ACM Fellow放榜!陈怡然、颜水成、周昆等12名华人当选
- 奇奇seo优化软件_seo优化软件如何选择
- python中do的用法,如何使用docplex(python)对优化问题中的约束进行建模?
- 使用TensorFlow训练WDL模型性能问题定位与调优
- 关于redis的keys命令的性能问题
- jzoj4248-n染色【数学,快速幂】
- E72上安装fring使用skypeout拨打电话
- SSM整合(二)(mybatis逆向工程)
- paip.java优缺点attilax总结c0.doc
- 勇芳软件测试,勇芳自动刷分精灵
- java 舆情分析_基于jsp的舆情监测系统-JavaEE实现舆情监测系统 - java项目源码
- (vue)监听浏览器刷新
- 怎么看计算机的a卡右键找不到,右键没有显卡,右键没有amd显卡选项
- 小孩子要学习时间管理吗
- 了解Google发展的下一代搜索Knowledge Graph:Emily Moxley访谈录
- noip2011 公交观光
- 为什么单片机定时器的TH和TL都要设置?
- OpenCV Python 人脸识别签到系统(超详细注释)
- 学术-物理-维空间:二维空间
热门文章
- mybatis 做 insert操作的时候返回插入的那条数据的id
- IOS初级:UIScrollView UIPageControl
- 手机网页(WAP)页面上的输入框默认键盘类型
- 如何创建一个FeatureClass,IFeatureWorkspace 接口漫谈
- 《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...
- 【Luogu】P3380树套树模板(线段树套Splay)
- Codeforces Round #408 (Div. 2)
- Objective-C setter和getter
- QTP从数据库中导出数据
- [转载].怎样在有限状态机中延时