我已使用rsync
选项--checksum
和调用--append-verify
。
我对这种选项组合的处理的理解是应用程序将按以下过程运行:
如果文件仅存在于源上,则通过将其复制到目标位置来传输它。
如果源和目标上都存在,则增量验证双方的校验和。
在校验和计算出现分歧(指示内容不匹配)的任何点,或者一个文件在另一个文件之前结束的任何点,从源更新目标的剩余内容。
从这个意义上讲,更新剩余内容可能需要截断、覆盖和附加目标。
这种行为与 引起的行为相反
--append
,后者仅导致目标文件比源文件短时被追加。
--checksum
在使用选项、--append-verify
和--verbose
(通常,在适当的情况下)的组合来处理过去几年的无数数据集之后--recurse
,作为确保两个文件树相同的预期方法,我现在观察到rsync
使用这样的行为参数组合不是我所期望的。
奇怪的是,尽管rsync
在线路的两侧都进行了计算,以计算两者上存在的每个文件的校验和,但只要两个文件的长度相同,似乎就可以忽略任何不匹配。
该选项的实际行为和目的是什么--append-verify
(有或没有)--checksum
,以及我如何实现我已确定为我的意图的行为?
最后,如果我可以提出一个更主观的问题而不强烈反对,那么我是唯一一个认为我所描述的实际行为不仅出乎意料而且危险的人吗?*
答案1
简而言之:
--checksum
是一种方法,如何rsync
确定两个文件是否相同--append
仅--append-verify
当源文件大于目标文件时才有用。区别仅在于传输完成后的校验和计算(与上述选项无关)。前者计算整个文件的校验和,后者仅计算附加部分的校验和。如果您使用的--append
文件已更改“旧”部分的内容,据我所知,您会收到错误。
如今,我还没有找到任何附加的合理用例,唯一的情况是日志文件不断增长。对于日志文件轮换来说,这无论如何都是无意义的。