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. ファイルがあるとき作られたcopyprog、ファイル転送用にrsyncで設定されています。

    user.rsync.%statこれで、新しく作成されたファイルにクラウドサーバーにプロパティセット(所有者/グループを含む)があるので、これは非常に良いです。他のクライアントの継続的な同期は所有権を維持します。

  2. しかし、ファイル修正するcopyprog、で構成されたrsyncを使用しません。私はUnisonがカスタムビルトイントランスポートロジックを実行すると信じています。

    user.rsync.%statこれでクラウドサーバーで属性が失われるので、これは悪いことです。今、他のクライアントの継続的な同期は所有権を失います。

copyprogアップデートで常に使用されるようにUnisonを設定できますか?文書には以下が記載されています。

copythreshold が 0 に設定されている場合、Unison はすべてのジョブに外部コピーユーティリティを使用します。フルファイル移動する。

残念ながら、更新についての言及はありません。

答え1

私はあなたが見ている問題を再現し、非常に詳細なデバッグ出力とOCamlを見ました。copy.mlコード(言語に慣れていません)を使用しましたが、そのcopyprog設定で機能しない明確な理由が見つかりませんでした。

しかし、これ2017年2月の質問によると copyprog は新しいファイルでのみ動作します。copyprogrest中断を続けるために使用されますcopyprog)。この問題を解決すると、問題も解決される可能性があります。これで改善されたとマークされます。また、新しい質問を投稿してユースケースを提供することもできます。

関連情報