rsync 默认启用块级校验实现差异同步,无需额外参数;它将文件按2048字节分块并计算弱/强校验和,仅传输变化块,前提是目标文件存在可读且未使用--size-only等禁用校验的选项。

rsync 默认就启用块级校验(即“rsync 算法”),无需额外开启参数——它天然支持在目标文件已被部分修改时,只传输差异数据块,实现精准微量同步。
块校验是 rsync 的默认行为
rsync 在传输前会将源文件和目标文件都按固定大小(默认 2048 字节)分块,为每一块计算弱校验和(Adler-32)与强校验和(MD4 或 SHA-1,取决于版本)。两端比对后,仅传输源端有、目标端缺失或校验和不匹配的块。这个过程全自动触发,不需要加特定“开启校验”的参数。
- 只要使用标准同步命令(如
rsync -a source/ dest/),块级差异传输就在运行 - 即使目标文件被手动改过几行、删了一段、或追加了日志,rsync 也能识别出哪些块变了,只传那几块
- 这种机制不依赖时间戳或文件大小——哪怕修改后大小没变、mtime 也没动,只要内容不同,就会重传对应块
确保块校验生效的关键前提
要让块级同步真正起作用,需满足以下条件:
- 目标文件必须存在且可读:rsync 需要读取目标端已有文件来分块并比对;如果目标文件不存在或权限不足,它会直接全量传输
- 避免用 --size-only 或 --ignore-times:这两个参数会跳过内容校验,仅靠大小或时间判断,导致块算法失效
- 不要强制覆盖(如加 --force)或跳过检查(如加 --update):它们可能绕过内容比对逻辑
- 远程同步时建议用 SSH:保障传输安全,同时 rsync 通过 SSH 启动的 remote shell 能完整访问目标文件系统,支持块读取与重建
验证是否真正在做块级同步
运行时加上 -i(itemize)参数,可看到每项操作的底层原因:
-
.f..t......表示只更新了时间戳(没传数据) <f.st......> 表示传输了部分数据块(<code> 代表发送,<code>f是普通文件,s和t表示大小或时间变化)- 若看到大量
>f+++++++++,说明文件全量重传——可能是目标文件被删、不可读,或用了干扰校验的选项
例如:rsync -avi source/file.txt dest/file.txt,输出中出现带 或 <code>> 的行,就是块级同步正在工作的明确信号。
进阶:显式启用强校验(可选)
默认情况下 rsync 使用快速校验(Adler-32 + MD4),已足够可靠。如需更高一致性保障(比如跨高误码率网络或关键数据),可加 --checksum 参数:
- 它强制对所有文件做全量内容校验(逐字节比对),不依赖 mtime/size 快速判断
- 注意:这会显著增加 CPU 开销和运行时间,一般场景不推荐启用
- 它不改变块传输机制,只是让“哪些块需要传”的决策更严格——仍只传差异块
真正影响微量同步效果的,不是开不开校验,而是别关掉它该有的运行条件。











