作为程序员一定要保持良好的睡眠,才能好编程

linux恢复意外删除的文件 extundelete

发布时间:2017-05-26


http://jingyan.baidu.com/article/3c48dd3493221de10be35889.html


http://www.111cn.net/sys/linux/47629.htm


http://jingyan.baidu.com/article/2f9b480d6c2bcd41cb6cc223.html


extundelete 这是一个开源的恢复删除软件


  1. 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel。

    这里用:yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel 来完成安装。

        

        然后下载这个安装包文件:

        

      extundelete-0.2.4.zip

  

      直接下载上面的zip压缩包


  1. 编译安装extundelete:


    unzip extundelete-0.2.4.zip

  2.  

  3. cd extundelete-0.2.4

    ./configure 

    make && make install 

        

      然后进入 /usr/local/bin/ 这个目录

      1.jpg

  


    extundelete的用法,可以通过help查看详细!

    extundelete --help 

    2.jpg

     

extundelete恢复数据的过程:

在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还储存在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以!以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。






卸载硬盘:

df   查看硬盘


umount -f /dev/xvdb1

如果


卸载磁盘分区,并通过执行extundelete命令查询/dev/sdb1分区可恢复的数据信息:


通过这个信息查看删除的文件

# extundelete  /dev/xvdb1 --inode 2


File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
www                                               1597441
www                                               1613825        Deleted
mysql                                             2203649        Deleted
mysqlbak161104                                    2326529        Deleted
zibmaoOW                                          12             Deleted
web.zip                                           12             Deleted
mysqldata.zip                                     13             Deleted


extundelete /dev/xvdb1 --restore-file web.zip   恢复一个文件


[root@iZ28t1z0sm5Z bin]# extundelete /dev/xvdb1 --restore-file web.zip

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 400 groups loaded.

Loading journal descriptors ... 25454 descriptors loaded.

Successfully restored file web.zip

恢复成功,但必须还要执行一句代码:  md5sum RECOVERED_FILES/web.zip


[root@iZ28t1z0sm5Z data]# ls RECOVERED_FILES/

web.zip


[root@iZ28t1z0sm5Z data]# md5sum RECOVERED_FILES/web.zip

9065b2eff2fce8aebb44a1c2a8f83b19  RECOVERED_FILES/web.zip


[root@iZ28t1z0sm5Z data]extundelete /dev/xvdb1 --restore-file mysqldata.zip

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 400 groups loaded.

Loading journal descriptors ... 25454 descriptors loaded.

Successfully restored file mysqldata.zip

[root@iZ28t1z0sm5Z data]# md5sum RECOVERED_FILES/mysqldata.zip 


以上恢复成功两个文件

3.jpg


恢复单个文件:

extundelete /dev/xvdb1 --restore-file mysqldata.zip


恢复单个目录:

extundelete  /dev/sdb1 --restore-directory  /mongodb


恢复所有误删文件:

extundelete  /dev/sdb1 --restore-all



二.extundelete安装

1.安装依赖包

# yum install e2fsprogs* -y


2.下载并安装extundelete

# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

# tar -jxvf extundelete-0.2.4.tar.bz2

# cd extundelete-0.2.4

# ./configure --prefix=/usr/local/extundelete

# make && make install


3.验证是否安装成功

# cd /usr/local/extundelete/bin

# ./extundelete -v

---------------------

extundelete version 0.2.4

libext2fs version 1.41.12

Processor is little endian.

---------------------


4.设置环境变量

# echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile

# echo "export PATH" >> /etc/profile

# source /etc/profile


5.上传一些图片,安装包等文件到/data目录

# cd /data

# yum install lrzsz -y

# rz

-------------

本地文件.....

-------------

# ls

------------------

lost+found  mysql-5.6.10.tar.gz  nginx.conf  pic.jpg

------------------


6.全部删除

# rm -rf *


7.查看被删除文件

1).查看前需卸载该磁盘分区

# cd ~

# umount /dev/sdb1


2).查看文件

注:一般一个分区挂载到一个目录下时,这个”根”目录的inode值为2

我们为了查看根目录所有文件,所以查看分区inode为2的这个部分

# extundelete /dev/sdb1 --inode 2

--------------------------------

.....


File name                                       | Inode number | Deleted status

.                                                 2

..                                                2

lost+found                                        11             Deleted

mysql-5.6.10.tar.gz                               12             Deleted

nginx.conf                                        13             Deleted

pic.jpg                                           14             Deleted

--------------------------------

注:标记为”Deleted”的文件则是被删除的文件


8.恢复指定的文件

注: 默认被删文件会恢复到当前目录下的RECOVERED_FILES目录中去

# extundelete --restore-file pic.jpg /dev/sdb1  

# cd RECOVERED_FILES/

# ll

----------------

-rw-r--r-- 1 root root 52592 8月  13 07:18 pic.jpg

----------------


9.完全恢复设备上文件

# extundelete --restore-all /dev/sdb1

# ll

-----------------------------------

总用量 34464

-rw-r--r-- 1 root root 35174149 8月  13 07:24 mysql-5.6.10.tar.gz

-rw-r--r-- 1 root root     4551 8月  13 07:24 nginx.conf

-rw-r--r-- 1 root root    52592 8月  13 07:18 pic.jpg

-rw-r--r-- 1 root root    52592 8月  13 07:24 pic.jpg.v1

-----------------------------------

注:这里完全恢复并不会把之前恢复的pic.jpg文件覆盖掉,而是重命名为pic.jpg.v1


10.恢复指定的时间点后被删文件

1).指定一个时间点

# date -d "Sep 4 03:09:13 2013" +%s

------------------

1378235353

------------------

2).恢复这个时间点后的文件

# extundelete --restore-all --after “1378235353” /dev/sdb1

--------------------

..........

--------------------

注:如果要恢之前的就用before参数。extundelete命令与after结合使用,在进行恢复时非常有用,可以过滤掉那太旧的文件,减小恢复压力。


11.检验是否恢复成功

# md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz

------------------------------------

9dcee911fb4bc7e977a6b63f4d3ffa63  RECOVERED_FILES/mysql-5.6.10.tar.gz

------------------------------------

上传刚才误删的mysql安装包

# rz

...

# md5sum mysql-5.6.10.tar.gz

---------------------------------

9dcee911fb4bc7e977a6b63f4d3ffa63  mysql-5.6.10.tar.gz

---------------------------------

MD5值相同,恢复成功。。。


-----------大功告成-------------



如果没有看明白:

安装软件 extundelete

[root@xuegod63 ~]# tar jxvf extundelete-0.2.4.tar.bz2

[root@xuegod63 ~]# cd extundelete-0.2.4

[root@xuegod63 extundelete-0.2.4]# ./configure

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library   #报错

[root@xuegod63 ~]# mount /dev/cdrom  /mnt/

[root@xuegod63 extundelete-0.2.4]# rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm

[root@xuegod63 extundelete-0.2.4]#

[root@xuegod63 extundelete-0.2.4]# ./configure  #检查安装环境并生成Makefile

[root@xuegod63 extundelete-0.2.4]# make  #编译

[root@xuegod63 extundelete-0.2.4]# make install  #安装

 查找博客:http://www.cnblogs.com/jjzd/p/5785851.html

安装e2fsprogs-devel-1.41.12-14.el6.x86_64.rpm




 

开始恢复:

方法1:

通过inode结点查看被删除的文件名字:

[root@xuegod63 ~]# mkdir test

[root@xuegod63 ~]# cd test/

[root@localhost ~]# extundelete /dev/sda4 --inode 2

。。。

lost+found                                        11

passwd                                            12             Deleted

hosts                                             13             Deleted

a                                                 8193           Deleted

a.txt                                             15             Deleted

 

通过inode节点来恢复:

[root@localhost ~]# extundelete  /dev/sda4 --restore-inode  12

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 16 groups loaded.

Loading journal descriptors ... 32 descriptors loaded.

 [root@localhost ~]# ls RECOVERED_FILES/       #恢复成功

file.12

[root@xuegod63 test]# diff /etc/passwd /root/test/RECOVERED_FILES/file.12

 

方法二,通过文件名恢复

 

方法二,通过文件名恢复

恢复某个文件:

[root@xuegod63 test]# rm -rf RECOVERED_FILES/

[root@localhost ~]# extundelete /dev/sda4 --restore-file  passwd

 

恢复某个目录,如目录a下的所有文件:

[root@localhost ~]# extundelete /dev/sda4 --restore-directory   a   #恢复目录a ,不用

 

恢复所有的文件

[root@localhost ~]# extundelete  /dev/sda4 --restore-all     

 

使用心得:

空目录或空文件恢复不成功。