どうもカトーです。最近は仮想環境で作業行うことが多くなってきましたが、ゲストOSが増えてくるとストレージサイズの節約が少なからず必要になります。ゲストOSに当初予定してたサイズより少ない利用だったので下げたいという場合に簡単にサイズを下げて行こうという事になります。
先に前提と結論
仮想マシンを作成する場合には、データストア上の一定量のストレージ容量が仮想ディスク ファイルに準備(プロビジョニング)されます。通常仮想マシンを作る場合、全体で必要とするストレージの量を最初にディスクに固定のストレージ容量(たとえば 100 GB)を事前にプロビジョニングされた容量全体が仮想ディスクにコミットされます。プロビジョニングされた容量全体をすぐに占有する仮想ディスクはシック ディスク。ESXi では仮想ディスクのシン プロビジョニングが使えます。シンプロビジョニング機能を使用すると、シン フォーマットの仮想ディスクを作成できます。シン仮想ディスクの場合、ESXi はディスクの現在および将来のアクティビティに必要となる容量全体 (たとえば 40GB) をプロビジョニングします。ただし、シン ディスクが初期の操作で使用するのは、ディスクが必要とするストレージ容量に限定されます。
……と慣れない方は難しい話ですが、要はシックプロビジョニング(Lazy zeroed)では仮想ディスク作成時に指定したサイズ分の領域を確保し、シンプロビジョニングでは仮想ディスク作成時には最低限の領域のみ確保し、必要に応じて増加します。
要は、既に動いている仮想ディスクがシックプロビジョニングならシンシックプロビジョニングにしてディスクサイズを節約しようという事です。
手順概要
こちらも先に概要を書いておきます。
作業は簡単2ステップです。
- ESXiにSSH接続して、vmdkファイルを変換してクローン。
- ゲストOSの仮想ハードディスクを削除して、クローンしたものに変える。
ステップ1 ESXiに接続してvmdkファイルをクローン
まずはSSH接続、初期だと繋がらないと思うので、ESXiのブラウザ管理画面、左のペインの管理から中央タブのサービスを選んでTSM-SSHを起動し、ホストと連動して起動及び停止しますを選択。
次に他のLinuxマシンのようにSSH接続し、目的のファイルを変換してクロンします。
基本的に仮想マシンは、/vmfs/volumes/<データストア名>/<仮想マシン名> のフォルダ配下に格納されています。
1 |
変換は vmkfstools -i /vmfs/volumes/<移行元データストア>/<仮想マシン名>/<仮想マシン名>.vmdk -d thin /vmfs/volumes/<移行先データストア>/<仮想マシン名>/<仮想マシン名>.vmdk |
オプション -d thin をつけることでコピー先のディスクはシンプロビジョニングへと変換してくれる。
こちら躓いた?点として以下、
1 2 3 |
Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore1/ディレクトリ/仮想ディスク名.vmdk'... Failed to clone disk: The system cannot find the file specified (25). |
とエラーをいくつか履いた。ファイルパス名が長ったのかディレクトリ名前を変更したのか不明だが、別に上のディレクトリーから叩かなくても、そのディレクトリまで移動してから行って成功した。
1 2 3 4 |
vmkfstools -i 仮想ディスク.vmdk -d thin 仮想ディスク-thin.vmdk Destination disk format: VMFS thin-provisioned Cloning disk 'Windows10.vmdk'... Clone: 100% done. |
ゲストOSの仮想ハードディスクを削除して、クローンしたものに変える。
あとは既存のハードディスクを削除して、ハードディスクの追加で、先程シンプロビジョニングに変換したディスクを選択すればOK。
起動確認後に、データストアからクローン前のvmdkファイルを削除して完了。
最後に
実運用のサーバもある程度ストレージサイズを確定できますが、色々と検証用のゲストはついついホスト側のストレージを決め打ちしがちです。速さ重視でM.2で1TB辺りあっても結構足りない事が多いです。
ここは確かに処理も重視したいですが、検証環境ではゲストOSはバンバン作り直すので、ストレージ容量も多めに確保しておきましょう。
ちなみに今回私が自作して検証用サーバでしたが、ケースも作り変えが必要なようです。