web-dev-qa-db-ja.com

ユニゾンおよび拡張ファイル属性

私は2台のマシンを持っています。1台はDebian、もう1台はUbuntuで、どちらもext4にあり、拡張ファイル属性がfstabで有効になっています。 getfattrとsetfattrがインストールされ、ローカルの両方のマシンで完全に機能します。ただし、unison(バージョン2.40.102)は、デフォルトでは拡張ファイル属性を同期しません。

グーグルで検索したところ、拡張属性の同期を有​​効にすることになっているプロファイル設定を含む this ブログ投稿が見つかりました。だから、私は自分のプロファイルを変更しました、そして今それは次のようになります:

root=/path/to/dir
root=ssh://[email protected]//path/to/dir2
auto=true
batch=true
perms=0
rsync=true
maxthreads=1
retry=3
confirmbigdeletes=false
copythreshold=0
copyprog = rsync -aX --rsh='ssh -p 22' --inplace --compress
copyprogrest = rsync -aX --rsh='ssh -p 22' --partial --inplace --compress
copyquoterem = true
copymax = 1

このプロファイルは新しいファイルの拡張属性を同期しますが、すでに同期されているファイルの拡張属性を変更してユニゾンで実行すると、次のようになります。

Nothing to do: replicas have not changed since last sync.

他のすべては完全に同期しますが、ユニゾンは拡張属性の変更を認識していません。また、fastcheckを無効にして、ファイルをより詳細にチェックできるようにしたいと思いました。動作しませんでした。一方向にrsyncを試してみましたが、完全に機能しました。しかし、双方向の同期が必要なので、ユニゾンで立ち往生しています。

私は公式マニュアルを調べましたが、通過時に拡張ファイル属性についてのみ言及しています。だから私の質問はこれです:これは一斉に行うことができますか?ここで簡単なものが欠けていますか?あるいは、これを実現できる他のオープンソースツールはありますか? (私はbsyncとbitpocketを知っていますが、予備テストでは、拡張ファイル属性の変更にも気づきませんでした)。

5
zero gravitas

誰かが将来私と同じ問題に遭遇した場合-ユニゾンは拡張ファイル属性では機能しません。これを回避する1つの方法は、copyprog + copythreshold = 0ハック(元の質問のプロファイルを参照)ですが、これは、xattrの変更に気付かないユニゾンの問題を解決しません。コメントの1つで述べたように、ファイルの変更時間を変更しても、unisonsyncで変更されたxattrは作成されません。それだけでなく、次にそのファイルの内容が変更されたときに、それらを消去します。

拡張ファイル属性を使用して双方向同期を機能させる唯一の方法は、 bsync を使用し、rsync引数に-Xフラグを追加して変更し、ファイルの変更時間を変更することです。

これは理想的な解決策とはほど遠いです:ファイルの変更時間の変更、Windowsサポートなし、Python 3依存関係、最後のコミットは昨年などでしたが、それが仕事をする唯一のソフトウェアです。

2
zero gravitas

これはおそらくあなたがすでにマニュアルで見たものですが、 2.27以降の変更 それは言います

Unisonはファイルの転送に失敗することがあり、ファイルが変更されていなくても「同期中に宛先が更新されました」という役に立たないメッセージが表示されます。これは、変更時刻を変更せずにファイルの拡張属性を変更するプログラムが原因である可能性があります。これに対する最善の修正が何であるかは明確ではありません–それはユニゾンのせいではありませんが、ユニゾンの振る舞いを不可解にします– ...

したがって、ユニゾンは主にファイルの変更時間を他の何よりも重視しているように見えます。私が試みる回避策は、拡張属性が変更された直後にファイルの変更時間を更新することです。これにより、Unisonは変更を認識し、ファイルを同期します。ただし、これが実行可能かどうかは、拡張属性をどのように変更するかによって異なります。

inotifytoolsの何かを使用して、ファイルの拡張属性への変更を検出できると思います。 inotifytoosを使用して、Unisonに同期させたいすべてのファイルを監視し、変更が検出されるたびにファイルをtouchするスクリプトを作成できます。

0
Mike Pierce