你的位置:首页 > 操作系统

[操作系统]Extundelete 数据恢复


简介:

Extundelete 数据恢复

救命的稻草!当你在运维过程中不小心误删除数据时,就会用到数据恢复工具,( 都是泪,不多说了 )。

常见的开源数据恢复工具有,debugfs、R-Linux、ext3grep、extundelete 等。

ext3grep 跟 extundelete 比较常用,其中 ext3grep 只支持 ext3 文件系统,extundelete 支持 ext3/ext4。

都是通过分析文件系统日志,解析出所有文件的 inode 信息,利用 inode 去查找所在 block ,利用 dd 备份出以删除的数据。

当数据被删除后,立即以只读的方式重新挂载分区... 记住是立即 !!!

下载地址:

http://jaist.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

今天一不小心,删除了一个放源码包的目录...

1、安装 Extundelete

shell > yum -y install e2fsprogs-devel

## 先安装这两依赖包,不然会报错:configure: error: Can't find ext2fs library

shell > tar jxf extundelete-0.2.4.tar.bz2shell > cd extundelete-0.2.4[root@study extundelete-0.2.4]# ./configure ; make ; make install

## 简单介绍一下常用参数

--after dtime  时间参数,表示在某段时间之后被删除的文件或目录
--before dtime  时间参数,表示在某段时间之前被删除的文件或目录

## 简单介绍一下常用动作

--inode ino  显示节点 ino 的信息
--block blk  显示数据块 blk 的信息

--restore-inode ino  表示恢复节点 ino 的文件,用来恢复单个文件
--restore-file path  表示恢复指定路径下的文件,用来恢复目录下所有文件
--restore-all  表示恢复所有被删除的目录跟文件

2、查找被删除的文件

shell > ls -id /usr/local/src130619 /usr/local/src

## 首先查看被删除的上层目录 inode

shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 130619...File name | Inode number | Deleted status.         130619..        130587package      137256  Deletedapr-1.5.1     140038apr-util-1.5.4   535002httpd-2.4.10   535320pcre-8.30     656184siege-3.0.8    656483libmcrypt-2.5.8  144383package.146709mysql-5.6.4-m7  140588memcache-2.2.7  146712php-5.4.13    667097redis-2.2.5    269016memcached-1.4.15 146806libevent-master  539531  Deleted

## 可以看到被删除的目录 package 状态为 Deleted ,inode 为 137256

shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 137256...File name | Inode number | Deleted status.         137256..        130573e2p.h;54b8ac2f  137260    Deletede2p.h       137260mysql-5.6.4-m7.tar.gz  140630 Deletedhttpd-2.4.10.tar.gz   140035 Deletedpcre-8.30.tar.gz    140036 Deletedsiege-3.0.8.tar.gz   140037 Deletedlibmcrypt-2.5.8.tar.bz2 144382 Deletedphp-5.4.13.tar.bz2   144439 Deletedmemcache-2.2.7.tgz   144381 Deletedredis-2.2.5.tgz     146713 Deletedlibevent-master     539531 Deletedmemcached-1.4.15.tar.gz 144377 Deletedlibevent-master.zip   146863 Deleted

## 可以看到被删除的目录底下有哪些被删除的文件及 inode 号

3、恢复数据

shell > extundelete /dev/mapper/vg_study-LogVol00 --restore-directory /usr/local/src/package

## 指定删除目录所在分区,--restore-directory 为恢复整个目录,后面是要恢复的目录

NOTICE: Extended attributes are not restored.WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.The partition should be unmounted to undelete any files without further data loss.If the partition is not currently mounted, this message indicatesit was improperly unmounted, and you should run fsck before continuing.If you decide to continue, extundelete may overwrite some of the deletedfiles and make recovering those files impossible. You should unmount thefile system and check it with fsck before using extundelete.Would you like to continue? (y/n)yLoading filesystem metadata ... 151 groups loaded.Loading journal descriptors ... 22517 descriptors loaded.Searching for recoverable inodes in directory /usr/local/src/package ...1679 recoverable inodes found.Looking through the directory structure for deleted files ...Block 578312 is allocated.Unable to restore inode 146713 (usr/local/src/package/redis-2.2.5.tgz): Space has been reallocated.Unable to restore inode 539531 (usr/local/src/package/libevent-master): Space has been reallocated.1670 recoverable inodes still lost.

## 其中,redis-2.2.4.tgz 和 libevent-master 没有被恢复,因为 inode 被重新分配出去了...

shell > cd RECOVERED_FILES/usr/local/src/package

## 恢复完成后会在当前目录下生成一个 RECOVERED_FILES 目录

shell > lse2p.h;54b8ac2f libmcrypt-2.5.8.tar.bz2 memcached-1.4.15.tar.gz php-5.4.13.tar.bz2libevent-master.zip memcache-2.2.7.tgz mysql-5.6.4-m7.tar.gz

## 只恢复了 7 个文件,删除的有 12 个... 使用 find 查一下没有恢复的文件的 inode 号

shell > find / -inum 140035/usr/lib64/libe2p.soshell > find / -inum 140036/usr/lib64/libext2fs.ashell > find / -inum 140037/usr/lib64/libext2fs.so

## 发现 httpd 、pcre 、siege 的都被分配出去了...,现在恢复不出来的就永远没有了..

## 所以,千万记住:万一误删除数据了,一定要第一时间将数据所在磁盘卸载或挂载为只读分区,防止写入文件 inode 被重新分配。
## 如果误删的是根分区的数据,那么立即进去单用户模式,将根分区只读挂载。
## 又引申出一个问题,做系统分区的时候,最好不要只分一个根分区,像这样的情况很难办...
## 第二,数据恢复软件事先装好吧..
## 第三,删除数据时,先将要删除的数据移动到 /tmp(单独分区),然后删除或脚本定期删除
## 第四,做好数据备份。
## 最后,敲慢点 !!!