官网:(源码软件需要编译安装)

编译环境:yum install e2fs*

1 如果是在磁盘分区里面新建文件再删除,则extundelete /dev/sdb1  --restore-all(或--restore-file +j绝对路径的文件名)恢复

2 如果 cp /etc/passwd  文件系统目录   在删除进行恢复时,则需要sync将数据写入硬盘再进行恢复(应为复制过来的文件在内存的缓冲区里)

注意:在安装extundelete之前,要确定已经安装了e2fsprogse2fslibs(确定e2fsprogs的版本在1.41或者更高版本,可通过运行命令dumpe2fs来查看版本).下面是简单安装测试实验下载:  http://extundelete.sourceforge.net/bunzip2 extundelete-0.2.0.tar.bz2tar  -xf  extundelete-0.2.0.tar./configuremake  && make installextundelete  --help  查看有哪些选项  --restore-file 指定恢复文件, --restore-all 恢复全部等等,恢复完成后,恢复的文件就在当前目录下生成的RECOVERED_FILES的目录里.如下图所示:

extundelete是基于Linux的一个数据恢复工具,它通过分析文件系统的日志,解析出所有文件的inode信息,从而可以恢复Linux下主流的ext3,ext4文件系统下被误删除的文件。

工具/原料

  • Linux

  • extundelete

方法/步骤

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

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

  2. 编译安装extundelete:

    tar xjf extundelete-0.2.4.tar.bz2 

    cd extundelete-0.2.4

    ./configure 

    make && make install 

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

  4. extundelete恢复数据的过程:

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

  5. 模拟数据误删环境:

    创建一个新的分区后,挂载到一个目录下,往该目录下cp一些文件或者目录,校验个问句的md5值,然后删除该目录下的文件,用来模拟实验环境。

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

    # extundelete  /dev/sdb1 --inode 2

    根据输出信息,标记为Deleted状态的是已经删除的文件或目录。同时还可以看到已删除文件的inode值,接下来就可以恢复文件了。

  7. 恢复单个文件:

    extundelete  /dev/sdb1 --restore-file passwd

    会在当前目录下生成一个RECOVERED_FILES目录,里面保存已经恢复的文件。

  8. 恢复单个目录:

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

    恢复所有误删文件:

    extundelete  /dev/sdb1 --restore-all

    extundelete还可以实现恢复某个时间段的数据。可以通过“--after”和“--before”参数实现!

    END

注意事项

  • 恢复文件的时候一定要卸载磁盘分区,不要在进入刚才挂载分区的那个目录内进行任何操作