–checksum和–ignore-times选项之间的rsync差异

任何人都可以澄清rsync--checksum--ignore-times选项之间的区别?

我的理解如下:

--checksum
如果文件大小和时间匹配,则会在两端执行校验和以查看文件是否真的相同。

--ignore-times
无论两端的文件时间是否相同,都要传输每个文件。 由于它仍将使用delta转换algorithm,如果一个文件实际上是相同的,则不会传送任何文件。

这是技术上的差异,但据我所知,它们在语义上是相同的。

所以,我想知道的是:

  • 这两种select的实际区别是什么?
  • 在什么情况下你会使用一个而不是另一个?
  • 他们之间有什么performance差异?

通常,当源文件和目标文件具有相同的大小和时间时, rsync跳过文件。 这是一种启发式的方法,通常这是一个好主意,因为它可以防止rsync检查源和目标端很可能相同的文件内容。

--ignore-times告诉rsyncclosures文件时间和大小的启发式,从而无条件地将所有文件从源文件传输到目标文件。 然后, rsync将继续读取源文件中的每个文件,因为它需要使用增量转换algorithm,或者根据是否指定--whole-file选项,完整发送每个文件。

--checksum也修改文件时间和大小的启发式,但在这里它忽略了时间,只检查大小。 大小不一的源文件和目标文件会被传输,因为它们明显不同。 对大小相同的文件进行校验和(使用rsync版本3.0.0以上版本的MD5,或者在早期版本中使用MD4),并且发现有不同和的文件也被传输。

如果源端和目标端大部分是相同的,则 – 大多数文件都会导致双方进行校验和。 这可能需要很长时间,但结果是数据的最小最小值实际上将通过导线传送,特别是如果使用增量传送algorithm。 当然,如果networking非常慢,CPU速度非常快,那么这只是一个胜利。

另一方面, --ignore-times将通过networking发送更多的数据,并且会导致所有的源文件被读取,但是至less不会增加在源码上计算许多密码强的哈希码的额外负担和目标CPU。 当你的networking速度很快,或者你的CPU比较慢的时候,我会希望这个选项比--checksum更好。

我想我只会使用--checksum或者--ignore-times如果我把文件传输到怀疑某些文件的内容被破坏,但是其修改时间没有改变的目的地。 我不能真正想到使用其中任何一个选项,尽pipe可能还有其他用例。

如果您已经使用另一个系统来同步文件,那么校验和也是有用的,这个文件还没有保存时​​间戳。 校验和只会传输不同的文件,并更新接收端的所有时间戳,以便它们匹配

一个细节:校验和选项在一端检查整个文件,然后在另一端检查整个文件。 如果你的文件有点大,这种杀死并行性。

另外,如果你有很大的文件,你最有可能会碰到--checksum超时,因为你不用-I

info rsync关于--checksum选项的信息 – “由于除了文件传输期间发生的自动校验和validation之外,还会发生连接两端所有文件的整个文件校验和,因此此选项可能非常慢。 “

--ignore-times选项可能会导致所有文件增量编码,并且增量转换algorithm(增量编码)至less和校验和一样慢。

我不知道rsync --ignore-times是否足够聪明,以避免在delta-transfer会导致没有任何被转移的频繁情况下的“自动传输后validation”。

对于--ignore-times

  • 如果rsync不是智能的(或不相信增量编码),那么检查(校验和编码)将被执行两次。
  • 增量编码也可能比128位MD4校验和慢得多。

两者都是“非常缓慢的”,而“ --ignore-times ”则可能更慢(由于上述两种可能性)。

好问题 – 如果您发现任何性能差异,请发帖。