VMWare ディスクイメージが圧縮されないときの対応方法

Page content

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 を起動する。

以上の手順により、サイズが圧縮されたクローンのイメージで運用できる。