rsync 怎么判断文件变化
rsync 默认用『文件大小 + 修改时间』判断是否要传:只要两者之一不同就重传。这套判定极快,但依赖时间戳可靠;如果时钟漂移、或者有程序改内容不改大小,可能漏传或反复重传。--checksum 改成逐文件比对校验和,结果可靠但要把两端文件都读完,开销明显上升。
基本信息
| 适用平台 | rsync 3.x(Linux / macOS / WSL) |
|---|---|
| 默认依据 | 文件大小 + mtime |
| 可靠性选项 | -c / --checksum:按内容校验和比对 |
| 速度优先选项 | --size-only:只比大小,最快但漏检最明显 |
| 相关选项 | --ignore-times 忽略时间戳全量比对、--dry-run 预演差异 |
典型使用场景
- 日常增量同步:保持默认判定,速度最优
- 月度完整性核对:用 -c 对关键目录做一次全面比对
- 时间戳不可信的环境:源端系统时间异常或由第三方程序写文件时改用 -c
- 大文件集合优化:加大文件用默认判定、校验任务单独安排时间窗
- 差异审计:--dry-run 先列出将要传输的文件清单再决定执行
- 只增不改的归档目录:--size-only 足够,速度最快
校验式同步与预演
校验式同步与预演
# 按内容校验和比对(可靠但慢,适合校验类任务)
rsync -avc /data/ /backup/data/
# 先预演,确认差异清单符合预期再真正执行
rsync -av --checksum --dry-run /data/ /backup/data/
# 速度优先:仅比大小(改动内容但大小不变的文件会被漏掉)
rsync -av --size-only /data/ /backup/data/
# 忽略时间戳,强制比较(用于时间戳不可信的场景)
rsync -av --ignore-times /data/ /backup/data/差异判定方式对比
| 方式 | 依据 | 代价与风险 |
|---|---|---|
| 默认 | 大小 + mtime | 最快;时钟漂移会造成多余重传或漏传 |
| -c / --checksum | 内容校验和 | 可靠;需读取两端全部文件,海量小文件时窗口成倍拉长 |
| --size-only | 仅文件大小 | 很快;只改内容不改大小的变化会被漏掉 |
| --ignore-times | 不比较,全部按需重传 | 最保险也最慢,仅在时间戳不可信时使用 |
对完整性要求高的月度校验任务可用 -c;日常同步保持默认判定即可,把校验安排在独立时间片,避免与业务备份抢 IO。
两端时钟漂移会让默认判定反复重传文件的『未来时间戳』版本,先校准 NTP 再谈优化传输量。