VMware vSphere Hypervisor上のVMにデスクトップ環境を構築

作成日:2023/08/27
最終更新日:2024/01/07

VMware vSphere Hypervisor上のVMにデスクトップ環境を構築

作成日:2023/08/27
最終更新日:2024/01/07

概要

PC刷新に伴い仮想化環境をKVMからESXi(VMware vSphere Hypervisor)に変更してみます。 ESXiの操作は、Webブラウザから行うため、ESXiをインストールした端末ではたいていの場合モニタが余ってしまいます。 一方ESXi上に構築したVM(仮想マシン)のデスクトップ環境を操作するとき、Webブラウザから操作する形となり別の端末が必要になります。

そこで、ESXi上の仮想マシンをESXiを導入した端末でネイティブ動作しているかのように見せられないか試してみました。 なお、ESXiは8.0U1aを使用しました。

HOSTの設定

本稿では、ESXiをインストールした端末本体をHOSTと呼び、ESXi上に構築する環境をGUESTと呼びます。

HOSTの構成

マシンスペックを以下に示します。 ESXi用のコンソールを出力するためにRyzen 5600Gの内蔵GPUを使用し、GUEST用にグラフィックボードを増設します。 また、GUESTでUSBを占有するためにUSBインタフェースボードを増設します。 増設したUSBインタフェースに、GUEST用のキーボードやマウス、USB DACを接続しGUEST用のマルチメディア環境を構築します。 また、GUESTでPCIカードを占有するには16GB以上のメモリを割り当てる必要があるため、32GBのメモリを用意しました。 SSDやHDDは以前のPCから使いまわしています。

表1. マシンスペック
パーツ詳細備考
CPURyzen 5 5600GGPU内蔵、GPUはESXiのHOST用に使用
メモリ32 64GB2024/01/07 メモリを増設
SSD128GB
1TB
HDD1TB
1TB
グラフィックボードGeForce GT730デスクトップ用に占有
USBインタフェースボードUSB3.0RA-P4-PCIEデスクトップ用に占有
USB DACDAC070音を鳴らしたい場合に必要

BIOSでPCIパススルーの設定

まず、HOSTのBIOSでPCIパススルーを有効化します。 ACSも有効化する必要があるのですが、私の使用している端末では設定項目が出てきませんでした。

ESXiでの設定

ESXiはデフォルトの設定のままだと増設したUSBインタフェースボードがPCIパススルーできません。 ESXi 6.7でオンボードUSBホストコントローラのパススルー[1]によると、VMkernel.Boot.disableACSCheckをtrueに変更すると良さそうです。 VMkernel.Boot.disableACSCheckは ホスト > 管理 > システム の中にあります。

VMkernel.Boot.disableACSCheckの設定
図1. VMkernel.Boot.disableACSCheckの設定
VMkernel.Boot.disableACSCheckの設定値をTrueに変更
図2. VMkernel.Boot.disableACSCheckの設定値をTrueに変更

設定を変更したら、一度 HOST を再起動します。

再起動完了後、 ホスト > 管理 > ハードウェア を確認すると、USBインタフェースボードが選択可能になっています。 グラフィックボードとともに選択し、パススルーの切り替えを押し、パススルーをアクティブにします。

PCIパススルーの設定
図3. PCIパススルーの設定
PCIパススルーの設定値を有効に変更
図4. PCIパススルーの設定値を有効に変更

これで、VMを作るための準備は完了です。

GUESTの作成

仮想マシン > 仮想マシンの作成/登録 から、仮想マシンを新規作成します。 今回は、Ubuntu 22.04LTSのデスクトップ版をインストールすることにします。

仮想マシンの作成/登録
図5. 仮想マシンの作成/登録

仮想マシンの作成/登録を押すとウィザードが起動します。まずは、新規仮想マシンの作成を選択し次へボタンを押します。

新規仮想マシンの作成
図6. 新規仮想マシンの作成

仮想マシンの名前と導入するOSの情報を選択します。仮想マシンの名前は同一HOSTの中でユニークである必要があります。

名前とゲストOSの選択
図7. 名前とゲストOSの選択

仮想マシンを格納するストレージを選択します。今回はdatastore0に格納することにします。

ストレージの選択
図8. ストレージの選択

仮想マシンのカスタマイズをします。今回はPCIパススルーするために必要な要件である、「メモリを16GB割り当て」し「すべてのゲストメモリを予約」を設定します。HDDについては、とりあえず60GB割り当てることにします。

設定のカスタマイズ その1
図9. 設定のカスタマイズ その1

また、OSをインストールするためにISOイメージをアップロードします。

設定のカスタマイズ その2
図10. 設定のカスタマイズ その2

今回は、datastore0にisoディレクトリを作成し、そこにUbuntuのISOイメージをアップロードします。アップロードするときは、ディレクトリを選択しアップロードボタンを押します。

ISOイメージのアップロード
図11. ISOイメージのアップロード

続いて、PCIパススルーするデバイスを追加します。その他のデバイスの追加 > PCIデバイスを押すと追加されます。今回はグラフィックボード関係のデバイス2つとUSBコントローラを追加します。

設定のカスタマイズ その3
図12. 設定のカスタマイズ その3
設定のカスタマイズ その4
図13. 設定のカスタマイズ その4

次へボタンを押すと設定の確認画面になるので、問題なければ完了ボタンを押し、仮想マシンの作成を完了します。

設定の確認
図14. 設定の確認

GUESTへOSのインストール

仮想マシンを開くと、先ほど作成した仮想マシンが追加されます。

仮想マシンの一覧
図15. 仮想マシンの一覧

左側のチェックボックスにチェックを入れ、パワーオンを押すとGUESTとなる仮想マシンが起動します。

仮想マシンの選択
図16. 仮想マシンの選択

左下に画面の画像が表示するので、押すとダイアログが開き仮想マシンの画面をリモートデスクトップのように操作できます。

仮想マシンの起動
図17. 仮想マシンの起動

ブートローダが起動しているので、「Try or Install Ubuntu」を選択し実行します。

インストーラのブートローダ
図18. インストーラのブートローダ

しばらく待つとUbuntuのインストーラが起動するのでインストールします。

Ubuntuのインストール
図19. Ubuntuのインストール

インストールを完了し、再起動したらグラフィックボードのドライバの設定をします。設定 > このシステムについて > ソフトウェアのアップデートを押します。

インストール後の設定
図20. インストール後の設定

追加のドライバーを押すと、グラフィックボードが2つ表示されます。「VMware: SVGA II Adapter」のほうはデバイスを使用しないを選択し、「NVIDIA Corporation: GK208B」のほうはnvidia-driver-470を選択し、変更の適用を押します。

ドライバのインストール
図21. ドライバのインストール

インストールを完了したら、再起動を押します。

ドライバのインストール完了
図22. ドライバのインストール完了

ただし、このままではまだ追加したグラフィックボードのほうには出力されません。一旦Ubuntuの電源を落とし、GUESTを終了します。

ホスト > アクション > サービス > SSHの有効化 から、HOSTのSSHを有効化します。

HOSTのSSHを有効化
図23. HOSTのSSHを有効化

SSHでHOSTにログインし、作成した仮想マシンの設定を書き換えます。diffとしては次のようにします。肝はsvga関係の設定の無効化やコメントアウトです。デフォルトのグラフィックボードを無効化し、PCIパススルーして接続しているグラフィックボードのみ接続しているように見せかけることが重要です。

ソース1. svgaの無効化
--- Ubuntu 22.04 LTS.vmx.org
+++ Ubuntu 22.04 LTS.vmx
@@ -2,7 +2,7 @@
 config.version = "8"
 virtualHW.version = "20"
 nvram = "Ubuntu 22.04 LTS.nvram"
-svga.present = "TRUE"
+svga.present = "FALSE"
 vmci0.present = "TRUE"
 hpet0.present = "TRUE"
 floppy0.present = "FALSE"
@@ -24,7 +24,7 @@
 sata0.present = "TRUE"
 usb.present = "TRUE"
 ehci.present = "TRUE"
-svga.autodetect = "TRUE"
+svga.autodetect = "FALSE"
 pciPassthru0.id = "00000:001:00.0"
 pciPassthru0.deviceId = "0x1287"
 pciPassthru0.vendorId = "0x10de"
@@ -96,28 +96,28 @@
 migrate.hostlog = "./Ubuntu 22.04 LTS-b6c9bc0a.hlog"
 scsi0:0.redo = ""
 scsi0.sasWWID = "50 05 05 66 3c 80 5d 80"
-svga.vramSize = "16777216"
-vmotion.checkpointFBSize = "16777216"
-vmotion.checkpointSVGAPrimarySize = "16777216"
-vmotion.svga.mobMaxSize = "16777216"
-vmotion.svga.graphicsMemoryKB = "16384"
+#svga.vramSize = "16777216"
+#vmotion.checkpointFBSize = "16777216"
+#vmotion.checkpointSVGAPrimarySize = "16777216"
+#vmotion.svga.mobMaxSize = "16777216"
+#vmotion.svga.graphicsMemoryKB = "16384"
 ethernet0.generatedAddress = "00:0c:29:85:d8:23"
 ethernet0.generatedAddressOffset = "0"
 vmci0.id = "-1115301853"
 monitor.phys_bits_used = "45"
 cleanShutdown = "TRUE"
 softPowerOff = "TRUE"
-usb:0.present = "TRUE"
-usb:0.deviceType = "hid"
-usb:0.port = "0"
-usb:0.parent = "-1"
 usb:1.speed = "2"
 usb:1.present = "TRUE"
 usb:1.deviceType = "hub"
 usb:1.port = "1"
 usb:1.parent = "-1"
-svga.guestBackedPrimaryAware = "TRUE"
+#svga.guestBackedPrimaryAware = "TRUE"
 guestInfo.detailed.data = "architecture='X86' bitness='64' distroName='Ubuntu 22.04.3 LTS' distroVersion='22.04' familyName='Linux' kernelVersion='6.2.0-26-generic' prettyName='Ubuntu 22.04.3 LTS'"
 toolsInstallManager.updateCounter = "1"
 extendedConfigFile = "Ubuntu 22.04 LTS.vmxf"
 tools.remindInstall = "TRUE"
+usb:0.present = "TRUE"
+usb:0.deviceType = "hid"
+usb:0.port = "0"
+usb:0.parent = "-1"

あとは、パススルーしている増設したUSBインタフェースカードにキーボードとマウスを接続し、増設したグラフィックボードにモニタを接続し、GUESTを起動することでデスクトップマシンのように扱うことができるようになります。音を鳴らしたい場合にはUSB-DACを増設したUSBインタフェースカードに接続することで対応可能です。USBヘッドセットを同様に接続しても問題ないでしょう。

まとめ

ESXiをインストールしたHOST上で、デスクトップPCのようにGUESTを扱いたいときは以下を実施します。

  • PCIパススルーの設定をして、グラフィックボードとUSBインタフェースボードを増設する。
  • GUESTで増設したグラフィックボードのドライバをインストールする。
  • GUESTの設定ファイルを直接編集し、デフォルトのグラフィックボード設定を無効化する。
  • 増設したUSBインタフェースカードにUSBキーボードやマウスを接続し、起動する。

参考文献

  1. HA, ESXi 6.7でオンボードUSBホストコントローラのパススルー, HA's memo, 2012-2022