こんにちは。
すごく今更感がありますが、ESXi上で動作する仮想マシンの仮想ディスクが
Thin(シンプロビジョニング)で作成されているとき、
使用していない仮想ディスクの領域を縮小させる方法について書きます。
Thin(シンプロビジョニング)の仮想ディスクでは、一度利用した(書き込んだ)領域は、ファイルを削除したあとも、そのまま回収されず、明示的にに回収させることで、
仮想ディスクを縮小させることができます。
ゲストOS上ではファイルを削除したあとも、書き込んだ領域とのひも付け(mappingとか言うみたいですが)を削除しているだけで、実態が残っていることがほとんどです。
残されたデータは他のデータで上書きされるまで、残ってしまうことがほとんどです。
そのため、ゲストOSとして未使用領域となっている部分に ゼロを書き込むことで、
ESXiは、対象の仮想ディスクに使われていない領域があることを認識し、
仮想ディスクサイズを縮小させることができます。
(説明下手ですみません)
順に進めていきます。
まずは現状確認です。
ゲストOSとしてRHELを利用しています。
現在は、root 領域 14% (約3GB)使用していることになっています。
しかし、vSphere Client からESXiホストに接続して、
データストアブラウザを開いて仮想ディスクのサイズを確認すると、13GBくらいあります。
実際の使用量は、ゲストOS上では約3GBで、ESXiからは約13GBくらいですので、
10GBくらいの容量差があります。これは非常にモッタイナイ。
ゲストOSであるRHELからは、ESXiが使っていると思っている領域は、
空き状態になっているように見えているということになります。
そのため、このゲストOSが空いていると思っている領域に ゼロ書き込みを行います。
今回はRHELのゲストOSですので、ddコマンドを使い、
ゼロ書き込みしたファイルがデスクトップに出ています。(オプションで指定したので)
ddコマンド完了後は、ゲストOS側では使用領域が+10GBされています。
ゼロ書きしたファイルが残っているためです。
今回デスクトップにファイルを作成するように指定したので、削除します。
ファイル自体は不要なので削除しています。
データストアブラウザ上でも少し容量は増えていました。
次にESXi 側での操作を実施します。
ESXiにSSH接続して、
/vmfs/volumes/データストア/仮想マシンフォルダ
まで移動します。
-flat.vmdk ファイルが仮想ディスクファイルの実態です。
では、仮想ディスクを縮小させてみましょう。
(あらかじめ仮想マシンは停止しておきましょう)
コマンドを実行します。
> vmkfstools -K ./<仮想マシン名>.vmdk
100%になりました。
ls の結果を見てみましょう。作業前と容量に変化はありません。
仮想ディスクが縮小されました。
縮小後と縮小前を比較します。
【縮小後】
【縮小前】
このように定期的にメンテナンスできる環境であれば、
知らぬ間にデータストアを圧迫していることもあるので、実施頂ければと思います。
以上になります。
【補足】
vmkfstools にはいろいろオプションがあります。
便利なものもあるので、見てみるのもいいかもしれません。
vmkfstools - 仮想ディスクのオプション
vmkfstools は現在ではesxcli コマンドに置き換えられている機能もあります。
たとえば、ESXi 5.1 では vmkfstools -y でUNMAP操作をしますが、
ESXi5.5以降は esxcli storage vmfs unmap を使います。
今回はこのへんで!