CentOS 误删文件后的数据恢复实操指南
一、先判断你的场景与前提
- 你很可能是把 extundelete 误写成了 extract。extundelete 适用于 ext3/ext4 文件系统,利用文件系统日志尝试找回被删除文件;若数据已被新写入覆盖或日志已被循环覆盖,成功率会显著下降。对 XFS/Btrfs 等文件系统,extundelete 不适用。若删除的是仍在被进程占用的文件,可先尝试通过 lsof | grep deleted 定位并拷贝恢复。为降低风险,操作前建议先对原盘或分区做只读镜像备份(如 dd),恢复结果务必写入到另一块磁盘/分区。
二、最快路径 extundelete 恢复 ext3/ext4(推荐)
- 准备环境(CentOS 7/8 示例)
- 停止写入:对数据盘执行 umount /dev/sdXN;若是系统盘或无法卸载,先以只读方式重挂载:mount -o remount,ro /path。
- 安装依赖与编译:
- yum install -y libcom_err e2fsprogs-devel gcc gcc-c++
- 下载并编译(可用新版本 v1.0):
- wget https://github.com/curu/extundelete/archive/refs/tags/v1.0.tar.gz
- tar xf v1.0.tar.gz && cd extundelete-1.0
- ./configure && make
- 恢复操作(在 extundelete 源码目录的 src 下执行)
- 查看可恢复文件与目录(以根目录 inode=2 为起点):
- ./extundelete /dev/sdXN --inode 2
- 按需要恢复:
- 恢复单个文件:./extundelete /dev/sdXN --restore-file 路径/到/文件
- 恢复目录:./extundelete /dev/sdXN --restore-directory 路径/到/目录
- 恢复全部可恢复项:./extundelete /dev/sdXN --restore-all
- 结果默认生成在同级目录的 RECOVERED_FILES/ 中,确保目标磁盘有足够空间。
三、其他常见场景与工具
- 文件被进程占用(句柄未释放)
- 查找被删除但仍被占用的文件:lsof | grep deleted
- 若能看到文件描述符,可尝试从 /proc//fd/ 中拷贝恢复(例如 cp /proc//fd/ /recover/file)。
- 非 ext3/ext4 或 extundelete 无效(如 XFS/Btrfs、分区被重写、inode 信息缺失)
- 使用 PhotoRec(随 TestDisk 套件提供)按文件特征“雕刻”恢复:
- yum install -y testdisk
- photorec
- 选择磁盘 → 分区 → 文件系统类型 → 指定保存路径(务必选其他磁盘!)
- 注意:文件名与目录结构可能无法完整保留,恢复后需按扩展名/内容甄别。
- 分区/引导损坏或系统无法启动,仅需“把数据拷出来”
- 使用 LiveCD/LiveDVD 或救援模式启动,识别磁盘/卷组后挂载并拷贝:
- LVM 场景:vgchange -ay 激活卷组,再挂载逻辑卷进行拷贝
- 普通分区:直接只读挂载后 rsync/scp 到安全位置。
四、关键注意事项与成功率提升
- 立刻停止对目标分区写入:卸载或只读挂载;删除后写入越少,成功率越高。
- 优先把恢复结果写到另一块磁盘,避免“原地写回”造成覆盖。
- 先做只读镜像再恢复:dd if=/dev/sdX of=/backup/img bs=4M,后续在镜像上演练与恢复。
- 系统盘持续有业务写入时,extundelete 往往难以成功;必要时从 Live 环境只读挂载操作。
- 预防胜于抢救:为 rm 设置安全别名(如 alias rm=‘rm -i’)、使用 trash-cli、对关键数据做快照/定时备份。