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.bz2 shell > 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/src 130619 /usr/local/src
## 首先查看被删除的上层目录 inode
shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 130619 ... File name | Inode number | Deleted status . 130619 .. 130587 package 137256 Deleted apr-1.5.1 140038 apr-util-1.5.4 535002 httpd-2.4.10 535320 pcre-8.30 656184 siege-3.0.8 656483 libmcrypt-2.5.8 144383 package.xml 146709 mysql-5.6.4-m7 140588 memcache-2.2.7 146712 php-5.4.13 667097 redis-2.2.5 269016 memcached-1.4.15 146806 libevent-master 539531 Deleted
## 可以看到被删除的目录 package 状态为 Deleted ,inode 为 137256
shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 137256 ... File name | Inode number | Deleted status . 137256 .. 130573 e2p.h;54b8ac2f 137260 Deleted e2p.h 137260 mysql-5.6.4-m7.tar.gz 140630 Deleted httpd-2.4.10.tar.gz 140035 Deleted pcre-8.30.tar.gz 140036 Deleted siege-3.0.8.tar.gz 140037 Deleted libmcrypt-2.5.8.tar.bz2 144382 Deleted php-5.4.13.tar.bz2 144439 Deleted memcache-2.2.7.tgz 144381 Deleted redis-2.2.5.tgz 146713 Deleted libevent-master 539531 Deleted memcached-1.4.15.tar.gz 144377 Deleted libevent-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 indicates it was improperly unmounted, and you should run fsck before continuing. If you decide to continue, extundelete may overwrite some of the deleted files and make recovering those files impossible. You should unmount the file system and check it with fsck before using extundelete. Would you like to continue? (y/n) y Loading 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 > ls e2p.h;54b8ac2f libmcrypt-2.5.8.tar.bz2 memcached-1.4.15.tar.gz php-5.4.13.tar.bz2 libevent-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.so shell > find / -inum 140036 /usr/lib64/libext2fs.a shell > find / -inum 140037 /usr/lib64/libext2fs.so
## 发现 httpd 、pcre 、siege 的都被分配出去了...,现在恢复不出来的就永远没有了..
## 所以,千万记住:万一误删除数据了,一定要第一时间将数据所在磁盘卸载或挂载为只读分区,防止写入文件 inode 被重新分配。
## 如果误删的是根分区的数据,那么立即进去单用户模式,将根分区只读挂载。
## 又引申出一个问题,做系统分区的时候,最好不要只分一个根分区,像这样的情况很难办...
## 第二,数据恢复软件事先装好吧..
## 第三,删除数据时,先将要删除的数据移动到 /tmp(单独分区),然后删除或脚本定期删除
## 第四,做好数据备份。
## 最后,敲慢点 !!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用