rsync --dry-run --checksum 是校验文件一致性的最可靠方法,它不修改文件、强制哈希比对,可精准识别内容差异;默认 quick check 易误判,必须显式启用 --checksum。

直接用 rsync --dry-run --checksum 就能高效校验两端文件是否一致,这是最贴近“校验一致性”本质的操作——不改动任何文件,只做内容级比对。
用 --dry-run + --checksum 模拟同步并检查差异
这是校验一致性的核心方法。rsync 默认靠文件大小和修改时间(mtime)快速判断是否跳过,但容易误判;加上 --checksum 强制逐块计算哈希,再配合 --dry-run(即 -n)仅输出将要操作的内容,就能精准识别哪些文件内容实际不同。
- 命令示例:
rsync -n -a --checksum /src/ /dst/(注意末尾斜杠含义:/src/ 表示同步目录内容,/src 不带斜杠表示同步目录本身) - 如果输出为空,说明所有文件内容完全一致;若有行输出,每行代表一个内容不一致或元数据不匹配的文件
- 该方式天然覆盖了新增、缺失、修改、权限/时间戳变化(若用了 -a)等多种不一致情形
单独比对文件数量与关键元数据
作为辅助手段,可快速发现大规模异常,比如同步中断、目录结构错位或 --delete 被误禁用:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 统计文件数:
find /src -type f | wc -l和find /dst -type f | wc -l,两者应相等 - 检查最新修改时间:
stat -c "%y" /dst | head -1应不早于本次备份开始时间(说明有新内容写入) - 确认目录深度或子目录名是否一致,避免因路径拼写错误导致“同步了空目录”
随机抽样验证具体文件内容
当需要人工复核或写入日志留痕时,可从目标端随机选几份文件,回源比对哈希值:
- 例如取 3 个文件:
find /dst -type f | shuf -n 3 | xargs -I{} sh -c 'f={}; echo "$f"; sha256sum "$f" "/src${f#/dst}"' - 只要任一文件哈希不一致,就说明 rsync 上次未正确同步,需排查原因(如磁盘满、权限不足、--checksum 未启用等)
- 此法开销小、可信度高,适合集成进备份脚本的 post-check 阶段
注意 rsync 自身的“聪明”陷阱
不用 --checksum 时,rsync 默认启用 quick check:仅比对 mtime 和 size。若源文件被覆盖但时间戳没变(如用 dd 写入同大小镜像),或网络传输中损坏但大小未变,它会误判为“已一致”。
- 所以校验一致性必须显式加 --checksum,不能依赖默认行为
- 若对性能极度敏感且确认文件不会被静默篡改,可用 --ignore-times 强制跳过时间检查,但仍需 --checksum 保底
- 避免混用 --update(-u)和 --checksum:前者按时间跳过,后者按内容跳过,逻辑冲突易导致漏检










