vSphere Windows10ゲスト GPU パススルー

2021年4月28日

仮想Windows10でNvidia GeForce1650 をパススルーしてみます。
unRaid等の方がパススルー設定が簡単とか言われたりもしてますが、
グラボ1枚ではunRaidではパススルーはできません (オンボードグラフィックも利用できない)
hyper-vのDDAであればオンボ&グラボの組み合わせも可ですがXeon CPUのマシンではオンボグラフィックがそもそもありません。
ですのでサーバー用PCでのグラボ1枚でパススルーするなら現時点ではVM wareかCitrixのハイパーバイザーが最適ですので、今回は Esxiで行った備忘録です。

vSphere Web Client でホスト→管理を開いた後、ハードウェアタブを押します。
該当するグラボを見つけ、左のチェックマークを付けた後に[パススルーの切り替え]を押します。
vSphereホストを再起動します。

☆vSphere にEFIブートでWindowsゲストを作成
新規仮想マシンを押します。

ゲストOSファミリ には Windowsを、ゲストのOSバージョンではWindows10を選びます。

CPU数やメモリ、HDD、ネットワークの設定をします。

注)メモリの設定の時に必ず[すべてのゲストメモリを予約]にチェックをつけるようにしてください。

その他のデバイスの追加を押し、PCIデバイスを押します。
同じ事を2回します (グラボにはグラフィックとサウンドで2デバイス備わってる為)

追加したPCIデバイス2個がグラボ名と<class> audio deviceになっていればOKです。

仮想マシンオプションを押し、ファームウェアのところをEFIにし、
UEFIセキュアブートのチェックを外します(ここ重要)

そのまま下の方の構成パロメータのところの[構成の編集]を押します。

パロメータの追加を押し、
キーのところに hypervisor.cpuid.v0 を、
値のところに FALSE
と入力してOKを押します。(Nvidia の仮想PC検知を回避)

ここまでできたら設定したゲストOSを起動してWindowsをインストールしましょう。
本来ならWindowsにログオンしたらNvidiaのサイトからドライバをダウンロードしてインストールするはずですが、パススルーの場合はしません。
Windowsが自動的にNvidiaドライバーをすぐに入れてくれるので待ちます。

ドライバーがインストールされると無事Nvidiaコントロールパネルが開きます。
しかし、そのままではWindows再起動やシャットダウン時にドライバが無効化されてしまい、
その後の起動時には Nvidia43エラーになってグラボが使用不可になります。

こうなるとゲストマシン設定のPCIデバイスから一度グラボを消し、Sphereホストを再起動して再度グラボを割り当てるまでグラボが仮想マシンで使えません。

その為、WindowsがNvidiaドライバを自動で入れてくれたら、再起動やシャットダウン等をする前に以下の手順を行う必要があります。

☆43エラー回避
まずマイクロソフトのサイトから こちら をダウンロード保存します。
保存したらWinRarや7-Zip等で解凍し、中から
filbad6e2cce5ebc45a401e19c613d0a28f
というファイルを抜き出し、ファイル名を devcon.exe に変更します。
を C:¥Users\Windowsログオンユーザー名\AppData\Local\Microsoft\WindowsApps へ置いておきます。(青字の部分は人によって違います)

テキストエディタで以下を startUp.bat という名前で保存します。
devcon enable “PCI\VEN_10DE&DEV_1F82
同じように以下を shutDown.bat という名前で保存します。
devcon disable “PCI\VEN_10DE&DEV_1F82

青字の部分は人によって変わりますがこの記事の一番上の
vSphere Web Clientでパススルーの切り替えをした時に情報が出ているのでその通りにします。

startUp.batC:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
shutDown.batC:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
にそれぞれのファイルを置きます。

次にファイル名を指定して実行 のところに gpedit と入力して実行し、ローカル グループ ポリシー エディター を開きます。
コンピュータの構成 > Windows の設定 > スクリプト(スタートアップ/シャットダウン)
の順に開き、スタートアップの方に startUp.bat、シャットダウンの方に shutDown.bat をそれぞれ登録します。


Linux

Posted by boomboom