我的理解如下:
–checksum
如果文件大小和时间匹配,它将在两端执行校验和以查看文件是否真的相同.
– 忽略倍
无论两端的文件时间是否相同,都“传输”每个文件.由于它仍将使用增量传输算法,如果文件实际上相同,则不会传输任何内容.
这是技术上的差异,但就我所知,它们在语义上是相同的.
所以,我想知道的是:
>这两个选项之间的实际区别是什么?
>在什么情况下你会使用一个而不是另一个?
>他们之间有任何性能差异吗?
解决方法
–ignore-times告诉rsync关闭文件时间和大小的启发式,从而无条件地将所有文件从源传输到目标.然后,rsync将继续读取源端的每个文件,因为它需要使用其delta传输算法,或者只是完整地发送每个文件,具体取决于是否指定了–whole-file选项.
–checksum还修改了文件时间和大小的启发式,但在这里它忽略了时间并仅检查大小.传输源大小和目标端的文件大小不同,因为它们明显不同.具有相同大小的文件是校验和(在rsync版本3.0.0中使用MD5,或在早期版本中使用MD4),并且还会传输具有不同总和的文件.
如果源端和目标端大部分相同,则–checksum将导致大多数文件在两端进行校验和.这可能需要很长时间,但结果是最小的数据实际上将通过线路传输,特别是如果使用增量传输算法.当然,如果您的网络速度非常慢,而且cpu速度非常快,那么这只是一场胜利.
另一方面,–ignore-times将通过网络发送更多数据,并且它将导致所有源文件被读取,但至少它不会增加在源上计算许多加密强哈希值的额外负担和目标cpu.当网络速度很快和/或cpu相对较慢时,我希望此选项的性能优于–checksum.
我想我只会使用–checksum或–ignore-times,如果我将文件传输到目的地,在那里怀疑某些文件的内容已损坏,但修改时间没有改变.虽然可能还有其他用例,但我真的不能想到使用任何一个选项的任何其他好理由.