お知らせ

  • シスキュー技術部

SparseBundle上の仮想マシンイメージの拡張

noimage

SparseBundle上の仮想マシンイメージの拡張

以前SparseBundleDiskImage上にVMWareFusionの仮想マシンイメージを作成する記事を投稿しました。 MacでSparseBundleImageを利用した仮想マシンバックアップ これでTimeMachineで仮想マシンの世代管理が行われずに、バックアップハードディスクを過剰に使わなくてよくなりました。 これでVMWare FusionでWindowsを常用する問題はかなり小さくなりました。 前回の記事ではスパースバンドルディスクは、60GBを割り当てましたが、Windows8を常用するにあたって、不足する場合が生じます。 ここでスパースバンドルディスクのの容量を増加し、Windows8の仮想HDDを拡張してみます。 スパースバンドルディスクの容量増加 スパースバンドルディスクの増量はディスクユーティリティーで行います。 仮想マシンを停止し、一度ディスクをアンマウントします。 アンマウントしたうえで、スパースバンドルディスクを選択し、イメージのサイズを変更をクリックします。 ここでは110GBに変更しています。 ここで110GBに変更を行ったとしても、すぐさまハードディスク上に110GBの容量が確保されるわけではなく、使用量に応じて動的に増加していきます このままではディスクのサイズは変わっても、パーティションサイズが変更されないので、ディスクイメージをマウントします。 パーティションイメージの右下斜線部分をドラッグし、パーティションサイズをディスクイメージに合わせます。 これでマウントされるディスクの最大容量を変更できます。 この操作によって、パーティション内の内容が失われることはありません。 ここでパーティションをクリックします。 仮想マシンのハードディスク増加 ここで終了している仮想マシンのハードディスクサイズを設定から拡張しようとすると、 「選択された作業を行うためにはファイルシステムに十分な領域がありません」 というエラーが出ます これは仮想マシンの格納されているディスクイメージ内で、仮想マシンイメージの複製を作成して、領域を拡張するためのようです。 そのため、110GBのディスクイメージ内で、60GBの仮想マシンのHDD増加を行う作業はできないということです。 そのため、一度スパースバンドルディスクイメージ内から、仮想マシンファイルをMac上のHDDに移動します。 この作業中、タイムマシンバックアップは一度オフにしておくことをお勧めします。 Mac上のHDDでVMWareFusionの設定から、ハードディスクのディスクサイズを変更します。 ここでMac上のHDDに十分な空き容量があれば、HDDの拡張が行われます。 それなりに時間がかかりますので、時間があるときに行ってください。 増量が終われば、再びスパースバンドルディスクイメージ内に仮想マシンファイルを書き戻します。 Windwos8を起動すると、自動的にパーティションの割当容量が増加していました。 管理ツールからコンピュータの管理、ディスクの管理を行って、領域の拡張を行う必要はありませんでした。 これはおそらくVMWareFusion5の機能だろうと思われますが、非常に便利でした。 スパースバンドルディスクイメージは大きく作っておく スパースバンドルディスクは大きめに設定しておいても、内容量の増加によって動的に拡大していきますので、大きめにとっておいても、デメリットはありません。 使い切ってしまえば、また拡張する必要がありますが、ディスクイメージ内のデータを失わずに、パーティションを拡張できるのは便利です。 複数の仮想マシンを格納するなどのために、大きめのスパースバンドルディスクを作成しておくと、後々便利になるかもしれません。

  • シスキュー技術部

MacでSparseBundleImageを利用した仮想マシンバックアップ

noimage

MacでSparseBundleImageを利用した仮想マシンバックアップ

前回、iMacでWindows8を実際に使ってみるために、VMWareFusion5を使って仮想マシンとしてインストールしました。 今回、仮想マシンを効率よくバックアップするために、少し複雑な手順を踏んでいきます。 特に複雑なことをしなくても、一般的なインストール方法でも十分利用できます。 ただTimeMachineで仮想マシンをバックアップすると、毎回かなり大きな転送量になり、TimeMachine用のドライブの使用効率が悪くなるため、別の手段でバックアップを試みることとします。 この手順の中でターミナルでコマンドを入力する必要があります。 仮想マシンのバックアップについて 仮想マシンファイル.vmwarevmは一つのファイルとして見えますが、内部でディレクトリの構造となっています。パッケージの内容を表示とすると、これを見ることができます。 仮想マシンファイルの内部では、仮想ハードディスク.vmdkがおよそ2GB単位で分割されています。 仮想マシン内に変更が加えられた場合は、このvmdkファイル単位でファイルの変更が行われます。 TimeMachineでバックアップを行う場合、仮想ハードディスク単位で、変更のあったファイルはすべて履歴管理されますので、TimeMachineへ書き込まれる量は数GB単位となります。 単純に仮想マシンを起動して、シャットダウンするだけでも、TimeMachineには数GBからの差分の書き込みが行われます。 そのため、Macで仮想マシンを利用されている方で、TimeMachineから仮想マシンフォルダを除外ファイルとされている方も多いです。 そうなると、TimeMachineからの復元を行う際に、仮想マシンが一切復元されず、仮想マシンに保存されていたデータを含めすべてを失ってしまうことになります。 今回、仮想マシンファイルはTimeMachineのバックアップからは除外し、別の仕組みでバックアップを行うこととします。 スパースバンドルディスクの作成 スパースバンドルディスク(Sparse Bundle Disk Image)とは、Mac OSの上で一つのディスクイメージとして認識されますが、内部では8MBの小さなファイルに分割されたディレクトリ構造のものをいいます。仮想ディスクの一つです。 読み書きなどは、一つのドライブに対して行うのと同一で、処理としても大きな負担になることはありません。 このスパースバンドルディスク内に格納されたファイルが変更された場合、小さなファイル単位で変更のあった部分だけ、更新されます。 これに今回仮想マシンをインストールします。 DiskUtilityで新規イメージを作成し、名前や、フォーマット、サイズなどを設定します。 今回は60GBの容量をあらかじめ指定し、フォーマットにはMac標準のMacOS拡張(ジャーナリング)を選択。イメージフォーマットはスパースバンドル・ディスクイメージを選択すれば、スパースバンドルディスクが作成されます。 60GBの容量を設定すると、即時60GBの容量が確保されるのではなく、必要な分だけ確保されることになります。 またイメージ作成後の容量の増加なども可能です。 このようなファイルが出来上がります。これをダブルクリックすることで、ディスクイメージとしてマウントされます。 このマウントされたディスクに仮想マシンを作成します。 Windows8のインストール 前回の手順と同じですが、VMWareのセットアップの際に下記の画面で設定を変更する必要があります。 設定のカスタマイズで、仮想マシンの保存場所をスパースバンドルディスクイメージ内に設定します。 rsyncによる仮想マシンのバックアップ まずTimeMachineのバックアップ対象からスパースバンドルディスクイメージを除外します。 ターミナルからrsyncコマンドでこれを外付けのハードディスクにバックアップします。 例として、 [bash] rsync -aur --delete --progress "/Users/username/documents/Virtual Machines.localized" /Volumes/HDDNAME/VMWareBackup [/bash] という感じで、ローカルバックアップでは [bash] rsync –aur ––delete -–progress コピー元ディレクトリ コピー先ディレクトリ [/bash] と指定します。 この手順でsparsebundleファイルをバックアップ先のハードディスク内のフォルダに同期するように設定します。 コピーされているファイルが一覧で表示されますが、 Virtual Machines.localized/VirtualMachine.sparsebundle/bands/c27 8388608 100%   10.87MB/s    0:00:00 (xfer#49, to-check=292/3186) このような形で、スパースバンドル内の8MBのファイルがコピーされていることがわかります。 二回目以降の実行からは、変更のあったファイルのみの同期となります。 sent 856838334 bytes  received 2292 bytes  114245416.80 bytes/sec total size is 25043844704  speedup is 29.23 実行結果がこのように表示されますが、トータル25GBの仮想マシンファイルのうち856MBが同期されたことがわかります。 rsyncの自動実行 これをシェルスクリプトにして、ログイン時に自動実行します。 viなどを利用し、先ほどのrsyncコマンドをシェルスクリプトにし、chmodで実行権限を与えます。 [bash] vi vmbackup.sh [/bash] iを押して入力モードにし、 rsync -aur --delete --progress "/Users/username/documents/Virtual Machines.localized" /Volumes/HDDNAME/VMWareBackup のように先ほど成功したrsyncコマンドを貼り付け、[ESC]:wqで保存します。 これに [bash] chmod 755 vmbackup.sh [/bash] として実行権限を与えます。 これをログイン時に自動実行・定期実行するには、plistを作ってlaunchdに登録する必要があります。 Linuxなどではcronを利用しますが、OS Xではlaunchdを利用することが推奨されています。 launchdに登録するにはXMLを書く必要があり、思い通りに動作するXMLを作成するのが手間な場合は、Lingon3をMacAppStoreから購入して使用するのが便利です。 https://itunes.apple.com/jp/app/lingon-3/id450201424?mt=12 Lingon3を利用すれば、簡単な操作でplistファイルを作成し、launchdに登録できます。高価なアプリではありませんので、便利さから考えれば、十分な価値はあります。 Lingon3を起動し、NewJobをクリックし、ファイル名をlocalhost.vmbackupといったplist名を設定します。 Whatに先ほど作成したをシェルスクリプトを指定し、whenにAt login and at loadにチェックを入れます。 Every 1 Hoursなどとしておくと、一時間おきに実行されます。 Save&Loadを押し、plistをlaunchdに登録します。 あとは、スパースバンドルディスクをログイン時にマウントする手順です。 ログイン時にスパースバンドルを自動マウントする スパースバンドルディスクをマウントするためのターミナルでのコマンドは、 [bash] hdiutil attach sparsebundleファイル [/bash] になります。 これをrsync同様にシェルスクリプトにし、実行権限を与えます。 Lingon3で同様にplistを作成し、Login時に実行するように設定します。 これで仮想マシンの作成とバックアップの一通りの設定は終わりです。 まとめ かなり長いエントリとなりましたが、Macなりの機能を活かした方法となりました。 仮想マシンファイルも履歴管理したい場合は、TimeMachineを利用するのが手っ取り早いですが、仮想マシンを使っている間、かなりのサイズのTimeMachineドライブへの書き込みが発生してしまいます。 ユーザーファイルをホストOSの共有フォルダに持たせ、そこをTimeMachine管理とすれば、仮想マシンに何らかの障害が発生しても、再インストールの手間のみと割り切って利用するのも一つの方法です。 単純なバックアップとしては、.vmwarevmファイルを外部ハードディスクなど日に一度でもコピーしておけば、前の日までのバックアップは確保できます。 実用的なWindows仮想マシンは、Officeスイートやアップデートなどで、どうしても数十GBからの容量が必要となりますので、今回Windows8をそれなりに使っていくうえで、これだけ下準備を行ってみました。 まだこれで長期間実用したわけではないので、どのような問題が起こるのか、どう使っていけばよいか、未知数な部分はありますが、今後またBlogなどで報告したいと思います。 (2013/3/29更新) 使用しているうちに容量が足りなくなったため、 SparseBundle上の仮想マシンイメージの拡張 という記事を投稿しました。