当意识到误删除文件后,切忌千万不要再频繁写入了,否则你的数据恢复的数量将会很少。 而我们要做的是,第一时间把服务器上的服务全部停掉,直接killall 进程名 或者 kill -9 pid 。 然后把误删除文件所在分区,重新挂载成ro,只读的 (mount -o ro /dev/sdb2 /data/)。

然后我们需要去下载和安装一个工具叫做 extundelete
  • 1.安装依赖包
    # yum install e2fsprogs* -y

  • 2.下载并安装extundelete

    1
    2
    3
    4
    5
    6
    7
    wget https://sourceforge.net/projects/extundelete/files/extundelete/0.2.4/extundelete-0.2.4.tar.bz2/download?use_mirror=jaist
    tar -jxvf extundelete-0.2.4.tar.bz2
    cd extundelete-0.2.4
    ./configure --prefix=/usr/local/extundelete
    # 如果出现configure: error: C++ compiler cannot create executables,执行下面步骤
    # yum install gcc gcc-c++ gcc-g77
    make && make install
  • 3.验证是否安装成功

    1
    2
    3
    4
    5
    6
    7
    cd /usr/local/extundelete/bin
    ./extundelete -v
    ---------------------
    extundelete version 0.2.4
    libext2fs version 1.41.12
    Processor is little endian.
    ---------------------

假如我们误删除文件所在分区为/dev/sdb2 (必须写分区[df查看],不能写具体路径)
恢复步骤如下:

  • 可以扫描哪些文件被删除了

/usr/local/extundelete/bin/extundelete /dev/sdb2 --inode 2

  • 假如我们有一个文件叫做1.txt被删除了。 那么恢复它的命令为:

/usr/local/extundelete/bin/extundelete --restore-file 1.txt /dev/sdb2

被恢复的文件在 当前目录下的 RECOVERED_FILES/ 目录 ,可以看到有1.txt
ls ./RECOVERED_FILES/

  • 而想恢复整个分区上的文件可以这样:

    /usr/local/extundelete/bin/extundelete --restore-all /dev/sdb2

恢复后的文件也是在 ./RECOVERED_FILES/ 下,能否恢复就看你的运气好不好了。

1
2
3
4
5
当然后续工作还有:
\1. 重新挂载该分区为可写
\2. 备份一下重要数据
\3. 覆盖我们恢复出来的数据
\4. 重启服务器,恢复各种服务