VMwareの仮想ディスクを縮小する

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

この疑問に回答します。

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

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

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

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

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

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

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

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

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

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

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

Windowsの場合

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

ダウンロードすると 32bit と 64bit 用のEXEファイルが2つあります。環境に合わせて実行ファイルを選択してください。

コマンドプロンプトから sdelete を実行します。

-zオプションを与えて、Cドライブの空き領域にゼロ埋めします。

sdelete -z C:

実行時の画面

sdeleteコマンドの初回起動画面
sdeleteコマンドの初回起動画面
sdeleteコマンドの許諾画面
sdeleteコマンドの許諾画面
sdeleteコマンドの実行画面
sdeleteコマンドの実行画面

補足

SDelete は、たくさんのオプションを使用できるコマンド ライン ユーティリティです。SDelete を使用すると、1 つまたは複数のファイルやディレクトリを削除したり、論理ディスク上の空き領域から不要なものを除去したりできます。また、ディレクトリやファイルを指定するときにワイルド カード文字を使用できます。

使用法:
sdelete [-p <回数>] [-s] [-q] <ファイルまたはディレクトリ> 
sdelete [-p <回数>] [-z|-c] [<ドライブ文字>] 
オプション:
-a         読み取り専用の属性を削除します。
-c         空き領域から不要なものを除去します。
-p <回数>  上書きの回数を指定します (既定値は 1 です)。
-q         エラーを出力しないようにします (Quiet モードで実行します)。
-s または -r   サブディレクトリを再起処理します。
-z         空き領域に 0 を設定します (仮想ディスクの最適化に適しています)。

Linuxの場合

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

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

# dd if=/dev/zero of=./zerofile 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/データストア/仮想マシンフォルダ

関連記事

ESXi ホストにSSHでログインする
どうやって、ESXi ホストにSSHでログインする? この疑問に回答します。 サービスが停止しているので開始する必要があります。 サービスを起動する ESXi ホストにSSHにてリモートアクセスする機会は滅多にあ...

 

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

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

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

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

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

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

関連記事

シンプロビジョニング VMDKファイルの圧縮ができない
VMDKファイルの圧縮ができない。 この疑問に回答します。 「vmkfstools」コマンドを利用して、VMDKファイルを圧縮が出来ませんでした。 Not a supported filesystem type ...

ゲストOSの起動

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

 

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

 

コメント