【実践】VMwareの仮想ディスクを縮小する

ソフトウエア

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

VMwareでシンプロビジョニングされたディスク量が大きい。小さくするには?

この疑問に回答します。

一度大きくなったディスクは、ずっと大きいままです。縮小するには手動で操作する必要があります。

  • 仮想ディスクのファイルサイズが違う理由
  • シンプロビジョニングされた仮想ディスクを縮小する
  • 仮想ディスクの空き領域を「0」で埋める
  • 仮想ディスクを収縮

仮想ディスクのファイルサイズが違う理由

OSはファイルを削除したあとも、書き込んだ領域のインデックスを削除しているだけで、実態は残っています。そのため、VMware ESXi ホストからみるとゲストOSが仮想ディスクを「利用している」と認識し仮想ディスクが肥大化します。

結果、「シンプロビジョニングされたディスクサイズ」と「ゲストOSが認識しているディスクサイズ」が違ってきます。

シンプロビジョニングされた仮想ディスクを縮小する

ESXi ホスト上で動作する仮想マシンの仮想ディスクがシンプロビジョニング(Thin Provisioning)で作成されているとき、使用していないディスク領域を縮小する方法について説明します。

ESXi ホストに未使用領域と認識させれば、仮想ディスクを圧縮することができます

仮想ディスクの空き領域を「0」で埋める

ESXi ホストに未使用領域と認識させるには、仮想ディスクの空き領域を「0」で埋めることです。Windows、Linux共に対応が可能です。

  1. ゲストOSでツールかコマンドを実行し、空き領域ディスクに対してゼロ埋めを行う
  2. ESXiホストからコマンドを実行しゼロ領域が圧縮する

Windowsの場合

マイクロソフトが空き領域を「0」で上書きする sdeleteツール を無料で提供しています。このツールを利用するだけでゼロ埋めが出来るようになります。

Linuxの場合

Linuxの場合、空き容量に空のファイルを作成してスグに削除します。

今回は、zeroというファイルを作成してdisk fullし、直後に削除します。

# dd if=/dev/zero of=./zero bs=4k; rm -f ./zero
dd: writing `zero': No space left on device

当然ですが、ディスクの容量が一杯になりワーニングが出てきますが問題はありません。

仮想ディスクを縮小

ESXi サーバーで仮想ディスクを圧縮する操作を実施します。

  1. ゲストOSをシャットダウン
  2. ESXiサーバーにSSH接続する
  3. 仮想ディスクの圧縮コマンドを実行

ゲストOSをシャットダウン

残念ながらオンラインで仮想ディスクを圧縮できません。

ゲストOSをシャットダウンしてください。

ESXiサーバーにSSH接続する

ESXiサーバーにSSH接続し、ゲストOSがあるディレクトリに移動します。

/vmfs/volumes/データストア/仮想マシンフォルダ

 

仮想ディスクの収縮コマンドを実行

仮想ディスクの圧縮コマンドを実行します。

# vmkfstools -K ./<仮想マシン名>.vmdk

実行中の進捗具合が表示されます。

# vmkfstools -K ./<仮想マシン名>.vmdk
vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
Hole Punching: 11% done.

最後まで完了したら仮想ディスクが圧縮作業は完了です。忘れずにESXiサーバーのサービス(SSH、シェル)を停止させてください。

ゲストOSの起動

あとは、ゲストOSを起動させるだけです。

 

以上、「VMwareの仮想ディスクを縮小する」という記事でした。