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