通常,rsync
当文件在源端和目标端具有相同的大小和时间时,将跳过文件。这是一种启发式方法,通常是一个好主意,因为它避免rsync
了必须检查在源端和目标端非常可能相同的文件的内容。
--ignore-times
告诉rsync
您关闭文件时间和大小的试探法,从而无条件地将所有文件从源传输到目标。rsync
然后,它将继续读取源端的每个文件,因为它将需要使用其增量传输算法,或者只是完全发送每个文件(取决于是否--whole-file
指定了该选项)。
--checksum
还修改了文件时间和大小的启发式方法,但是这里它忽略时间并仅检查大小。源和目标端上大小不同的文件将被传输,因为它们明显不同。对具有相同大小的文件进行校验和(在rsync
3.0.0+版本中使用MD5,在较早版本中使用MD4),并且发现总和不同的文件也将被传输。
如果源端和目标端大部分相同,--checksum
则将导致大多数文件都被校验和。这可能会花费很长时间,但是最终结果是,最少量的数据实际上将通过电线传输,尤其是在使用增量传输算法的情况下。当然,只有在网络速度很慢和/或CPU速度非常快的情况下,这才是胜利。
--ignore-times
另一方面,它将通过网络发送更多数据,这将导致读取所有源文件,但至少不会在源CPU和目标CPU上增加计算许多具有加密强度的哈希值的额外负担。--checksum
与网络速度快和/或CPU速度相对较慢时,我希望此选项的性能更好。
我想我只会用,--checksum
或者--ignore-times
如果我将文件传输到怀疑某些文件的内容已损坏但修改时间未更改的目的地,则只能使用。尽管可能还有其他用例,但我真的没有想到使用其他任何理由。
--checksum
很有用--itemize-changes
。当前每日/每周更新完成后,我的备份脚本会不时地以这种方式进行全面比较。如果--itemize-changes
输出任何意外内容,我会收到一封标记为紧急的电子邮件,因此我知道我应该调查一个潜在的问题。