干跑为什么要先做
正式同步之前先空跑是使用 rsync 的基本纪律:加上 -n 后 rsync 只报告「将会做什么」,不写入任何文件。配合 --delete 与 --itemize-changes,能逐条看到将要新增、修改与删除的对象,其中删除清单必须人工过一遍——--delete 是备份与镜像同步中最容易造成数据丢失的选项。还要记住干跑与实跑之间存在时间差,源数据会变化,所以确认后应尽快执行,不要把干跑结果当成最终依据。
基本信息
| 适用平台 | Linux/macOS(rsync) |
|---|---|
| 命令语法 | rsync -avn --delete --itemize-changes 源/ 目标/ |
| 常用选项 | -n 干跑不落地 -a 归档 -v 详细 -i 逐项输出变化 -c 按校验和比较 --delete 删除目标端多余文件 |
| 关键动作 | 先核对 deleting 清单,再执行实际同步 |
| 权限说明 | 与正式同步相同,需对目标目录有写权限 |
典型使用场景
- 首次同步:审计两边差异,避免把大量文件一次性推过去
- 镜像同步:执行带 --delete 的操作前核对删除清单
- 发布核对:确认本次同步将改动哪些文件
- 迁移评估:了解数据量与差异规模,安排窗口
- 结果异常:同步后与预期不符时用干跑复现差异
常用示例
常用示例
rsync -avn --delete --itemize-changes /data/site/ /backup/site/
rsync -avn --delete /data/site/ /backup/site/ | grep '^deleting' # 只看删除清单
rsync -avni --delete /data/site/ /backup/site/ | head -n 50 # 逐项变化
rsync -avn --delete /data/site/ /backup/site/ | tail -n 5 # 总量统计
# 确认无误后去掉 -n 再正式执行逐项输出标记
| 标记 | 含义 | 说明 |
|---|---|---|
| 大于号开头的标记 | 文件将被传输到目标 | 新增或内容发生变化 |
| deleting | 目标端该文件将被删除 | 必须人工确认,风险最高的一类 |
| 含 c 的标记 | 校验和不同 | 内容确实变化 |
| 含 s 或 t 的标记 | 大小或时间不同 | 可能只是时间戳差异 |
| 点开头的标记 | 属性变化但内容未变 | 只涉及元数据更新 |
完整标记含义见 rsync 手册。日常只需分清两类:会传输哪些文件、会删除哪些文件,其中删除清单要逐条确认。
干跑输出照常打印,容易被误当成「已执行成功」的凭证。要让日志能区分,可在脚本里把干跑与实跑的输出写到不同文件。