VMDK→VDI

年末なので(?)、これまで気になっていたことの解決に挑戦。MacBook 購入を機に、VirtualBox を導入していくつかの OS を仮想環境で使うようにしたのだが、その中で、実機から引っ越した Windows XP のディスクのフォーマットが (VMWare Fusion を経由したせいだったか?) VMDK になってしまっていた。しかも、Writethrough になっているために仮想ディスクの容量 (40GB) がそのままファイルの容量になってしまい、とても邪魔だ。これまでは HDD にもまだ多少余裕があってなんとかなっていたが、仮想環境に導入した OS の数が増えてくるにつれてだんだん厳しくなってきた。この機会にフォーマットを VDI に変更して容量を節約したいところ。
まずは、VMDK から VDI へ変換する方法を調べてみたところ、QEMU に付属している qemu-img というユーティリティで RAW フォーマットに変換し、それから VirtualBox の VBoxManage convertfromraw コマンドで VDI に変換することができることがわかった。試しに、起動ボリュームでないディスクについて行なってみたところ、難なく成功。QEMU をソースからコンパイルしたのと、変換に多少時間がかかったこと以外は特になにごともなく。
次に、起動ボリュームについても同様に変換してみた。すると、変換自体はうまくいったように見えた (ディスクのマウントは問題なく行える) が、変換先のディスクから起動しようとすると黒い画面のままで止まってしまった。ディスクはちゃんと読めているので、起動できるようにしてやればいけそうな気もするが、あれこれ試行錯誤してみるも、解決策は見つけられず。
ここで考え方を変えて、空の同容量の VDI フォーマットのディスクを作ってマウントさせ、EASEUS Partition Master を使って Windows 上でディスクを複製してみることにした。最初、間違ってパーティションだけをコピーしてしまって失敗したが、改めてディスクのコピーを行ない、元のディスクとつなぎかえて (といっても Storage タブのディスクをメニューで選びなおすだけだが) 起動してみると、これまでの失敗が嘘のようにあっさりとうまくいった。無理に変換しようなどと考えずに最初からこうすればよかったのか。
あとは、SDelete を使って未使用領域に 0 を書きこみ、VBoxManage modifyhd <ファイル名> --compact でファイルサイズを小さくする。今回のケースでは、VDI フォーマットのディスクにコピーした時点で 20GB、未使用領域を取り除いた時点で 7.7GB とかなり小くなった。今になって思えば、先に SDelete を行なってからディスクをコピーすればよかったような気もしてきた。もう VMDK フォーマットのファイルはなくなってしまったので同じことをすることはまずないだろうけれど、もし今度その機会があればそうやってみよう。
ついでに Windows 7 RC のディスクも 20GB → 10GB ほどに縮小。もう少し様子を見るために元のファイルを残してあるため、まだディスクの空きは増えていないが (変換作業をするためにある程度整理したため、少し余裕はできた)、近いうちに 50GB くらいの空き容量を手に入れることができそうだ。