パーツ | 詳細 | 備考 |
---|---|---|
CPU | Ryzen 5 5600G | GPU内蔵、GPUはESXiのHOST用に使用 |
メモリ | 2024/01/07 メモリを増設 | |
SSD | 128GB | |
1TB | ||
HDD | 1TB | |
1TB | ||
グラフィックボード | GeForce GT730 | デスクトップ用に占有 |
USBインタフェースボード | USB3.0RA-P4-PCIE | デスクトップ用に占有 |
USB DAC | DAC070 | 音を鳴らしたい場合に必要 |
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から使いまわしています。
BIOSでPCIパススルーの設定
まず、HOSTのBIOSでPCIパススルーを有効化します。 ACSも有効化する必要があるのですが、私の使用している端末では設定項目が出てきませんでした。
ESXiでの設定
ESXiはデフォルトの設定のままだと増設したUSBインタフェースボードがPCIパススルーできません。 ESXi 6.7でオンボードUSBホストコントローラのパススルー[1]によると、VMkernel.Boot.disableACSCheckをtrueに変更すると良さそうです。 VMkernel.Boot.disableACSCheckは ホスト > 管理 > システム の中にあります。


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


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

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

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

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

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

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

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

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


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

GUESTへOSのインストール
仮想マシンを開くと、先ほど作成した仮想マシンが追加されます。

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

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

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

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

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

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

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

ただし、このままではまだ追加したグラフィックボードのほうには出力されません。一旦Ubuntuの電源を落とし、GUESTを終了します。
ホスト > アクション > サービス > SSHの有効化 から、HOSTのSSHを有効化します。

SSHでHOSTにログインし、作成した仮想マシンの設定を書き換えます。diffとしては次のようにします。肝はsvga関係の設定の無効化やコメントアウトです。デフォルトのグラフィックボードを無効化し、PCIパススルーして接続しているグラフィックボードのみ接続しているように見せかけることが重要です。
--- 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キーボードやマウスを接続し、起動する。
参考文献
- HA, ESXi 6.7でオンボードUSBホストコントローラのパススルー, HA's memo, 2012-2022