雑木林

頭の中の整理と忘れないための確認メモ

VMWare上のVMWareで共有するvmdkを作成する

Nested Virtualizationにも少し関連する話ですが、今回は仮想マシン間でディスクを共有するお話。
OSやミドルウェアを利用してクラスタリング等を行う際に、共有ディスクがよく必要になります。
このときSANやiSCSI上のLUNを複数のサーバで共有したり、NFSなどを用いるのが常套手段ですが、
検証や試験などで仮想環境上で試験的に実施するための手順について確認しました。

手順概要

  1. ホストのESXiにSSH接続し、共有vmdkを作成する
  2. vmdkを共有するゲストのESXiにvmdkディスクを追加する
  3. vmdkを共有するゲストのESXiのSCSIコントローラの設定を変更する

ホストのESXiにSSH接続し、共有vmdkを作成する

ホストのESXiに接続して以下のコマンドを実行する。
(以下の例は10GBの共有ディスクを作成しています。)

~ # mkdir /vmfs/volumes/datastore1/ShareDisk/
~ # vmkfstools -d eagerzeroedthick -c 10G /vmfs/volumes/datastore1/ShareDisk/SharedDisk01.vmdk
Creating disk '/vmfs/volumes/datastore1/ShareDisk/SharedDisk01.vmdk' and zeroing it out...
Create: 100% done.

ここで注意すべきなのは、ディスクフォーマット(-d)のパラメータを「thin」にしないこと。
シンプロビジョニング(thin)で作成すると、以下ののエラーが出て仮想マシンを起動できません。

f:id:zokibayashi:20150519031223p:plain

仮想マシンの起動に失敗しました。
モジュール DiskEarly のパワーオンに失敗しました。 
ディスク「/vmfs/volumes/5540784c-5605b8a9-8081-80ee735c8b4b/ShareDisk/SharedDisk01.vmdk」、またはディスク「/vmfs/volumes/5540784c-5605b8a9-8081-80ee735c8b4b/ShareDisk/SharedDisk01.vmdk」が依存しているスナップショット ディスクの 1 つを開くことができません。 
シン/TBZ/スパース ディスクはマルチライター モードでは開けません。
VMware ESX は、クラスタリング目的で仮想ディスク「/vmfs/volumes/5540784c-5605b8a9-8081-80ee735c8b4b/ShareDisk/SharedDisk01.vmdk」を開くことができません。仮想ディスクが「シック」オプションを使用して作成されていることを確認してください。 

後述しますが、SCSIコントローラでバス(およびバスに接続されているデバイス)を共有する場合、
ディスクはシックで構成されている必要があるためです。

また、GUIではなくCLIで作成している理由ですが、GUIで作成する手順では仮想マシンに紐づくため、
仮想マシンのイメージ格納ディレクトリ(datastore1/仮想マシン名/)に格納されてしまいます。
単純に共有用のディレクトリに格納したいと思ったので、このような手順を踏んでます。

【参考】vSphere CLIからでも同様の操作を行う

C:\Program Files (x86)\VMware\VMware vSphere CLI>cd bin

C:\Program Files (x86)\VMware\VMware vSphere CLI\bin>vmkfstools.pl --server HOSTNAME --username USERNAME --password PASSWORD -d eagerzeroedthick -c 1G /vmfs/volumes/datastore1/ShareDisk/ShareDisk01.vmdk

Attempting to create virtual disk [datastore1] ShareDisk/ShareDisk01.vmdk

Successfully created virtual disk [datastore1] ShareDisk/ShareDisk01.vmdk

C:\Program Files (x86)\VMware\VMware vSphere CLI\bin>

vmdkを共有するゲストのESXiにvmdkディスクを追加する

次に、vSphere ClientまたはWeb Clientを用いてゲストのESXiの設定情報を編集します。
ゲストのESXiのプロパティを表示し、「追加」をクリックします。

f:id:zokibayashi:20150519033930p:plain

「ハードディスク」を選択し、「次へ」をクリックします。
f:id:zokibayashi:20150519034446p:plain

「既存の仮想ディスクを使用」を選択し、「次へ」をクリックします。
f:id:zokibayashi:20150519034626p:plain

「参照」から先ほど作成した共有ディスクを選択し、「次へ」をクリックします。
f:id:zokibayashi:20150519035321p:plain

新しいSCSIコントローラを作成するために「仮想デバイスノード」を変更します。
例ではSCSI0:0が使用済み(SCSI(0:X)用のコントローラが存在する)ため、SCSI(1:0)を選択
また、モードについて「独立型」および「通常」を選択して「次へ」をクリックします。
f:id:zokibayashi:20150519035444p:plain

最後に確認のサマリが表示されるので、「終了」をクリックします。
f:id:zokibayashi:20150519040153p:plain

vmdkを共有するゲストのESXiのSCSIコントローラの設定を変更する

さて、先ほど追加したvmdkディスクは共有するための設定がされていません。
そこでSCSIコントローラの共有設定を行います。

vmdkの追加が正しくできていれば、新しいSCSIコントローラが表示されているはずです。
そのSCSIコントローラ「SCSIバスの共有」を「物理」にし、「OK」をクリックすれば完了です。
f:id:zokibayashi:20150519040743p:plain


ちなみに共有の設定が正しくされていないと起動時に以下のようなエラーが発生します。

仮想マシンの起動に失敗しました。
モジュール DiskEarly のパワーオンに失敗しました。 
ディスク「/vmfs/volumes/5540784c-5605b8a9-8081-80ee735c8b4b/ShareDisk/ShareDisk.vmdk」、またはディスク「/vmfs/volumes/5540784c-5605b8a9-8081-80ee735c8b4b/ShareDisk/ShareDisk.vmdk」が依存しているスナップショット ディスクの 1 つを開くことができません。 
ファイルのロックに失敗しました

f:id:zokibayashi:20150519030254p:plain

vmdkを共有するゲストのESXiに対して、以上の設定が正しく行われていれば、同時起動が可能です。