CentOS 误删文件的恢复步骤
一、紧急处置与准备
umount /dev/sdX;若提示 device is busy,用 fuser -v -m /mountpoint 查找占用进程并处理后再卸载;无法卸载时,尝试只读重挂载:mount -o ro,remount /mountpoint。二、按文件系统和场景恢复
yum install -y e2fsprogs-devel gcc gcc-c++wget https://github.com/curu/extundelete/archive/refs/tags/v1.0.tar.gztar xf v1.0.tar.gz && cd extundelete-1.0 && ./configure && makeextundelete /dev/sdX --inode 2extundelete /dev/sdX --restore-file /path/to/fileextundelete /dev/sdX --restore-directory /path/to/dirextundelete /dev/sdX --restore-alllsof | grep deleted 找到仍打开已删文件的进程,记录其 PID 与文件路径;/proc/<PID>/fd/<FD> 将内容复制出来(例如 cp /proc/<PID>/fd/3 /restore/file),或从该进程导出所需数据后再终止进程。photorec → 选择磁盘/分区 → 选择文件系统类型 → 指定保存路径(务必选其他磁盘)→ 开始扫描;debugfs 的 lsdel、dump 等命令按 inode 恢复,但 ext3/ext4 的日志机制与此不同,优先使用 extundelete。三、常用命令速查表
| 场景 | 命令示例 | 关键点 |
|---|---|---|
| 只读重挂载 | mount -o ro,remount /data |
无法卸载时先只读,减少写入 |
| 卸载分区 | umount /dev/sdb1 |
恢复前确保分区不被占用 |
| 查找占用进程 | fuser -v -m /data |
处理后再卸载或只读 |
| 安装 extundelete | yum install -y e2fsprogs-devel gcc gcc-c++ && ./configure && make |
需 e2fsprogs 开发库 |
| 扫描删除项 | extundelete /dev/sdb1 --inode 2 |
从根目录 inode 开始 |
| 恢复单文件 | extundelete /dev/sdb1 --restore-file home/user/file.txt |
路径为原文件绝对路径 |
| 恢复目录 | extundelete /dev/sdb1 --restore-directory home/user/docs |
递归恢复 |
| 恢复全部 | extundelete /dev/sdb1 --restore-all |
结果在 RECOVERED_FILES/ |
| 句柄未释放 | `lsof | grep deleted` |
| PhotoRec | photorec |
文件名丢失、按类型恢复 |
四、成功率与注意事项
五、预防建议
rm 加安全别名:alias rm='rm -i',或使用 safe-rm 拦截危险路径;日常删除建议用 trash-cli(回收站机制)。