首页/数据/备份与容灾速查/rm 误删文件恢复

rm 误删文件恢复

文件被 rm 删除后:立即停止对该分区的写入,优先从备份或快照恢复;无备份时再用扫描工具尝试,成功率与写入量负相关。

备份与容灾速查数据更新于 2026-10-13

rm 误删后怎么救

Linux 下 rm 只解除目录项对数据块的引用,数据块在被新写入覆盖前仍留在盘上,这就是文件恢复能成立的原理,也决定了抢救铁律:先停止对该分区的写入。恢复优先级是备份或快照优先,其次是进程仍持有文件句柄,最后才用扫描工具从裸设备里找。

基本信息

适用平台Linux 各发行版;ext4 恢复工具较成熟,XFS 与 Btrfs 的删除恢复手段有限
关键前提恢复动作前该分区不得再有任何写入,输出必须落到另一块盘
优先级备份/快照 > 进程句柄(/proc/<pid>/fd)> 扫描工具
权限要求直接读块设备与 mount 操作需要 root

典型使用场景

  • 误删业务数据目录:立刻只读挂载或卸载分区,再从备份还原
  • 进程仍在写日志文件时被删:文件句柄未释放,可从 /proc 下拷回内容
  • 数据库文件被误删:先停库避免继续写入,再从物理备份与日志恢复到时间点
  • 误删发生在容器内:优先查宿主机挂载点与卷快照,而不是在容器里做扫描
  • 无备份的极端场景:只能用 ext 系文件系统扫描工具碰运气

应急处理步骤

应急处理步骤
# 1) 立即停止写入:能只读就只读,能卸载就卸载
mount -o remount,ro /data
umount /data
# 2) 首选:从备份或快照恢复
rsync -a /backup/data/ /data/
# 3) 进程仍持有句柄时可直接拷回(数字为进程号)
cp /proc/1234/fd/7 /recovery/app.log
# 4) 无备份时扫描(ext 系,输出务必写到另一块盘)
extundelete /dev/sdb1 --restore-all --output-dir /recovery
photorec /dev/sdb1          # 按文件签名恢复,适合已知文件类型的镜像与文档

四种手段对比

手段适用条件成功率
备份或快照还原有可用副本最高,且是唯一能保完整目录结构的方式
进程句柄拷贝删除时仍有进程打开该文件高,但只能救下当前打开的那些文件
extundeleteext3/ext4 且删除后写入很少中,依赖 inode 未被复用
photorec 等签名扫描任意文件系统,只要块未被覆盖低,文件名与目录结构基本丢失
XFS 与 Btrfs 缺少成熟的开源删除恢复工具,这类环境误删基本只能依赖备份;把『有备份且验证过』作为唯一可依赖的底线。
防止手滑比事后抢救划算:给 rm 加别名确认、对关键目录改用带软删除的存储或版本化对象存储,并让高危删除操作走双人复核。

易错点

  • 删除后继续往同一分区写数据:目标块被覆盖后,任何工具都救不回来
  • 把扫描结果输出到被删分区:恢复动作本身造成二次覆盖,彻底断绝希望
  • 直接在有业务写入的机器上扫描:写入持续进行,且扫描会拖慢 IO,抢救窗口被压缩
  • 误以为文件系统日志或快照一定能救:快照有保留周期,超过窗口的历史版本同样已不存在

数据来源与参考

  • man extundelete(ext3/ext4 恢复工具)
  • TestDisk/PhotoRec 官方文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌