モバイルRsyncの正しい処理

モバイルRsyncの正しい処理

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

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

私が見つけた一貫したできなければなりませんが、実際にはできないようです。私はテストしました一貫した各ディレクトリに大きなファイルを持つ2つのローカルディレクトリを同期させることで、私の移動が削除+作成であることを検出し、実際には同期

そして私の記憶が正しいなら一貫した数ヶ月前のソースコードではsha sumのようなことを試みますが、理想的な解決策はsha sumを実行したくありません。大容量ファイル/ディレクトリの場合は遅すぎます。私は次のことに気づきたいです。

「このファイルの最後のソース対応部分が削除されたように見え、ソースディレクトリツリーの他の場所に同じmdate、サイズ、およびinode番号を持つ新しいファイルがあるため、これが移動であると仮定してターゲットを移動します。削除+コピーを実行する代わりに、に従ってコピーしてください。」

これらのコンピュータをすばやく同期できることは私にとって重要です。

どんな提案がありますか?

答え1

あなたは少し見なければなりません。rdiff バックアップ内部的にはこれをrsync行いますが、必要な追加のインテリジェンスを提供します(増分バックアップをロールバックできますが、無効にするように設定できます)。

最新バージョンは古いバージョン(2009)ですが、これは安定性を意味します。

答え2

Unisonはあなたが望むことをすることができますが、リモートでのみ可能です。ssh://localhost/path/to/dir根の一つとして試してみてください。

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

答え3

ソースディレクトリとターゲットディレクトリのファイルシステムがハードリンクをサポートしている場合は、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。ただし、本番環境でこの方法を使用する前に、広範なテストを実行することをお勧めします。

答え4

質問は古いですが関連しています。

これはあなたが探しているツールです: 再同期ヘルパー

これは3種類の変更を同期します。

  1. ファイルの変更タイムスタンプの変更(Exiftoolを使用して写真のタイムスタンプを一括変更する場合)
  2. ファイル/ディレクトリの名前変更
  3. あるディレクトリから別のディレクトリにファイルを移動する

実行するように設計されています。今後rsyncはすでに実行中です。

免責事項:私は上記のツールの作成者です。

関連情報