バックアップには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
バックアップの一方または両方に仮想マシンイメージをマウントし、2つのマウントrsync
ポイント間で使用することを検討することもできます。
このブログ.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つは完全に互換性がありません)。