我正在使用 Unison 在多个客户端之间同步文件。每个客户端都是相同的,这意味着每当一个客户端更新某个文件时,所有其他客户端都必须随之更新。
文件存储在集中式云服务器中。每个客户端都可以通过非根 SSH 访问集中式云服务器。客户端之间没有链接。
保留文件的所有权非常重要。出于这个原因,我--rsync-path="rsync --fake-super"
在下面使用。这会将所有者/组存储在扩展文件属性中,因此可以在随后的同步过程中恢复客户端上的所有权。也就是说,如果有更好的方法来保留所有权,请随时告诉我,因为这也可能消除下面的问题。
配置的相关片段如下:
copythreshold = 0
copyprog = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace -e ssh
copyprogrest = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace --partial -e ssh
我观察到以下行为:
当一个文件是已创建,rsync中配置的
copyprog
用于传输文件。这很棒,因为现在新创建的文件
user.rsync.%stat
在云服务器上具有属性集(包含所有者/组)。其他客户端上的连续同步确实会保留所有权。但是,当文件更新
copyprog
,不使用中配置的rsync 。我相信 Unison 会做一些自定义的内置传输逻辑。这不太好,因为现在该
user.rsync.%stat
属性在云服务器上丢失了。其他客户端上的连续同步现在将失去所有权。
是否可以配置 Unison,使其copyprog
也始终用于更新?文档提到:
如果将 copythreshold 设置为 0,Unison 将为所有内容使用外部复制实用程序整个文件转移。
不幸的是,没有提到任何有关更新的信息。