Unison:始终使用“copyprog”进行更新

Unison:始终使用“copyprog”进行更新

我正在使用 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

我观察到以下行为:

  1. 当一个文件是已创建,rsync中配置的copyprog用于传输文件。

    这很棒,因为现在新创建的文件user.rsync.%stat在云服务器上具有属性集(包含所有者/组)。其他客户端上的连续同步确实会保留所有权。

  2. 但是,当文件更新copyprog,不使用中配置的rsync 。我相信 Unison 会做一些自定义的内置传输逻辑。

    这不太好,因为现在该user.rsync.%stat属性在云服务器上丢失了。其他客户端上的连续同步现在将失去所有权。

是否可以配置 Unison,使其copyprog也始终用于更新?文档提到:

如果将 copythreshold 设置为 0,Unison 将为所有内容使用外部复制实用程序整个文件转移。

不幸的是,没有提到任何有关更新的信息。

答案1

我重现了您看到的问题,并查看了非常详细的调试输出,以及 OCaml复制.ml代码(我不熟悉这种语言),但没有看到任何明显的原因说明为什么它无法使用该copyprog设置。

然而,2017 年 2 月的问题说 copyprog 仅适用于新文件copyprogrest用于继续中断的copyprog)。解决这个问题可能也能解决您的问题。现在它被标记为增强。您可能想在那里发布一个新问题,给出您的用例。

相关内容