概述

在Linux系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站”找回的情况,比如使用"rm-rf来删除数据针对Linux下的EXT文件系统,可用的恢复工具有debugfs、ext3grep、extundelete等。本贴中仅以extundelete为例,这是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统

删除的数据为什么能恢复?

1.png

如果查找文件,先是从元信息中查找i节点,再通过i节点找到块中的数据。

如果删除文件,仅仅删除文件名,但是源文件是不会删除,因为源数据块中的数据依然存在,如果再写入数据,有可能覆盖源数据块,造成无法恢复数据,所以此时应当停止一切操作,卸载挂载目录,着手准备恢复工作。


系统环境

  • Centos6.5操作系统

  • 自建local.repo本地yum源,挂载在/mnt/sr0下

  • 依赖包:rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm 

       rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm


搭建步骤

⑴安装依赖包

[root@raid Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
[root@raid Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm
[root@raid Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm


⑵安装编译器

[root@raid ~]# yum -y install gcc gcc-c++


⑶解压源码包并编译安装

[root@raid ~]# tar -xvf extundelete-0.2.4.tar.gz -C /usr/src/#解压
[root@raid extundelete-0.2.4]# ./configure
[root@raid extundelete-0.2.4]# make #配置文件转换成二进制执行文件
[root@raid extundelete-0.2.4]# make install #安装


⑷挂载、写入测试文件

[root@raid ~]# mount /dev/sdb1 /mnt/sdb1/
[root@raid ~]# cd /mnt/sdb1/
[root@raid sdb1]# echo "this is a" > a.txt
[root@raid sdb1]# echo "this is b" > b.txt
[root@raid sdb1]# echo "this is c" > c.txt
[root@raid sdb1]# echo "this is d" > d.txt
[root@raid sdb1]# extundelete /dev/sdb1 --inode 2#以i节点为2的目录开始查看,最开始的顶层目录,根

2.png


⑸删除文件,模拟测试

[root@raid sdb1]# rm -rf a b #模拟误删除
[root@raid sdb1]# cd
[root@raid ~]# umount /dev/sdb1 #误删除之后立即卸载,此刻不能再对分区操作,非常重要!!!!!
[root@raid ~]# extundelete /dev/sdb1 --restore-all #针对/sdb1分区,恢复所有被删掉的数据
[root@raid ~]# cd RECOVERED_FILES/此时当前目录下有一个RECOVERED_FILES是恢复数据存放的目录

3.png


⑹将数据剪切到源目录中

[root@raid RECOVERED_FILES]# mount /dev/sdb1 /mnt/sdb1/ #重新挂载

[root@raid RECOVERED_FILES]# mv a b /mnt/sdb1