谁能澄清rsync--checksum和--ignore-timesoptions之间的区别?
我的理解如下:
--checksum
如果文件大小和时间匹配,它会在两端做一个校验和,看看文件是否真的相同。
--ignore-times
'传输'每个文件,不管两端的文件时间是否相同。由于它仍将使用增量传输算法,如果文件实际上是相同的,则不会传输任何内容。
这是技术上的区别,但据我所知,它们在语义上是相同的。
所以,我想知道的是:
Ste*_*day 127
通常,rsync当文件在源端和目标端具有相同的大小和时间时跳过文件。这是一种启发式方法,通常是一个好主意,因为它可以避免rsync检查源端和目标端很可能相同的文件的内容。
--ignore-times告诉rsync关闭文件时间和大小启发式,从而无条件地将所有文件从源传输到目标。rsync然后将继续读取源端的每个文件,因为它将需要使用其增量传输算法,或者只是完整地发送每个文件,具体取决于是否--whole-file指定了选项。
--checksum还修改了 file-times-and-sizes 启发式方法,但这里它忽略时间并仅检查大小。传输大小不同的源端和目标端的文件,因为它们明显不同。对大小相同的文件进行校验和(rsync3.0.0+ 版本中使用 MD5 ,或早期版本中使用 MD4),并且那些发现具有不同总和的文件也会被传输。
在源端和目标端大部分相同的情况下,--checksum将导致大多数文件在两端都进行校验和。这可能需要很长时间,但结果是实际上将通过网络传输最少的数据,尤其是在使用增量传输算法的情况下。当然,如果您的网络速度非常慢和/或 CPU 速度非常快,这只是一种胜利。
--ignore-times另一方面,会通过网络发送更多数据,并且会导致读取所有源文件,但至少不会在源和目标 CPU 上计算许多加密强哈希和的额外负担。我希望此选项的性能比--checksum您的网络速度快和/或 CPU 相对较慢时要好。
我想我只会使用--checksum或者--ignore-times如果我将文件传输到怀疑某些文件的内容已损坏但其修改时间未更改的目的地。尽管可能还有其他用例,但我真的想不出使用这两个选项的任何其他充分理由。
Pau*_*lus 21
如果您一直在使用另一个系统来同步文件,而没有保留时间戳,则校验和也很有用。校验和只会传输不同的文件并更新接收端的所有时间戳,以便它们匹配
| 归档时间: |
|
| 查看次数: |
144749 次 |
| 最近记录: |