ホームディレクトリを120GBUSBドライブと同期するための最良の方法を探しています。キャッチは、私が バインドマウント (私はフォローしたくない)とハードリンク(私はdopreserved)になりたい。 Rsyncはこれを行うことができますが、それは一方向ですが、私は両側に変更があります。
Unisonは双方向同期をインテリジェントに処理できるように見えますが、1つのファイルシステムに制限したり、バインドマウントを無視したりするオプションが見つかりません。ドキュメントには「Unisonはハードリンクを理解していません "。ただし、デフォルトでは、unisonはrsyncを使用して転送を行います。 rsyncのハードリンクとバインドマウントの理解を使用する方法はありますか?
あるいは、rsyncとdiffを使用して手動で双方向同期を行う例を誰かに教えてもらえますか?または同様の何か?
注:過去にFreeFileSyncを使用したことがありますが、問題が発生し、ファイルとバックアップの両方がほぼ失われました。それはおそらく私のせいでしたが、FreeFileSyncを使用することを恐れています。
ユニゾンだけを使用すると、あなたの質問に対する答えはnoだと思います。一般に、バインドマウントやハードリンクであるディレクトリのように、ある種の 名前のパターン一致 で指定できないプロパティとファイル/ディレクトリを同期するかどうかをUnisonに指示することは困難です。あなたの場合。
「デフォルトでは、unisonはrsyncを使用して転送を実行する」と言うのは正しくありません。 Unisonは同じ rsyncと同じ基本的なアルゴリズム/プロトコル を使用しますが、独自の実装を使用します。実際のrsync
実行可能ファイルは呼び出されないため、rsync
実行可能ファイルの機能にアピールすることはできず、この方法で問題を解決することはできません。 rsync
がそれを実行できる場合でも、誰かが機能を作成した場合、Unisonが実行できると思います。
ご指摘のとおり、ユニゾンはハードリンクを理解していませんので、運が悪かったと思います。ただし、外部プログラムを使用して、バインドマウントを巧妙に無視できる場合があります。 findmnt を使用してバインドマウントであるディレクトリを一覧表示し、バインドマウントごとに nisonプロファイル に行ignore = Path /path/to/bind/mount
を挿入できます。
また、スクリプトなどを使用して手動でこれを行うことを検討しているように見えるので、 inotify-tools に注意する必要があります。
バインドマウントを使用して、マウントポイントのないディレクトリのビューをUnisonに与えるだけで、バインドマウントを無視できます。有効にすると(Systemdのデフォルト)、バインドマウント間でマウントを伝播するマウント伝播に注意してください。