効率的な再同期

効率的な再同期

5年が過ぎた今この問題rsyncもともと誰かが次のことを行う方法があるかどうか尋ねました。

  • 同じ時間、同じサイズ►ファイルをスキップ(送信なし、チェックサムなし)
  • さまざまなサイズ►ファイル転送(チェックサムなし)
  • 他の時間と同じサイズ ► チェックサムの実行 ► チェックサムが異なる場合にのみ送信

私の場合、複数のオペレーティングシステムからアクセスできるネットワーク共有があります(1つはUTCを使用し、もう1つはRTCを使用します。どちらのOSも管理者/ルートアクセス権がないため変更できません)。 1つのオペレーティングシステムでファイルを変更すると、ファイルを検索するオペレーティングシステムによっては、「実際の」時間より数時間前後になるように時間が変更されます。ファイルを変更すると、タイムスタンプが「間違っています」。

答え1

一方では、関連する問題は非常に混乱しています。 9mjbの答えが正しいです。

一方、ネットワークファイルシステムのローカルインストールでrsyncを使用している場合は、ファイル全体をダウンロードしないとリモートファイルをチェックサムできません。したがって、ここでは遅い領域に入ります。使用可能なネットワーク帯域幅がディスク速度より低いと仮定します。

しかし、私はまた、あなたが時間について説明したいことを理解していません。これを使用すると、-aソースシステムから正確な時刻を送信する必要があります。これを使用しないと、-aソースファイルシステムの元の時刻は転送されないため、とにかく時間は後続の転送と正確に一致しません。その動作が望ましくないように聞こえますが、:-)-uなしで行うことができます-u


rsyncデフォルトでは有効になっています。 (トレードオフは、「時間とサイズが一致するとファイルが異なる可能性が低すぎるため、転送しない危険があります」)。

[同期]は、元のファイルと宛先にある既存のファイルの差だけを転送してネットワークに転送されるデータ量を減らすデルタ転送アルゴリズムとして知られています。 Rsyncはバックアップとミラーリングに広く使用され、日常的な使用のための拡張コピーコマンドとして使用されます。

Rsyncは、サイズまたは最後の変更時間が変更されたファイルを検索する「クイックチェック」アルゴリズム(デフォルト)を使用して、転送する必要があるファイルを見つけます。

理解すべき重要な点は、rsyncデルタ転送アルゴリズムと「クイックチェック」が別々であることです。

あなたが望まない行動のように聞こえます--checksum--checksum「クイックチェック」セクションを無効にします。この場合、使用しないでください--checksum

-c、--チェック島

これは、rsyncがファイルが変更されたかどうかを確認する方法を変更します。このオプションがない場合、rsync は「クイックチェック」(デフォルト)を使用して、送信者と受信者の間の各ファイルサイズと最後の変更時刻が一致することを確認します。このオプションは、各ファイルの128ビットチェックサムを一致するサイズと比較するようにこの設定を変更します。チェックサムを作成することは、両当事者が転送中のファイルのすべてのデータを読み取るために多くのディスクI / Oを消費することを意味します(変更されたファイルを転送するときに読み取りが実行される前に)、作業が大幅に遅くなる可能性があります。

送信者は、利用可能なファイルのリストを作成するためにファイルシステムチェックを実行すると、チェックサムを生成します。受信者は、変更されたファイルを検索しながらチェックサムを生成し、その送信者のファイルと同じサイズのファイルをチェックサムします。転送用にサイズまたはチェックサムが変更されたファイルを選択します。

rsync は、ファイルの転送時に生成されたファイルの全チェックサムをチェックし、送信された各ファイルが受信側で正しく再構成されていることを常に確認しますが、自動転送後の確認はこのオプションとは無関係です。転送前に「このファイルを更新する必要がありますか?」

答え2

驚くべきことに、組み込みのrsyncオプションを使用すると、これは不可能に見えます!

これはうまくいくかもしれません:

rsync -an --info=name src dest \
    | rsync -an --info=name --checksum --files-from - src dest

説明する:

最初のrsyncコマンドは、デフォルトのrsyncモードを使用して時間とサイズを確認します。時間やサイズの異なるディレクトリまたはファイル名を出力します。 -n フラグのためファイルは転送されません。

2番目のrsyncコマンドは、最初のrsyncから時間またはサイズが変更されたファイルのリストを取得し、--checksumパラメータを使用してそのファイルに対してrsyncを再実行します。

2 番目のコマンドには、テスト実行モードを示す -n があるため、ファイル名のみが印刷されます。実際にファイルを転送するには、2番目のコマンドから-nを削除します。

関連情報