慎重に動くRsync


10

私はラップトップとネットブックの間でホームディレクトリを同期するためにrsyncを正常に使用しています(両方ともLinuxでext4を使用しています)。私の唯一の問題は、時々私が特定のディレクトリを完全に再編成することを好むことです。rsyncはこれを削除と新しいファイルの作成と見なし、非常に遅く非効率的になります。

ファイルの移動をうまく処理する優れたソフトウェアを知っている人はいますか?

私はそれを見つけたユニゾンは、このことが可能でなければならないが、それは実際に動作するようには思えません。私はユニゾンをテストし、それぞれに大きなファイルが含まれる2つのローカルディレクトリを同期しましたが、移動が削除+作成として検出され、実際にはrsyncよりもさらに低速でした。

さらに、2か月前にunisonのソースコードを見たときに正しく覚えていると、和算を行うような試みが行われ、理想的な解決策として和算を実行したくありません。ファイル/ディレクトリ。私は次のようなことに気づくものをお願いします:

"このファイルの最後のソースの対応物は削除されたようであり、同じmdate、サイズ、およびiノード番号を持つソースディレクトリツリーの別の場所に新しいファイルがあるため、これは移動であると仮定します。削除+コピーを行う代わりに、それに対応するターゲットを移動します。 "

これらのマシンをすばやく同期できることが私にとって重要です。

助言がありますか?

回答:


6

あなたは見てとるべきのrdiff-バックアップそれがないrsyncの下に、しかし、あなたが必要とする追加のインテリジェンスと(そしてそれはロールバックできる増分バックアップを行いますが、あなたはそのオフを切り替えるに設定することができます)。

最新リリースは古い(2009)ですが、それは安定性の表れです。


2
誰かがそれを試しましたか?
ミスト

3

Unisonはあなたが望むことをしますが、それはリモート同期のためだけです。ssh://localhost/path/to/dirルートの1つとして使用してみてください。

Unisonはファイルの内容に基づいて決定を下し、inode番号を追跡しません。


1

ソースおよびターゲットディレクトリのファイルシステムがハードリンクをサポートしている場合は、移動および名前変更されたファイルをrsyncで処理できます。アイデアは、実際の転送の前にrsyncにハードリンクを再構築させることです。ここで良い説明を見つけることができます

ソース/ターゲットディレクトリ内にハードリンクの非表示ツリーを作成する単純なソリューションになりました。基本的なスクリプトは次のようになります。

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

GitHubにサンプルスクリプトがあります。ただし、この方法を本番環境で使用する前に、大量のテストを行うことをお勧めします。


0

複数のマシン間でファイルを同期する場合は、Subversion(またはFSVS、SVNをバックエンドとして使用する)などの集中型バージョン管理システムを使用するだけで済みます。/ home内のすべて(バージョン管理に追加したもの)がバージョン管理され、他のマシンと簡単に同期したり、ロールバックしたりできるのは素晴らしい点です。


0

lsyncdは移動したファイルをrsync + sshの動作で処理しますが、多少バグがあります(削除の理由として、約15%の移動が削除/コピーとして処理されますが、その理由はわかります)。ほとんどの場合、機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.