ESXi の仮想ディスクを縮小する

VMware でシンプロビジョニングで確保している VMDK について、使わないときは VMDK は小さいままで、使えばそれだけ VMDK は大きくなる。ところが VMDK のなかでファイルを消しても VMDK は小さくならない。必ず一番後ろから消えていくわけじゃないからね。

シンプロビジョニングで 10GB 用意した VMDK 内にデータを 10GB 置いたら VMDK は 10GB になる。VMDK 内で 10GB のデータを消したらゲストOSからは空っぽに見えるけど、VMDK は 10GB のまま。一度大きくなった入れ物は縮まないんだ。

でも小さくしたい。そんなとき。

VMware KB: VMware ESX および ESXi の仮想ディスクを拡張、縮小、および圧縮する

 

大半のファイル システムでは、ファイルを削除しても完全には削除されず、単に、ファイル テーブルが変更されるだけです。その場合は、無償の安全なファイル削除ユーティリティ(Eraser や SDelete)を使用して領域をゼロクリアし、ボリューム上の空き領域にゼロを書き込みます。これにより、空き領域のデータが実際にクリアされます。この操作を行って初めて、ディスクを正しく縮小できます。その後、Storage vMotion または vmkfstools -K コマンド(ESXi/ESX 4.1 以降)を使用して、ブロックの回収を実行します。

 

ファイルを消すときに rm コマンドで消さずに、 shred -n0 -z -u filename で消せばファイルが無くなったところは常に0で綺麗な更地になるね。

こんなかんじで、ファイルが無いはずだけど昔のデータが残ってるというようなところを順にゼロで埋めていき、そして Storage vMotion すれば不要なブロックを捨てて必要最小限の VMDK ができあがるというわけです。