ESXi仮想ディスク(シンプロビジョニングディスクの圧縮)

シンプロビジョニングのディスクの圧縮をしたくなったので、ESXiのディスク周りに関して
調べた内容を記載しておく。

まず、ESXiの仮想ディスクには下記種類がある。
自宅では容量の効率的な利用のためにシンプロを採用している。
開発環境など、性能が不要なシーンではこのような方式が多いのではないかな。
本番環境とかだと、シックが多いかなと思う。

■シンプロビジョニング
 シンディスクは、構築時は最大どこまで拡張できるかを指定してディスクを作成するが、
 実際に利用している分しかサイズを使わない。必要に応じで拡張されていく。
 ちなみにOSとしては、構築時に指定した最大サイズ分が利用可能と見える状態になる。

 例として、シンディスク300GBの仮想マシンを作成した場合。
 OSをインストールした直後、15GB利用していたとすると、シンディスク(VMDKファイル)の
 実際のサイズも15GB程度となる。しかしOSからは300GBのHDDを積んでいるようにみえる。

 OSからI/Oが発生しコミットされるまでに、必要となる領域に0を書き込む。(スパースファイル)
 このタイミングで、VMDKファイルのサイズが増加される。
 一度拡張したVMDKファイルは、減少することはない。

■シックプロビジョニング(Lazy Zeroed)
 シックプロビジョニングは、シンプロと違い、あらかじめ指定したサイズを確保する方法。
 とはいえ、確保した後の挙動で2種類がある。

 VMDKファイルのサイズは仮想ディスクのサイズと同様になる。
 ファイル内で初めてI/Oが行われた際に、0が書き込まれる。
(つまり利用されるまで、初期化されない)

■シックプロビジョニング(Eager Zeroed)
 もう一つのシック。この方式こそが本当のシックというべきともいわれる。
 VMDKファイルのサイズが仮想ディスクのサイズと同様になるのは同じで、
 初期の段階で、全ブロックを0で初期化する。

 つまり、I/Oのたびに0を書き込む必要がなくなるので、
I/Oレイテンシが若干減るとも言われている。
 ちなみにStorage vMotionを利用すれば、上記3種類の形式を変換可能。

■シンプロ ディスクの圧縮
 シンプロで一度拡張されたVMDKファイルは自動では縮小されない。
 その縮小を実施するには、以下の方法が存在する。

 ・sdeleteコマンドを利用して、不要な領域を0クリアする。
  ※ちなみにSdeleteで0クリアするということは、0書き込みをするということなので注意。
   VMDKのサイズが大きくなりますよ。
 ・VMDKの圧縮コマンドを実行する(0クリアされた領域をパージできる)

 ■SDelete(Windowsならね。Linuxはddとかでできるんじゃないかな。うん)
  sdelete.exe -z D:

Sysinternals: SDelete (ja-JP) - TechNet Articles - United States (English) - TechNet Wiki

SDelete

■VMDK圧縮
  vmkfstool -K XXXXX.vmdk

■Tips
 ■fsutil
  指定したサイズのファイルを瞬間的に作成できるコマンド
  ちなみに、ちょっと特殊な方法でファイルを作成している。(作成されたと見せかけている)
  ・NTFS上、領域を確保したとする。
  ・初期化をしない。ファイルフォーマット上利用しているよとしただけ。
   ※つまりVMDKのサイズが増えない。


参考文献:マスタリングVMware vSphere 5.5www.amazon.co.jp

2015/11/29 etsubo