※MacOSXを対象とした記事
仮想マシンのディスクイメージは巨大なバイナリデータである為、差分バップアップが取りにくい。少しでも変更があると全く異なるデータとして認識されてしまう為、TimeMachineバックアップの容量を無駄に消費してしまう。
仮想マシンの状態が変わる度、何十GBもの容量をフルで消費してしまうのはかなり非効率だ。だからといってバックアップはしたい。そこで、VMWareFusionとVirtualBoxの2つのソフトで、バックアップ容量を削減する為の方法を調べた。
先に結論を言うと、Fusionユーザーは「AutoProtect」機能を。VirtualBoxユーザはOSXの「スパース・バンドル」ディスクイメージ内に仮想マシンを保存するのがてっとりばやい解決策だと思う。
方法1. スナップショット機能を使用する
いずれの仮想環境にも、スナップショットと呼ばれる仮想マシンの状態を保存・ロールバックできる機能がある。この機能を使うと
- スナップショットを撮った瞬間のディスクイメージを保存し、読み取り専用にする
- スナップショット作成以降の変更は、新しく、容量の小さい差分ファイルに追記する
といった状態になる為、TimeMachineは「2」以後の新しい差分だけをバックアップしてくれる。
ただし、スナップショット以降の変更が積み重なるほど差分ファイルの容量は肥大化していく。いずれは巨大化してしまう為、定期的にスナップショットを作成する必要がある。
VMwareFusionの場合は「AutoProtect」
VMwareFusionの場合は「AutoProtect」機能によって定期的にスナップショットを作成することができる。操作はGUIからできるのでカンタン。Fusionを使用しているユーザーはこの方法がおすすめできる。
VMwareFusionのバックアップ方法は、TimeMachineとAutoProtectで完璧!
VirtualBoxの場合はシェルスクリプト
VirtualBoxには今のところ自動でスナップショットを撮る機能は用意されていない。その代わりコマンドラインからの操作が可能な為、VBoxManageのsnapshotコマンドを使用するか、Vagrantのvagrant-vbox-snapshotプラグインを使い、OSXのLaunchdなどから定時処理する方法が考えられる。
- VBoxManage snapshotコマンド
- Vagrantにスナップショット機能を加えるplugin、vagrant-vbox-snapshotの紹介
- OS X の Launchd を cron の替わりに利用する
コマンドラインを使う方法は慣れた人なら簡単で自由に作れるかもしれないが、筆者は面倒なので後述の方法2を採用している。
方法2. SparseBundleディスクイメージに保存する
MacOSXのディスクイメージファイル(拡張子dmg)にはいくつかフォーマットがあるが、スパース・バンドル形式のディスクイメージを使うと、変更を細かい差分ファイルに分割して保存してくれる。このディスクイメージ内に仮想マシンのファイルを全て放り込んでしまえば仮想化ソフト側で特に設定をする必要はない。
Mac - Sparse Bundle Image ノススメ
使い方は、「ディスクユーティリティ」で適当なサイズのスパース・バンドル形式のイメージを作成・マウントし、VirtualBoxの環境設定から仮想マシンの保存先に設定してしまえば良い。ログイン項目に追加しておけばさらに便利になる。