• 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(单独分区),然后删除或脚本定期删除
    ## 第四,做好数据备份。
    ## 最后,敲慢点 !!!

  • 相关阅读:
    20145221 《信息安全系统设计基础》实验四 外设驱动程序设计
    20145221 《信息安全系统设计基础》第11周学习总结
    第09组 Alpha冲刺(4/6)
    第09组 Alpha冲刺(3/6)
    第09组 Alpha冲刺(2/6)
    第09组 Alpha冲刺(1/6)
    第09组 团队Git现场编程实战
    第09组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/5630288.html
Copyright © 2020-2023  润新知