元の宛先とリモートの宛先の両方で再びrsyncできるように、いくつかのディレクトリの圧縮ミラーを作成したいと思います。
2つのステップで非効率的に行うことができます。
rsync -a /source/ /compressed-mirror/
gzip --recursive --rsyncable --force /compressed-mirror/
# later: rsync -a /compressed-mirror/ remote:/another-compressed-mirror/
問題は、最初のrsyncを再実行してミラーを更新する場合、変更されたソースファイルが数個しかない場合でも、すべてのソースファイルをもう一度コピーしてgzipする必要があることです。
質問:更新ごとに必要なデータ転送とハードドライブの使用量を最小限に抑える方法はありますか?
メモ:
圧縮のためにgzipにこだわっていません-圧縮ファイルをrsyncできるようにするためだけに選択しました。
ローカル圧縮ミラーの目的は、ソースマシン(ラップトップ)のインターネット接続と電源状態の両方が信頼できないため、リモートミラーに対してrsyncを実行するために必要な「ネットワークの稼働」時間を最小限に抑えることです。ローカルミラーの一部は、リモートミラーへのrsyncの前に暗号化されます。リモートミラーは、rsnapshotでバージョン管理され、より安定したインターネット接続を介して別のリモートサーバーにアップロードされます。
更新/アイデア:
gzip < source/path/file > mirror/path/file.gz
を使用して、最初の圧縮ミラーにgzipされたコピーを個別に作成(または削除)します。これは、これまでのところ最も効率的なソリューションのようです。要件を処理する最も効率的な方法は、中間ミラーターゲットを圧縮しないことです。これにより、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/