圧縮され同期可能なディレクトリイメージを作成する正しい方法は何ですか?

圧縮され同期可能なディレクトリイメージを作成する正しい方法は何ですか?

ソースとリモートのターゲットで再同期できるように、いくつかのディレクトリの圧縮イメージを作成したいと思います。

次の2つの手順で非効率的に実行できます。

rsync -a /source/ /compressed-mirror/
gzip --recursive --rsyncable --force /compressed-mirror/
# later: rsync -a /compressed-mirror/ remote:/another-compressed-mirror/

問題は、ミラーを更新するために最初のrsyncを再実行すると、ソースファイルの一部だけが変更された場合でも、すべてのソースファイルをコピーしてgzipする必要があることです。

質問:各アップデートに必要なデータ転送量とハードドライブの使用量を最小限に抑える方法はありますか?

メモ:

  • 私は圧縮のためにgzipを使用することを主張しませんでした。私は圧縮されたファイルの再同期を可能にするので、gzipを選択しました。

  • ローカル圧縮イメージの目的は、ソースコンピュータ(ノートブック)のインターネット接続と電源状態が不安定であるため、リモートイメージとの再同期に必要な「ネットワーク実行」時間を最小限に抑えることです。ローカルイメージの特定の部分は、リモートイメージの rsync の前に暗号化されます。その後、リモートイメージのバージョンはrsnapshotを使用して管理され、より信頼性の高いインターネット接続を介して他のリモートサーバーにアップロードされます。

更新/考え:

  • ファイルシステム圧縮を使用します(casの説明を参照)。しかし、これはrsyncがファイルをリモートサーバーに転送するときにファイルを再圧縮し、重複するように見えます。
  • rsync ディレクトリを非圧縮のままにします。変更されたファイルはrsyncが更新されるたびに記録されます。変更されたファイルごとに、圧縮イメージに別々の圧縮コピーを作成(または削除)します。ただし、次のアイデアは同じ作業をより効率的に実行できます。
  • ソースのファイルパスとファイルサイズ(またはチェックサム)のリストを保持します。更新するたびに新しいリストを作成し、以前のリストと比較してください。変更された各ファイルについてgzip < source/path/file > mirror/path/file.gz。これがこれまでで最も効果的な解決策のようです。

ベストアンサー1

要件を処理する最も効率的な方法は、中間画像ターゲットを圧縮しないことです。これにより、rsync変更されたデータのみをデルタアルゴリズムを使用してローカルホストとリモートホスト間で転送できます。 (ただし、同じホスト上の2つのディレクトリ間コピーではデルタアルゴリズムは適用されません。)

# Any changed files will be copied completely, even if only one byte changed
rsync -a --delete /source/ /mirror/

# Only copy changed parts of changed files
rsync -az --delete /mirror/ remote:/mirror/

ローカルハードドライブと中間ネットワークのヒットの面で最も効率的な解決策は、ローカルミラーを完全に廃棄し、ソースからリモートターゲットに直接コピーすることです。

# Only copy changed parts of changed files
rsync -az --delete /source/ remote:/mirror/

おすすめ記事