Vmware ESXi でVMホストのディスクが圧迫されてインスタンスが落ちる問題(原因と対策)

背景

バックアップ用DBを作るために、でかいディスクを持つ物理サーバの上にVmware ESXiをたてた。 DBに他のSlaveからデータをscpしてみたら途中で突然インスタンスが落ちた。起動もスナップショットの操作も出来ない状態。 インスタンスへのディスク割り当ては200G。メモリは8G割り当て。 scpしたファイルは40G程度で、開きVMホストの元の空き容量は30G程度だった。

原因

datastoreを更新してみると空きがほぼ0になっていた。 詳細なファイルを見てみると以下のようなファイルが大きかった。(ホスト名を hostnameとする)

  • hostname.vmdk
  • hostname-49271ad6.vswp
    • 8G。メモリオーバーコミットをする設定だと、物理マシンのメモリと直接マッピングされずにインスタンスのメモリはディスクに書かれる見たい。
  • hostname-000001.vmdk, hostname-000002.vmdk
    • 合計で27G
    • 今回の犯人。スナップショットをとった後にインスタンス内で更新があると、その差分を出すためにredoログ(差分)としてここに書かれる。
  • vmware-1.log
    • 合計で数M。今回の問題とは無関係なので略

対策

  • メモリオーバーコミットをさせない。インスタンスのメモリ設定で「すべてのゲストメモリを予約(すべてロック)」設定を入れる。
  • スナップショットを全部消す。そうするとredoログが吐かれないのでVMホストのディスク圧迫が起こらない。

コメント

スナップショットが取れないのは不便だが、物理マシンと同じだと思えばまあよし。 ある程度構築して本番投入するまではスナップショットを使って、ほとんど変更が無くなったらスナップショットを全部消すなどの運用でカバーできそう。