我正在使用 rsync 将文件从源计算机 C1 传输到目标计算机 D1 [不在同一局域网内]。 C1(源)中的文件 A 是 D1(目标)中的文件 B 的更新版本。文件 A 为 850 mb,文件 B 为 530 mb。
使用的命令:
rsync -e "ssh -p 2222 -o StrictHostKeyChecking=no -o ConnectTimeout=10" -avvvz --stats --progress fileA.tar username@destIP:fileB.tar
以下是获得的统计数据:
hash search b=25600 len=899737600
Number of files: 1
Number of files transferred: 1
Total file size: 899737600 bytes
Total transferred file size: 899737600 bytes
Literal data: 709324800 bytes
Matched data: 190412800 bytes
File list size: 38
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 617865859
Total bytes received: 153142
sent 617865859 bytes received 153142 bytes 3501524.08 bytes/sec
total size is 899737600 speedup is 1.46
data sent - 617865859 bytes (590mb approx)
根据 rsync 的 delta 算法,仅应传输 320 mb 的差异以及用于校验和的额外字节以及将所有传输的数据组合在一起的指令。但总共传输了 590mb。为什么要额外传输 270mb?
这个额外的数据传输是因为额外的数据作为 rsync 指令或校验和传递,还是除了 320mb 的差异之外还从文件 A 传输了额外的数据 - 这意味着在这种情况下 delta 算法不是很有效?
答案1
您正在传输更新的tar
存档。目标位置的旧副本约为 530 Mb,更新后的文件约为 850 Mb。区别在尺寸方面是 320 Mb,但我假设必须传输的文件的前 530 Mb 也存在差异。
如果更新的存档只有东西附加的对此,那么您的担忧是正确的,但如果您重新创建存档,则只需以不同的顺序添加更新存档的前 530 Mb 中的两个文件,或者添加到存档中的数据是实际上以较小的文件分布在整个存档中,以便rsync
也检测那里的更改。