小さな変更で1つの大きなファイルをバックアップする方法は?


9

一連のファイル(それぞれ数GBのサイズ)およびそれぞれが毎日少しずつ(最後に追加される情報だけでなく、ランダムな場所で)変更される場合、どのように効率的にコピーできますか?つまり、ファイル全体ではなく、変更された部分のみが更新されるという意味です。これは、あちこちにいくつかのKBをコピーするか、一部のGBをコピーするかの違いを意味します。


バイナリ差分?私はそれがことだと思いますが、私は考えていないdiffそれを行います

@cat:diff違いを報告できるかもしれませんが、ここで問題は小さな違いをコピーすることです。
Quora Feansは、2016

まあ、私はただ差分をコピーすることを考えていrsyncました

回答:


25

rsyncプログラムがあることを正確に行います。manページから:

これは、デルタ転送アルゴリズムで有名です。これは、ソースファイルと宛先の既存のファイルの違いのみを送信することにより、ネットワーク経由で送信されるデータの量を削減します。Rsyncは、バックアップとミラーリング、および日常的に使用するための改善されたコピーコマンドとして広く使用されています。


実際、この回答を書き込んでいる間、rsyncは実際に実行されており、このマシン上のすべてを(zfsを使用して)ファイルサーバーにバックアップしています。
hlovdal 2016

バックアップの目的で、私はrdiff-backup(nongnu.org/rdiff-backup)をお勧めします。私は数年前から4つの異なるマシンをバックアップするためにそれを使用していますが、良い結果が得られています。
Thomas Padron-McCarthy

ウィキペディアには、ローリングチェックサムを使用してファイルチャンク比較する方法rsyncについての適切な説明があります
Adam Katz

内部のいくつかのファイルのみが変更された古いVMのハードディスクイメージにrsyncを「元に戻す」ように試みましたが、残念ながらrsyncはファイル全体を再度コピーしているようです(約3分で約300MB /秒の書き込み)。rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de 2018年

8

おそらく、最新の重複排除バックアッププログラムが必要です。BorgBackupをチェックしてください

これにより、大容量ファイルの各バージョンの複数のバックアップが作成されますが、異なるバージョン間で共通のコンテンツが共有されるため、大容量ファイルの特定のバージョンに使用される合計容量は、単一のファイルの合計ディスク容量よりもわずかに多くなりますバージョン、異なるバージョンがわずかに異なると仮定します。


5

何らかの方法でIO制限がある場合は、何をすべきかなどのファイルの違いを見つける必要なく、増分バックアップを直接サポートするBTRFSやZFSなどのファイルシステムを使用しますrsync

使用rsyncは遅くなり、IO集約型になります。

ファイルへの変更を書き込んでいるアプリケーションが何らかの方法でIO制限されている場合、使用するrsyncとアプリケーションからかなりのIOサイクルが奪われるため、ファイルが存在するのはそのためです。また、バックアッププロセスまたはシステムがIOに制限されている場合rsyncは、利用可能なバックアップ帯域幅からIOサイクルが奪われます。

グーグルだけで「rsyncは遅い」。例: nfs-shareからローカルディレクトリにファイルをコピーする際のcpと比較して、rsyncは非常に遅い(係数8〜10)


これには、すべてのメタデータをチェックせずに保持し、バックアップコピーが元のコピーと同じくらい優れていることを常に知っているという追加の利点があります。rsyncは一般的な使用には問題ありませんが、最新のファイルシステムがある場合、その利点を無視するのは愚かです。
user121391 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.