web-dev-qa-db-ja.com

rsyncrsyncでチェックサムを実行する方法

Rsyncを使用する場合、rsyncが実行されたすべてのファイルをコピーしないことがあります。以下は、私が使用するコードです。チェックサムを実行するか、rsyncの後ですべてのファイルがコピーされたかどうかを確認し、そうでない場合はすべてのファイルがコピーされるまで再試行する方法ですか?

TEMP="/home/user/temp"
OPTS="-rav -h"

rsync $OPTS --stats [email protected]:/home/user/Local $TEMP
10
Grimlockz

これは、rsyncを適切に構成することで最もよく解決されると思います。 manページを読んでください:)オプションがあります(これには--checksumなど)。

これは自分で行うこともできます。

  1. findrsyncされたディレクトリ内のすべてのファイル。
  2. xargs md5sumすべてのファイルのチェックサムを取得します
  3. md5sumチェックサム

両側(ローカル/リモート)でこれを行うと、比較するチェックサムがあります。

2
slezica

Uʍopǝpısdnの答えが示唆するように、rsync -cまたはrsync --checksumあなたが必要なことをするかもしれません。

-c、-checksum:mod-timeとsizeではなく、チェックサムに基づいてスキップします

これにより、送信者は128ビットのMD4チェックサムを使用してすべての通常のファイルをチェックサムする必要があります。これは、使用可能なすべてのファイルのリストを作成するときに、最初のファイルシステムスキャン中に実行されます。次に、受信者は、更新する必要のあるファイルを決定するために、各ファイルのバージョン(存在し、送信側の対応するファイルと同じサイズの場合)をチェックサムします。サイズが変更されたファイルまたはチェックサムが変更されたファイルが選択されます。転送。接続の両側にあるすべてのファイルのこのファイル全体のチェックサムは、ファイルの転送中に行われる自動チェックサム検証に加えて行われるため、このオプションは非常に遅くなる可能性があります。

Rsyncは、転送された各ファイルがファイル全体のチェックサムをチェックすることによって受信側で正しく再構築されたことを常に検証しますが、転送後の自動検証は、このオプションの転送前の「このファイルは必要ですか?」とは関係ありません。更新しますか?」小切手。

これが遅いという懸念は、最近はおそらく関係ありません。これは、変更時間に依存できない、または依存したくない場合に適したオプションのようです。

17
Tom

使用する rsync -Pahn --checksum /path/to/source /path/to/destination | sed '/\/$/d' | tee migration.txt

sedは、チェックサム検証からディレクトリを削除します。 teeは、画面とファイルに同時に出力します。

非常に大きなファイルがある場合、検証に時間がかかるため、これは適切な方法ではない可能性があることに注意してください。

ソース

1
Gaia