Unison:始終使用“copyprog”進行更新
我正在使用 Unison 在多個客戶端之間同步文件。每個客戶端都是相同的,這意味著每當一個客戶端更新某個文件時,所有其他客戶端都必須隨之更新。
這些文件儲存在集中式雲伺服器中。每個客戶端都具有對集中式雲伺服器的非 root 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
在雲伺服器上具有屬性集(包含所有者/組)。其他客戶端上的連續同步確實會保留所有權。 2. 但是,當文件更新copyprog
時,不使用中配置的 rsync 。我相信 Unison 會做一些自定義的內置傳輸邏輯。這不是很好,因為現在該
user.rsync.%stat
屬性在雲伺服器上失去了。其他客戶端上的連續同步現在將失去所有權。是否可以配置 Unison 使其
copyprog
也始終用於更新?文件提到:如果您將 copythreshold 設置為 0,Unison 將使用外部複製實用程序進行所有整個文件傳輸。
不幸的是,沒有提到更新。
我重現了您看到的問題,並查看了非常詳細的調試輸出和 OCaml copy.ml
copyprog
程式碼(我不熟悉這種語言),但沒有看到任何無法使用該設置的明顯原因。但是, 2017 年 2 月的這個問題說 copyprog 僅適用於新文件(
copyprogrest
用於繼續中斷copyprog
)。對此的修復可能也可以解決您的問題。它現在被標記為增強。您可能想在那裡發布一個新問題,給出您的案例。