[转]Extundelete--数据恢复软件
前言
作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候该如何快速、有效地恢复数据显得至关重要,extundelete就是其中的一个选择。
如何使用”rm -rf”命令
在Linux系统下,通过命令“rm -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常慎重。在使用rm命令的时候,比较稳妥的方法是把命令参数放到后面,这样有一个提醒的作用。其实还有一个方法。那就是将要删除的东西通过mv命令移动到系统下的/tmp目录下,然后写个脚本定期执行清除操作,这样做就可以在一定程度上降低误删除数据的危险性。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。
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信息,然后才能开始数据恢复,所以在恢复速度上相对较慢,并且在功能上也不支持目录恢复、时间段恢复等。
extundelete的恢复原理
在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块、间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
安装extundelete
下载地址:http://sourceforge.net/projects/extundelete/
安装的先决条件
开发工具
# yum groupinstall "Development Tools" -y
安装依赖包e2fsprogs-devel
# yum install e2fsprogs-devel.x86_64 -y
安装extundelete
# tar jxf extundelete-0.2..tar.bz2
# cd extundelete-0.2.
# ./configure
# make
# make install
默认情况下,如果在./configure
时未指定安装路径,会将extundelete装在/usr/local/文件夹下
extundelete用法详解
extundelete用法如下:
extundelete --help
命令格式:
extundelete [option] [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”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名
- –restore-file ‘path’,恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RESTORED_FILES目录中
- –restore-files ‘path’,恢复命令参数,表示将恢复在路径中已列出的所有文件
- –restore-all,恢复命令参数,表示将尝试恢复所有目录和文件
- -j journal,表示从已经命名的文件中读取扩展日志
- -b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件
- -B blocksize,通过制定数据块大小来打开文件系统,一般用于查看已经知道大小的文件
实战:使用extundelete恢复数据
在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或者磁盘分区,如果是系统根分区的数据遭到误删除,就需要将系统进入单用户,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。
通过extundelete恢复单个文件
模拟数据误删除环境
# mkdir /data
# mkfs.ext4 /dev/sdb1
# mount /dev/sdb1 /data/
# cp /etc/passwd /data/
# cp -r /etc/sysconfig/network-scripts /data/
# mkdir /data/test
# echo "extundelete test" > /data/test/mytest.txt
# ls /data/
lost+found network-scripts passwd test
# md5sum passwd
499b16cbdef03e814f3405fccd188dcc passwd
# md5sum test/mytest.txt
eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt
# rm -rf /data/*
卸载磁盘分区
在将数据误删除后,立即需要做的就是卸载这块磁盘分区:
# umount /data/
注:卸载磁盘分区时必须先退出磁盘分区所挂载的目录,否则将出现类似如下报错
umount: /data: device is busy.
(In some cases useful info about processes that use
the device is found by lsof() or fuser())
查询可恢复的数据信息
通过extundelete命令可以查询/dev/sdb1分区可恢复的数据信息:
# extundelete /dev/sdb1 --inode
...
File name | Inode number | Deleted status
.
..
lost+found Deleted
passwd Deleted
network-scripts Deleted
test Deleted
根据上面的输出,标记为Deleted状态的是已经删除的文件或目录。同时还可以看到每个已删除的文件的inode值,接下来就可以恢复文件了。
恢复单个文件
# extundelete /dev/sdb1 --restore-file passwd
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Successfully restored file passwd
# cd RECOVERED_FILES/
# ls
passwd
# md5sum passwd
499b16cbdef03e814f3405fccd188dcc passwd
注:“–restore-file”后面指定的是恢复文件路径,这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/passwd,那么参数后面直接指定passwd文件即可,如果原来文件的存储路径是/data/test/mytest.txt,那么在参数后面通过“test/mytest.txt”指定即可
在文件恢复成功后,extundelete命令默认会在执行命令的当前目录下创建一个RECOVERED_FILES目录,此目录用于存放恢复的文件,所以执行extundelete命令的当前目录是可写的。
恢复成功后,通过md5sum命令校验,校验码与之前的完全一致,表明文件恢复成功。
通过extundelete恢复单个目录
extundelete除了支持恢复单个文件,也支持恢复单个目录,在需要恢复目录时,通过“–restore-directory”选项即可恢复指定目录的所有数据。
# extundelete /dev/sdb1 --restore-directory network-scripts
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory /network-scripts ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
# cd RECOVERED_FILES/
# ls
network-scripts
可以看到之前删除的目录network-scripts已经成功恢复了,进入这个目录检查发现,所有文件内容和大小都正常。
通过extundelete恢复所有删除数据
当需要恢复的数据较多时,一个个地指定文件或目录将是一项非常繁重和耗时的工作,此时可以通过“restore-all”选项来恢复所有被删除的文件或文件夹。
# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory / ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
# cd RECOVERED_FILES/
# ls
network-scripts passwd test
# md5sum passwd
499b16cbdef03e814f3405fccd188dcc passwd
# md5sum test/mytest.txt
eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt
通过extundelete恢复某个时间段的数据
有时候删除了大量的数据,其中很多数据都是么用的,我们仅需要恢复其中的一部分数据,此时,如果采用恢复全部数据的办法,不但耗时,而且浪费资源,在这种情况下,就需要采用另外一种恢复机制有选择地恢复,extundelete提供了“–after”和“–before”参数,可以通过指定某个时间段,进而只恢复这个时间段内的数据。
# date +%s # extundelete --after --restore-all /dev/sdb1
Only show and process deleted entries if they are deleted on or after and before .
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory / ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
# cd RECOVERED_FILES/
# ls
network-scripts passwd test
# md5sum passwd
499b16cbdef03e814f3405fccd188dcc passwd
# md5sum test/mytest.txt
eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt
在上面的例子中恢复的是两个小时之内被删除的文件。在这个操作过程中,需要注意的是“–after”参数后面跟的时间是个总秒数。起算时间是“1970-01-01 00:00:00 UTC”,通过”date +%s”命令即可将当前时间转换为总秒数,因为恢复的是两个小时之内的数据,所以“1449020452”这个值就是通过“1449027652”减去“60602=7200”获得的。
- EOF
本文作者:Koen
参考书籍:《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》
[转]Extundelete--数据恢复软件的更多相关文章
- 数据恢复软件Extundelete
数据恢复软件Extundelete介绍 一.概述 作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎重和细心,但是有时也难免发生出现数据被误删除的情况,这个时候该如何快速.有效地恢 ...
- 转:主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Undelete 360
转自:Baidu 空间 2012-10-05 13:57 主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Und ...
- 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...
- Extundelete 数据恢复
Extundelete 数据恢复 “rm -rf /*” 是我们经常使用的命令,操作不慎全盘接蹦,从删库到跑路,身为过来人的我们都经历过rm带来的痛苦. 不要慌,当我们有了Extundelete就可以 ...
- Android Data Recovery for Mac(安卓数据恢复软件)破解版安装
1.软件简介 Android Data Recovery 是 macOS 系统上一款 Android 设备数据恢复软件,能够帮助我们在 mac 电脑上对 Android 设备进行数据恢复,文档. ...
- [原创汉化] 价值990美元的顶级专业数据恢复软件O&O DiskRecovery 11(技术员版)汉化绿色版
百度没搜索到11有汉化版的,有空就把它汉化了,大部分借鉴的是以前汉化版的词条.另外,顺便做了个二合一的单文件版给有需要的朋友. 运行环境: 可用于 Windows 2000/XP/2003/Vista ...
- Aiseesoft Data Recovery 1.1.6 专业数据恢复软件破解版
Aiseesoft Data Recovery是专业的数据恢复软件,它可以帮助你恢复几乎所有删除/丢失的文件,如照片,文件,电子邮件,音频,视频且支持从计算机,硬盘驱动器,闪存驱动器,存储卡,数码相机 ...
- 黄聪:WIN7下回收站不小心删除的文件怎么恢复,免费数据恢复软件下载
上网找了半天,大多数是收费的,总算找到一款免费的,已经帮我恢复了数据了,在此分享给大家. 注意:只能恢复7天内的,而且数据误删了,就尽量不要再修改你那个盘符的数据了,免得覆盖了! 我用的数据恢复软件R ...
- 【优惠&正版】超级硬盘数据恢复软件(SuperRecovery)7.0正版注册码(39元一机终身授权,支持最新版)
[优惠&正版]超级硬盘数据恢复软件(SuperRecovery)7.0正版注册码(39元一机终身授权,支持最新版) 这个软件的数据恢复效果非常好,在全世界数据恢复软件内是数一数二的. 下载地址 ...
- 有什么好用的Mac数据恢复软件
对于第一次上手苹果电脑的人来说,使用起来难免有点小难受,因为对苹果电脑操作系统不熟练,发生误删数据的事情也是屡见不鲜. 那么对于这种情况我们该怎么办呢?不用担心,今天小编就为大家推荐一款好用的苹果数据 ...
随机推荐
- nginx设置反向代理后,页面上的js css文件无法加载
问题现象: nginx配置反向代理后,网页可以正常访问,但是页面上的js css文件无法加载,页面样式乱了. (1)nginx配置如下: (2)域名访问:js css文件无法加载: (3)IP访问:j ...
- 问题解决——SolidWorks 已停止工作 (Windows7 + SolidWorks 2010 SP0.0)
给同事的SolidWorks解决问题时偶然间发现的. -------------------------------------------------------------- 本文原创,转载请注明 ...
- 读书笔记——Windows环境下32位汇编语言程序设计(5)模态对话框
资源可以用VC之类的生成,然后拷贝出来. 例如:每一个MFC工程都有一个resource.h,没有做任何修改时,这个resource.h文件是原来自带的.当对资源进行过修改添加之类的时,新添加的资源的 ...
- 关于CPU Cache:程序猿需要知道的那些
天下没有免费的午餐,本文转载于:http://cenalulu.github.io/linux/all-about-cpu-cache/ 先来看一张本文所有概念的一个思维导图: 为什么要有CPU Ca ...
- SQL将用户表中已存在的数据所有姓名(汉字)转换为拼音首字母
实现方法: --函数 Create function [dbo].[fn_GetPy](@str nvarchar(4000)) returns nvarchar(4000) --用于加密 --WIT ...
- SQL Server服务器名称与默认实例名不一致的修复方法
SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql ser ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...
- 04_最长上升子序列问题(LIS)
来源:刘汝佳<算法竞赛入门经典--训练指南> P60 问题6: 问题描述:给定n个整数a1,a2,...,an,按从左到右的顺序选出尽量多的整数,组成一个上升子序列(子序列可以理解为:删除 ...
- js 操作select和option
js 操作select和option 1.动态创建select function createSelect(){ var mySelect = document.createElement_x(&qu ...
- 设置html的div中背景图片长宽
使用以下可行 background-size:1040px 482px;