VMWare ディスクイメージが圧縮されないときの対応方法
VMWare のディスクイメージのサイズは、Gest OS 上のディスクサイズと異なる。
基本的には、Gest OS 上で実際に使用されているサイズに圧縮された形でホスト OS 上に保持される。
しかし、 Gest OS 上でファイル作成、削除を繰り返していると、 Gest OS 上での使用サイズよりも、 ホスト OS 上でのディスクイメージサイズがかなり大きくなっていることがある。
このような状態になった時に、ホスト OS 上のディスクイメージサイズを、 Gest OS 上での使用サイズ程度に削減するツール(vmware-toolbox-cmd)が vmware から提供されている。
通常は、この vmware-toolbox-cmd を使うことで圧縮されるはずなのだが、 自分の環境では全くサイズが変わらなかった。
いくつか試した結果、削減出来た方法をメモしておく。
Gest OS 上でのディスクのクローン
今回実施した方法は Gest OS 上でのディスクのクローンを作成することだ。
ある意味分かりきった方法かもしれない。
ただ、クローン作成の方法はファイル単位のコピーではなく、 dd コマンドによるクローン作成 で上手くいった、 ということは意外と言えるんじゃないだろうか?
ファイル単位のコピーだと、コピーにかなり時間がかかると思うが、 dd コマンドで済んだので、10 GB 近いコピーも比較的短時間でコピーが出来た。
dd コマンドは、特に何か特別なオプションを付けて実行したのではなく、 普通に実行しただけだ。
念の為、作業手順をまとめておく。
作業手順
- クローン先の空のディスクイメージを作成する
- ディスクイメージを VMWare に登録する
- Gest OS を起動する
- vmware-toolbox-cmd を使って圧縮
vmware-toolbox-cmd disk shrinkonly
- Gest OS 上での圧縮対象ディスクと、クローン先のデバイス名をメモる
- dd コマンドでクローン作成
dd if=/dev/圧縮対象 of=/dev/クローン先 bs=1M
- ここで指定するドライブは、パーティションではなくドライブ全体を指定すること。
- Gest OS を shutdown
- ここでクローン先のディスクイメージを見て、 Gest OS 上の使用量とほぼ同じサイズに削減されていることを確認する。 もしも削減されていない場合、これ以降の作業には意味はない。
- 圧縮対象ディスクイメージを VMWare から除外し、
代わりにクローンしたイメージを登録する。
- この時クローンイメージを割り付けるハードウェアの ID などが、 元の圧縮対象ディスクイメージと同じになるように登録する。
- Gest OS を起動する。
以上の手順により、サイズが圧縮されたクローンのイメージで運用できる。