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

安装 extundelete 工具

1. 安装依赖包

1
yum install e2fsprogs* -y

2. 下载并安装 extundelete

1
2
3
4
5
6
7
8
9
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 查看】,不能写具体路径)。

扫描已删除的文件

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

恢复单个文件

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

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

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

1
ls ./RECOVERED_FILES/

恢复整个分区

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

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

后续工作

1
2
3
4
1. 重新挂载该分区为可写
2. 备份一下重要数据
3. 覆盖我们恢复出来的数据
4. 重启服务器,恢复各种服务