大きなファイルのうち、小さな部分だけが変更された部分を「ハードリンク」する

大きなファイルのうち、小さな部分だけが変更された部分を「ハードリンク」する

バックアップには rsync を使用します。

rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP

この方法では、ハードリンクを使用することでスペースを節約できます。

常に変更される巨大なファイル (仮想マシン イメージ) をバックアップする必要がある場合に問題が発生します。

画像全体ではなく、変更された部分だけをハードリンクすることは可能ですか? これを処理できるツールはありますか?

答え1

ここでできることはいくつかあります。ハードリンクは完全なファイルを指すだけなので、実際にはどれもハードリンクを使用していないことに注意してくださいbtrfs。ファイルシステムを使用すると、非常に便利な可能性が広がります。btrfs現在(最新バージョンはv3.13)はまだ実験段階です。ただし、(コピーオンライト) 機能は、このような場合に最適です (もちろん、同じファイルシステムにバックアップを保存できることが条件です)。 にbtrfsマウントされたファイルシステムを考えてみましょう。次のようにして/mnt、ファイルシステム全体のアトミック スナップショットを作成できます。

btrfs subvolume snapshot /mnt /mnt/snapshot

部分的なスナップショットを可能にするには、バックアップするファイルをsubvolumeディレクトリではなく 内に配置する必要があります。例:

btrfs subvolume create /mnt/subvol
mv stuff /mnt/subvol
btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot

を使用する以外にbtfrs、バックアップの片側または両側に仮想マシン イメージをマウントし、rsync2 つのマウント ポイント間で を使用することも検討できます。

このブログ.vdiを使用して Virtual Box イメージをマウントする方法を示しますqemu-utils。root としてのコマンド (未テスト):

modprobe nbd
qemu-nbd -c /dev/nbd0 <vdi-file>
mount /dev/nbd0p1 /mnt
...
umount /mnt
qemu-nbd -d /dev/nbd0

最後に、役に立つかもしれない最も単純なアプローチは、--inplaceのオプションですrsync。マニュアルページから引用します。

--inplace
          This option changes how rsync transfers a file when its data needs to
          be updated: instead of the default method of creating a new copy of the
          file and moving it into place when it is complete, rsync instead writes
          the updated data directly to the destination file.
...
          This option is useful for transferring large files with block-based
          changes or appended data, and also on systems that are disk bound, not
          network bound.

ここでの問題は、もちろん、これを と組み合わせて使用​​してもメリットがないことです--link-dest(rsyncバージョン <2.6.4 では、2 つはまったく互換性がありません)。ファイルのコピーは、宛先に作成する必要があるためです。

関連情報