ext3文件系统反删除利器ext3grep应用实战

一、“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。

所需的系统相关包:

[[email protected] ~]# 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的安装会出现问题。

下面进入编译安装阶段,过程如下:

[[email protected] /opt]# tar zxvf ext3grep-0.10.1.tar.gz
[[email protected] ext3grep-0.10.1]# ./configure
[[email protected] ext3grep-0.10.1]# make
[[email protected] ext3grep-0.10.1]# make install
[[email protected] 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恢复数据文件的过程。

[[email protected] /]# mkdir /disk  #建立一个挂载点
[[email protected] /]# cd /mydata
[[email protected] 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
[[email protected] mydata]# mkfs.ext3 /mydata/disk1  #将空设备格式化为ext3格式
[[email protected] mydata]# mount -o loop /mydata/disk1  /disk  #挂载设备到/disk目录下
[[email protected] mydata]# cd /disk/
[[email protected] disk]# cp /etc/profile  /disk           #复制文件到模拟磁盘分区
[[email protected] disk]# cp /boot/initrd-2.6.18-164.11.1.el5xen.img  /disk
[[email protected] disk]# echo "ext3grep  test">ext3grep.txt  
[[email protected] disk]# mkdir  /disk/ext3grep    
[[email protected] disk]# cp /etc/hosts  /disk/ext3grep
[[email protected] disk]# pwd
/disk
[[email protected] 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
[[email protected] disk]# md5sum  profile  #获取文件校验码
a6e82d979bb95919082d9aceddf56c39 profile
[[email protected] disk]# md5sum initrd-2.6.18-164.11.1.el5xen.img   
031226080e00d7f312b1f95454e5a1ff  initrd-2.6.18-164.11.1.el5xen.img
[[email protected] disk]# md5sum  ext3grep.txt
5afe55495cdb666daad667e1cd797dcb  ext3grep.txt
[[email protected] disk]# rm -rf /disk/*  #模拟误删除数据操作
[[email protected] disk]# ls
(2).卸载磁盘分区
执行以下命令卸载磁盘分区:
[[email protected] disk]# cd /opt #切换到/opt目录下
[[email protected] /opt]# umount /disk  #卸载模拟磁盘分区
(3).查询恢复数据信息
执行如下命令,查询需要恢复的数据信息:
[[email protected] /opt]# ext3grep  /mydata/disk1  --ls --inode 2

执行该命令后,ext3grep就开始搜索可以恢复的数据文件信息,输出下图所示。

“ext3grep  /mydata/disk1  --ls --inode 2”主要用于扫描当前文件系统下所有文件的信息,包括存在的和已经删除的文件,其中含有D标识的就是已被删除的文件,如果不记得被删除的文件的名称,可以通过这种方式来获取要恢复的文件的名称。

通过下面的方式可以获取文件要恢复的路径信息。

[[email protected] /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).恢复单个文件

如果要恢复被删除的某个文件,通过下面方式即可。

[[email protected] /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目录,这个目录专门用于存放恢复的数据。

下面是恢复指定目录下的某个文件的操作:

[[email protected] /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文件:

[[email protected] 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目录,验证文件是否成功恢复:

[[email protected] /opt]# cd RESTORED_FILES
[[email protected] RESTORED_FILES]# ls
ext3grep  ext3grep.txt  inode.12
[[email protected] RESTORED_FILES]# md5sum ext3grep.txt 
5afe55495cdb666daad667e1cd797dcb  ext3grep.txt
[[email protected] RESTORED_FILES]# md5sum inode.12
a6e82d979bb95919082d9aceddf56c39  inode.12

根据校验结果可知,这个校验码与文件被删除之前的校验码完全一致,因此,通过这个方式恢复出来的文件是完整的。

(5).恢复所有已删除数据

当需要恢复的文件较少时,通过前面介绍的指定文件的方式进行逐个恢复是可行的,但是如果要恢复很多个文件,如1000个以上,还采取逐个指定的方式,效率是非常低下的,此时就要利用ext3grep命令的“--restore-all”参数了,具体操作如下:

[[email protected] /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
[[email protected] /opt]# cd RESTORED_FILES/
[[email protected] 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”参数对恢复大量数据文件是非常有用的。

时间: 2024-10-20 20:38:12

ext3文件系统反删除利器ext3grep应用实战的相关文章

第6章 ext3文件系统反删除利器ext3grep

第6章  ext3文件系统反删除利器ext3grep 只能用于ext3文件系统!!!!!!!高俊峰(高性能Linux服务器构建实战:运维监控.性能调优与集群应用(完整)) Linux作为企业级服务器,数据的安全性至关重要,任何数据的丢失和误删除都是不可容忍的.作为系统管理员,一定要有数据保护意识,不但要对服务器数据进行定期备份,而且还要具有误删除数据后将其快速恢复的技能.本章重点讲述Linux下的ext3文件系统中用于数据恢复的开源软件ext3grep.通过这个软件,可以快速.准确地恢复误删除的

ext3文件系统反删除利器-ext3grep

Linux作为企业级服务器,数据的安全性至关重要,任何数据德尔丢失和误删都是不可容忍的!最近我接触到一款软件-ext3grep,它可以恢复误删的数据,下面简单讲解一下这个软件. ext3grep的恢复原理 利用ext3grep恢复文件时并不依赖特定文本格式.首先ext3grep通过文件系统的root inode(根目录的inode一般为2)来获取当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode.然后利用inode信息结合日志去查询该inode所在的bloc

extundelete反删除利器使用说明

在linux系统中,相信都有误删文件的经历,rm -rf 可删除一切文件.当删除了一些重要数据,应该如何找回呢? extundelete是一款强大的linux数据恢复工具,可恢复ext3和ext4文件系统中的文件. 误删文件后千万不要慌,第一件要做的事就是卸载分区或以只读方式重新挂载分区. 安装extundelete # yum install gcc-c++ e2fsprogs-devel # cd extundelete-0.2.4 # make # make install 查看sdb1分

ext3文件系统,reiserfs,xfs,jsf那种性能好点

ext2 是一个旧的 Linux 档桉系统,没有日志功能. 启用的时间通常需要很久.目前有许多 日志型态 的档桉系统可以以更快的速度及更好的效率完成系统启用和检查. ext3 为 ext2 的日志版,提供了 metadata 日志系统 并且可以快速地使用日志系统复原.ext3 是个相当不错并且可靠的档桉系统. 它有额外的 hashed b-tree 索引功能,开启他后几乎任何情况内都是高效能.你可以在 mke2fs 指令加上 -O dir_index 开启这个功能.简单来说,ext3 是一个很杰

ext3 文件系统中误删文件的恢复方法

如果oracle进程已经关闭,无法再通过利用ora_进程跟踪文件句柄进行恢复,那么还有无方法来对误删除的文件进行恢复呢?下面介绍一下用第三方软件进行恢复 --首先确保已经安装了e2fsprogs包 [[email protected] ext3grep-0.10.2]# rpm -qa | grep e2fsprogs e2fsprogs-1.39-20.el5 e2fsprogs-devel-1.39-20.el5 e2fsprogs-libs-1.39-20.el5 --软件下载: http

EXT3文件系统误删除导致文件系统中的邮件丢失恢复方法

一.故障描述 由8块盘组成的RAID5, 上层是EXT3文件系统,由于误删除导致文件系统中的邮件丢失 二.镜像磁盘为防止数据恢复过程中由于误操作对原始磁盘造成二次破坏, 使用winhex软件为每块磁盘做镜像, 以后所有的数据恢复操作都在镜像盘上进行, 不会对原始磁盘造成影响镜像结果如下:图一 三.组建RAID通过分析数据在硬盘中分布的规律, 获取RAID类型, RAID条带的大小,以及每块磁盘的顺序.根据分析结果使用UFS组建RAID.结果如下:图二 四.导出目标分区 从组建好的RAID中可以看

Linux ext2/ext3文件系统

Linux最传统的磁盘文件系统(filesystem)使用的是ext2,所以要了解文件系统就得要由ext2开始. 一.文件系统特性 磁盘分区完毕后还需要进行格式化,之后操作系统才能够使用这个分区.这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式.传统的磁盘与文件系统的应用中,一个分区誻只能够被格式化成为一个文件系统,所以我们可以说一个文件系统就是一个分区. 操作系统的文件数据除文件内容外,通常还有非常

EXT2与EXT3文件系统两者的差别

其实这两种文件系统的格式是完全相同的,只是 ext3文件系统会在硬盘分区的最后面留出一块磁盘空间来存放日志(Journal)记录. 在 ext2格式的文件系统上,当要向硬盘中写入数据时,系统并不是立即将这些数据写到硬盘上,而是先将这些数据写到数据缓冲区中(内存),当数据缓冲区写满时,这些数据才会被写到硬盘中.(硬盘.U盘.光盘.SD卡等存储设备的数据发生了丢失,使用迷你兔数据恢复软件(minitool)进行恢复找回.) 在 ext3格式的文件系统上,当要向硬盘中写入数据时,其内部的操作过程如下:

[深入理解文件系统之十二] ext3文件系统的挂载选项和journal

作为ext2的改进版本,ext3和ext2文件系统相比,最大的改进就是引入了journal功能,这在既提高了文件系统数据和元数据的一致性,又大大缩短了数据一致性检查和恢复的时间. ext3文件系统的mount 选项 只读模式:ro journal选项: journal=update/inum journal_dev=devmum norecovery/noload:不挂载日志分区,可能会挂载上inconsistent file-system. 数据模式:data=journal/ordered/