VMware vSphere Hypervisor 6.5(ESXi)の仮想HDDが容量不足により仮想マシンが停止(シンプロビジョニングの問題)

sinprovisioning_1.png

VMware vSphere Hypervisor 6.5(ESXi)をVMware Remote Console で利用していたのですが見慣れないメッセージ「仮想ディスク /vmfs/volumes/[略] のための空き容量がありません。」というものが表示され、このメッセージが表示されているときは、仮想マシン自体が停止した状態になるという現象が発生しました。

なお、キャンセルを押すと仮想マシン自体が強制シャットダウンされます。

再試行を押しても、1秒おきにメッセージが表示され使い物にならなくなりました。

原因

管理人は仮想マシンの Windows7 を NAS のような使い方をしています。

その過程で、データストアの容量を使い果たしこのような現象が起きたことが判明。

VMware ESXi の WebConsole のストレージから見ても、空き容量が0になっているのを確認。

仮想HDDはシンプロビジョニングという、容量に応じて自動的にファイルサイズを拡張してくれる仕組みを取っているのですが、これが仇となりました。

sinprovisioning_2.png

対処

まず、仮想ディスクのサイズを SSH から見てみます。

該当のファイルは、VMware Remote Console からわかりますので、cd で移動するか、そのまま ls コマンドで見えます。

sinprovisioning_3.png

Windows7_2-flat.vmdk というファイルが、2.7Tになっています。

Windows側からいらないファイルを削除して、2TBの空き容量を確保。

このあと、空き容量を0で埋めるのですが、選択肢は3つ。

1、SDelete という Microsoft が提供している空き領域を0で埋めるプログラムを使用。

使い方: sdelete64.exe -z [ドライブ名:]

2、Windows付属のcipherというコマンドで0埋めする(この方式はあまり使えないかも)

→0書き込みのあと、FF書き込み、ランダム書き込みをするので0書き込みのあと強制終了する必要があり。

3、Windows付属のfsutil で0で埋まったファイルを作成、削除する

今回はこの3番の方式でテストしてみました。

まずはコマンドプロンプトを管理人権限で実行します。

コマンドプロンプトが開いたら、「fsutil file createnew [ドライブ名:\ファイル名] [サイズ]」を入力してダミーファイルを作成します。

サイズは、1000Byteを1024で計算し、1MBの場合は1024*1024、10Gの場合は10*1024*1024*1024、1TB(1000GB)の場合は、1000*1024*1024*1024で計算した値を入力します。

sinprovisioning_4.png

すぐにファイルが作成されるのでdelコマンドですぐ消します。

sinprovisioning_5.png

ここから、ESXiマシンにSSHでログインし、vmkfstools というコマンドを使用し
0で埋められている部分を開放します。

sinprovisioning_6.png

cd [該当のボリューム]
vmkfstools --punchzero Windows7_2.vmdk

vmdkファイルは、-flat がついていないものを選択します。(flatがついている方を指定するとエラーが出ます)

容量によりかかる時間はかわりますが、2.7TBのサイズの場合、4〜5時間はかかります。

sinprovisioning_7.png

0埋めしたところを開放したところ、174GBの空き容量ができ、仮想マシンの操作が問題なく再開できました。

しかし、Windows 側から2TBの容量を削除したのに、空いたのは174GBだけなので、さらに SDelete を使い空き容量を0埋めし、もう一度 vmkfstools で圧縮すると更に解放されると思います。

なお、これは、シンプロビジョニングで起こる問題なので、予めデータの容量使用量が多いというのがわかっていた場合は、シックプロビジョニングを指定しておくと良いです。

なお、 vmkfstools で圧縮(0埋め部分を削除)している間は、仮想マシンは稼働状態にはできず、使用できません。

※2018年10月6日追記

SDelete を用いて、空き容量を更に拡大してみました。

Desktopに保存したSDelete.exeを -z [ドライブ名:] で起動します。(管理者プロンプトのほうが良いと思います)

thinprovisioning_1.png

99%でとまり、ずっと変化がなかったので強制終了。

thinprovisioning_2.png

ターゲットのFドライブは1.54TBの空き容量となりました。

thinprovisioning_4.png

ESXiのマシンにSSHで接続し、vmkfstools を -Kオプション付きで起動します。

4〜5時間かかりますが、放置しその後、ESXi の管理画面から空き容量を確認してみます。

thinprovisioning_3.png

空き容量が、1.55TBになっています。