关于rsync delta-transfer增量传输功能的技术问询
摘自rsync手册:
它以其增量传输算法而闻名,该算法通过仅发送源文件与目标端现有文件之间的差异,减少了网络上的数据传输量……
Rsync默认使用“快速检查”算法来找出需要传输的文件,该算法会检查文件的大小或最后修改时间是否发生变化。当快速检查表明文件数据不需要更新时,任何其他需要保留的属性变更(根据选项要求)都会直接在目标文件上进行修改。
你提到的“源文件与目标端现有文件之间的差异”,是不是包含以下两种情况?
- 情况1:源端
source/file和目标端dest/file通过时间戳或校验和判定为完全相同,因此无需传输 - 情况2:除了情况1的逻辑外,当源端和目标端文件存在二进制差异时,仅发送两者之间的差异部分
嘿,这个问题问得相当精准!咱们把这两个点拆开来理清楚:
首先,情况1其实是rsync「快速检查」的工作逻辑,不属于delta-transfer算法本身的范畴。默认的快速检查会先通过文件大小、最后修改时间这两个维度判断文件是否完全一致——如果判定一致,这些文件直接就被跳过了,根本不会触发delta-transfer流程。当然你也可以通过--checksum选项让rsync用校验和来做更严格的检查,但核心逻辑还是先筛掉无变化的文件。
然后是情况2,这才是delta-transfer算法真正的用武之地:当快速检查发现文件有变化(比如大小改了、时间戳更新了),rsync就会启动delta-transfer机制。它会把源文件和目标文件拆分成小块,对比每一块的差异,最后只把那些不一样的块传输到目标端,再重新组合成完整的新文件。这样就避免了整个文件重新传输,大大节省了带宽。
总结一下:快速检查是rsync的“前置筛选器”,负责排除完全相同的文件;delta-transfer是“高效传输引擎”,对确实有变化的文件只传差异部分。这两者配合起来,才让rsync在同步场景下表现得这么高效。
备注:内容来源于stack exchange,提问作者qwr

