extundelete恢复软件的详解

回复 收藏
本帖最后由 So Long 于 2015-6-5 22:05 编辑

数据恢复软件extundelete介绍
作为一名运维人员,保证数据的安全是肯本职责,所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候如何快速、有效的恢复数据呢?
下来由我介绍一下linux系统下的常用的几个数据恢复工具,extundelete、ext3grep这里重点讲解extundelete软件。
1如何使用“rm  -rf”命令
在linux系统下,通过命令“rm  -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常的慎重。在使用rm命令的时候,比较稳妥的方法是把命令参数放到后面,这样有一个提醒的作用。如下例子:

[root@server3 ~]# rm  -rf  *
[root@server3 ~]# ls
[root@server3 ~]# touch file{1..10}
[root@server3 ~]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
[root@server3 ~]# rm  *  -rf
[root@server3 ~]# ls
[root@server3 ~]#

其实还有一个方法,那就是将要删除的东西通过吗mv命令移动到系统的/tmp目录下,然后写个脚本定期的执行清除操作,这样可以在一定程度上降低误删除数据的危险。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定的局限性,都不能保证完整地恢复出所有的数据,因此,把备份作为核心,把数据恢复工作作为辅助是运维人员必须坚持的原则。
2  extundelete与ext3grep的异同
在linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大。
Extundelete是基于linux的一个数据恢复工具,它通过分析文件系统的日志,解析出所有文件的inode信息,从而可以恢复linux下主流的ext3、ext4文件系统下被误删除的文件。而ext3grep仅仅支持ext3的文件系统的恢复。在恢复速度上,extundelete要快的多,因为extundelete的恢复机制是扫描inode和恢复数据同时进行,并且支持单个文件恢复、单个目录恢复、inode恢复、block恢复、完整磁盘恢复等,而ext3grep就略显笨拙了,它需要首先扫描完要恢复数据的所有inode信息,然后才能开始数据恢复,所以在恢复速度上相对较慢,并且在功能上也不支持目录恢复、时间段恢复等。
3  extundelete 的恢复原理
在介绍使用extundelete进行恢复数据之前,简单介绍下关于inode的知识。在linux下可以通过“ls  -id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:

[root@server3 ~]# ls -id  /
2 /
由此可知,根目录的inode值为2。
在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块、间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
4  安装extundelete
Extundelete的官方网站是:http://extundelete.sourceforge.net/ ,其目前的稳定版本是extundelete-0.2.4。在安装extundelete之前需要安装e2fsprogs和e2fsprogs-libs两个依赖包。
下面安装extundelete的编译安装过程:
[root@server3 ~]# yum install -y e2fsprogs  e2fsprogs-libs e2fsprogs-devel gcc  gcc-c++
[root@server3 ~]# cd /usr/local/src/
[root@server3src]#wget http://ncu.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[root@server3 src]# tar -jxf extundelete-0.2.4.tar.bz2
[root@server3 src]# cd extundelete-0.2.4
[root@server3 extundelete-0.2.4]# ./configure
[root@server3 extundelete-0.2.4]# make
[root@server3 extundelete-0.2.4]# make install
成功安装extundelete后,会在系统中生成一个extundelete可执行文件。

Extundelete的用法:
# extundelete  [options]  [action]  device-file
其中,参数(options)有:
--version,-[vV],显示软件版本号。
--help,显示软件帮助信息。
--superblock,显示超级快信息。
--journal,显示日志信息。
--after dtime,时间参数,表示在某段时间之后被删除的文件或者目录。
--before dtime,时间参数,表示在某段时间之前被删除的文件或者目录。
动作:(action):
--inode ino,显示节点“ino”的信息。
--block blk,显示数据块“blk”的信息。
--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RECOVERED_FILES文件夹中,使用节点编号作为扩展名。
--restore-file ‘path’,恢复命令参数,表示将恢复指路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
--restore-files ‘path’,恢复命令参数,表示将要恢复在路径中的以列表出的所有文件。
--restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
-j journal,表示从已经命名的文件中读取扩展日志。
-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
-B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。
5 extundelete恢复数据的过程
在数据被误删除以后,第一时间要做的是卸载被删除数据所在的磁盘或者磁盘分区,如果是系统根分区的数据遭到误删除,就需要将系统进入单用户,并且将根分区以只读模式挂载。这样做的原因很简单,因为文件将删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些应经删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。

A通过extundelete恢复单个文件

1:模拟数据误删除环境
在演示通过extundelete恢复数据之前,我们首先要模拟一个数据删除环境,这里我们以ext3文件系统为例,在ext4文件系统下的恢复方式与此完全一样。简单的模拟操作过程如下:
[root@server3 ~]# mkdir /data
[root@server3 ~]# mkfs.ext3 /dev/sdb1
[root@server3 ~]# mount /dev/sdb1 /data/
[root@server3 ~]# cp  /etc/passwd  /data/
[root@server3 ~]# mkdir /data/test
[root@server3 ~]# echo "extundelete test" > /data/test/test.txt
[root@server3 ~]# cd /data/
[root@server3 data]# md5sum  passwd
884efa34ae7e58ceae4b0bc80a901a71  passwd
[root@server3 data]# md5sum  test/test.txt
eb42e4b3f953ce00e78e11bf50652a80  test/test.txt
[root@server3 data]# rm * -rf
2,卸载磁盘分区

在将数据误删除后,立刻需要做的就是卸载这块磁盘分区:
[root@server3 data]# cd
[root@server3 ~]# umount /data/
3,查询可恢复的数据信息
通过extundelete命令可以查询/dev/sdb1分区可恢复的数据信息:
根据上面的输出,标记为Deleted状态的是已经删除的文件或者目录。同时还可以看到已经删除文件的inode值,接下来就可以恢复文件了。
[root@server3 ~]# extundelete  /dev/sdb1  --inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 17 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 10 00 00 7f 3e 70 55 d4 3e 70 55 | .A.......>pU.>pU
0010 | d4 3e 70 55 00 00 00 00 00 00 02 00 08 00 00 00 | .>pU............
0020 | 00 00 00 00 00 00 00 00 68 02 00 00 00 00 00 00 | ........h.......
0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0080 | 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0090 | fe 3d 70 55 00 00 00 00 00 00 00 00 00 00 00 00 | .=pU............
00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00b0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00d0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00f0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated
File mode: 16877
Low 16 bits of Owner Uid: 0
Size in bytes: 4096
Access time: 1433419391
Creation time: 1433419476
Modification time: 1433419476
Deletion Time: 0
Low 16 bits of Group Id: 0
Links count: 2
Blocks count: 8
File flags: 0
File version (for NFS): 0
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Indirect block: 0
Double indirect block: 0
Triple indirect block: 0

File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11             Deleted
passwd                                            12             Deleted
test                                              38721          Deleted
4,恢复单个文件
执行如下命令开始恢复文件:
[root@server3 /]# extundelete /dev/sdb1  --restore-file  passwd
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 17 groups loaded.
Loading journal descriptors ... 39 descriptors loaded.
Successfully restored file passwd
[root@server3 /]# cd RECOVERED_FILES/
[root@server3 RECOVERED_FILES]# ls
passwd
[root@server3 RECOVERED_FILES]# md5sum passwd
884efa34ae7e58ceae4b0bc80a901a71  passwd
extundelete恢复单个文件的参数是“--restore-file”,这里需要注意的是,“--restore-file”后面指定的是恢复文件路径,这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/passwd,那么在参数后面直接指定passwd文件即可,如果原来文件的存储路径是/data/test/test.txt ,那么在参数后面通过“test/test.txt”指定即可。
在文件恢复成功后,extundelete命令默认会执行命令的当前目录下创建一个 RECOVERED_FILES目录,此目录用于存放回复的文件,所以执行extundelete命令的当前目录必须是可写的。
根据上面的输出,通过md5sum命令校验,校验结果与之前的完全一致,表明文件恢复成功。

B,通过extundelete恢复单个目录

extundelete除了支持恢复单个文件,也支持恢复单个目录,在需要恢复目录时,通过“--restore-directory”选项即可恢复指定目录的所有数据。
继续在上面模拟的误删除数据环境下操作,现在要恢复/data目录下的test目录,操作如下:
[root@server3 mnt]# extundelete  /dev/sdb1   --restore-directory  /test
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 17 groups loaded.
Loading journal descriptors ... 39 descriptors loaded.
Searching for recoverable inodes in directory /test ...
4 recoverable inodes found.
Looking through the directory structure for deleted files ...
3 recoverable inodes still lost.
[root@server3 mnt]# ls
RECOVERED_FILES
[root@server3 mnt]# cd RECOVERED_FILES/
[root@server3 RECOVERED_FILES]# ls
test
[root@server3 RECOVERED_FILES]# cd test/
[root@server3 test]# ls
test.txt
[root@server3 test]# cat test.txt
extundelete test
可以看到之前删除的目录test已经恢复成功,进入这个目录发现文件内容和大小正常。

C,通过extundelete恢复所有误删除的数据
当需要恢复的数据较多时,一个一个的指定文件或者目录将是一项非常的繁重和耗时的工作,不过,extundelete考虑到了这点,此时可以通过“--restore-all”选项来恢复所有被删除的文件或者目录。
仍然在上面的模拟的误删除环境下操作,现在要恢复/data目录下所有数据,操作过程如下:
[root@server3 mnt]# extundelete  /dev/sdb1   --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 17 groups loaded.
Loading journal descriptors ... 39 descriptors loaded.
Searching for recoverable inodes in directory / ...
4 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
[root@server3 mnt]# ls
RECOVERED_FILES
[root@server3 mnt]# cd RECOVERED_FILES/
[root@server3 RECOVERED_FILES]# ls
passwd  test

D,通过extundelete恢复某个时间段的数据

有时候删除了大量的数据,其中很多数据是没有用,我们仅仅需要恢复其中的一部分数据,此时,如果采用恢复全部数据的办法,不但耗时,而且浪费资源,在这种情况下,就需要采用另外的一种恢复机制有选择的恢复,extundelete提供了“--after”和“--before”参数,可以通过指定某个时间段,进而只恢复这个时间段内的数据。
下面通过一个简单示例描述如何恢复某个时间段内的数据。
首先假定在/data目录下有个创建的压缩文件timetest.tar.gz,然后删除此文件,接着卸载/data分区,开始恢复一小时内的文件,操作如下:
[root@server3 ~]# mount /dev/sdb1 /data/
[root@server3 ~]# cd !$
cd /data/
[root@server3 data]# ls
[root@server3 data]# touch test.time
[root@server3 data]# ls
time.test
[root@server3 data]# date +%s
1433426256
[root@server3 data]# rm -rf time.test
[root@server3 data]# cd /mnt/
[root@server3 mnt]# umount  /data/
[root@server3 ~]# date +%s
1433426317
[root@server3 mnt]# extundelete  /dev/sdb1  --after 1433426250  --restore-all
Only show and process deleted entries if they are deleted on or after 1433426250 and before 9223372036854775807.
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 17 groups loaded.
Loading journal descriptors ... 18 descriptors loaded.
Searching for recoverable inodes in directory / ...
1 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
[root@server3 mnt]# ls
RECOVERED_FILES
[root@server3 mnt]# cd RECOVERED_FILES/
[root@server3 RECOVERED_FILES]# ls
test.time
[root@server3 RECOVERED_FILES]# cat test.time
hello world!
可以看道到,刚才删除的文件已经成功恢复了。

给大家推荐一篇文章:《运维债务的剖析与解决方案》
http://blues.baijia.baidu.com/article/69620

祝大家学习愉快!!!
2015-06-04 22:30 举报
已邀请:
0

sptty

赞同来自:

貌似链接文件是恢复不了的
0

uislouu

赞同来自:

这款文件恢复软件,支持电脑硬盘、U盘、移动硬盘、手机、SD卡、TF卡、MP3/4内存卡、记忆棒、数码相机、SDHC卡、储存卡、miniSD、microSD、手机内存卡、相机内存卡、MMC卡、SDXC卡等存储设备上的数据。电脑硬盘数据恢复软件支持格式化,误删文件恢复,误ghost,误清空回收站的文件,硬盘分区丢失导致的文件丢失,内存卡打不开提示未格式化。 数据恢复软件免费版 http://www.onlinedown.net/soft/1220336.htm 数据恢复软件免费版 http://www.shuju800.com/index.html

 

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: