首页/系统与基础设施/自动化运维速查/目录增量同步的实现方法
批量执行与作业50 条

目录增量同步的实现方法

目录增量同步只传输发生变化的部分,让目标目录与源目录一致。rsync 是事实标准:默认按文件大小与修改时间快速判定差异,只对判为不同的文件传差异块,必要时可用 --checksum 换取更准的判定;--delete 会让两端完全对齐,是数据丢失的头号来源。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​‌​​​‌‌​‌​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​​​​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌‌‌​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

目录增量同步是什么

目录增量同步指只传输发生变化的部分,让目标目录与源目录保持一致。rsync 是事实标准:先用大小与修改时间快速判定哪些文件不同,再只传输差异块,因此反复同步的开销远小于整目录复制。增量判定的准确性取决于大小与时间戳是否可靠,需要时可切换到按内容校验。策略上最需要警惕的是删除对齐选项,它会让目标端与源端完全一致,包括删掉源端已经不存在的文件。

基本信息

核心工具rsync(Linux 与 macOS 自带;Windows 可用 WSL 或 cwRsync)
增量判据默认按文件大小与修改时间;--checksum 改为按内容校验
危险选项--delete、--delete-excluded、--remove-source-files
关键前提两端时间戳可信,源目录在同步期间不再变化

典型使用场景

  • 发布时把构建产物同步到多台目标主机
  • 备份场景做首次全量、后续增量
  • 多机之间保持一致的数据目录或静态资源目录
  • 迁移时先全量复制,再用增量把差异追平
  • 结合文件系统事件监控或定时任务做准实时同步

同步与演练写法

同步与演练写法
rsync -avn --delete src/ dst/                       # -n 只演练,先看会删除哪些文件
rsync -av --delete --exclude='*.tmp' src/ dst/         # 排除临时文件后再对齐
rsync -av --checksum src/ host:/data/src/              # 按内容校验判定差异,更准也更慢
rsync -av --partial --append-verify big.iso host:/data/  # 大文件续传并做尾部校验
find src -newer /tmp/last_run -print                     # 列出上次同步后变动的文件核对

常用选项与代价

选项作用代价与风险
-a归档模式,保留权限属主与时间目标端需要对应权限
-n演练模式,不做实际改动无代价,建议每次对齐前必跑
--delete删除目标端多余文件误删风险高,必须配合演练
--checksum按内容判定差异CPU 与磁盘 IO 开销上升
--bwlimit限制传输速率总时长变长,需与窗口匹配
默认判据信任大小与修改时间。如果文件内容变了但时间戳被保留(例如从归档包解压、从备份还原),默认判据会漏掉变化,此时必须用 --checksum。
源路径结尾是否带斜杠语义完全不同:带斜杠表示同步目录内容,不带斜杠表示把目录本身放进目标。配合 --delete 时写错,会在目标端造成大量误删。执行前必须演练,并确认源端挂载正常。

易错点

  • 源路径结尾斜杠写错,同步成嵌套目录或把整棵源目录放进目标目录
  • --delete 未先演练,源端挂载失败时把目标端数据全部删除
  • 文件内容变化但时间戳未变(解包、还原备份),默认增量判据漏检
  • 同步正在写入的大文件,目标端出现不完整副本且下次同步无法判定
  • 单向同步被当成双向使用,反向的变更在下次同步时被覆盖

数据来源与参考

  • rsync 手册页 rsync(1)
  • Linux 手册页 find(1) 中 -newer 与 -print0
  • rsync 官方文档:--delete 与 --checksum 语义

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/directory-incremental-synchronization.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​‌​​​‌‌​‌​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​​​​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌‌‌​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​