rsync –delete 误删目标目录的 –dry-run + 备份恢复流程

13次阅读

误删后关键在及时止损与备份恢复:一、用rsync -av –delete –dry-run预览操作并检查deleting行;二、立即停止写入,卸载分区或停服务,避免覆盖;三、依赖硬链接快照(如rsnapshot)和多版本备份实现可逆恢复。

rsync –delete 误删目标目录的 –dry-run + 备份恢复流程

rsync 带 --delete 时没加 --dry-run,导致目标目录被误删,这种情况很常见但后果严重。关键不是“能不能恢复”,而是“有没有备份”和“是否及时止损”。下面分三步讲清楚:如何预防、误删后怎么应急、以及备份恢复怎么做。

一、用 –dry-run 真正看清 rsync 要做什么

--dry-run 不是万能保险,它只模拟删除和同步动作,但结果依赖于当前文件状态和 rsync 参数组合。很多人跑完 --dry-run 没仔细看输出,就直接去掉参数执行,这是最大风险点。

  • 务必把 --dry-run-v(verbose)一起用,例如:
    rsync -av --delete --dry-run /src/ user@host:/dst/
  • 重点检查输出里有没有大量 deleting xxx 行——尤其是你本意不想删的目录或文件
  • 注意路径末尾斜杠:/src/(同步内容)和 /src(同步目录本身)行为不同,--dry-run 输出会体现这点
  • 如果目标是远程主机,先确认远程 rsync 版本是否支持 --dry-run(2.6.4+ 都支持,但极老版本可能忽略该参数)

二、误删发生后的紧急响应步骤

一旦发现 --delete 已执行且重要文件消失,立刻停止所有对目标目录的写入操作,避免新数据覆盖已删除文件的磁盘空间。

  • 如果是本地目录:立即卸载所在文件系统(如 umount /mnt/data),或至少禁止任何进程写入该分区
  • 如果是远程服务器上的目录:登录后第一时间停掉相关服务(如 web server、db、定时任务),并检查 lsof +D /path/to/deleted —— 如果有进程还打开着已被删的文件,/proc/PID/fd/ 下仍可找回
  • 不要运行 rsync 反向同步、不要 cp -r 覆盖、不要格式化或重建文件系统
  • 快速确认是否有现成备份(见下节),没有就立刻启动文件恢复工具(如 extundeletephotorecdebugfs),但成功率取决于文件系统类型和后续写入量

三、可靠的备份 + 恢复流程设计

靠恢复工具是下策,上策是建立带校验、带保留策略的 rsync 备份体系,让误删可逆。

  • 每次 rsync 同步前,先用硬链接创建快照(推荐 rsnapshot 或手动用 cp -al):
    cp -al backup.0/ backup.1/ && rsync -a --delete /src/ backup.0/
  • 在目标端保留多份历史副本(如 daily.0 ~ daily.7),每份都是完整目录结构,不依赖增量差异
  • 备份命令中加上 --backup --backup-dir=... --suffix=... 可单独保存被删文件(适合小规模变更场景)
  • 定期验证备份完整性:用 rsync -avn 对比源与最新备份;对关键目录跑 sha256sum -c 校验清单
  • 恢复时不要直接覆盖生产目录,先 rsync -a backup.3/ /restore_test/ 检查内容,确认无误再切换

真正安全的 rsync 流程,不是靠一次命令不出错,而是让每一次“出错”都落在可回退的边界内。备份不是附加项,它是 --delete 的必要搭档。

text=ZqhQzanResources