Windowsのインストール後にVMware 準仮想化 SCSI コントローラに変更する
Windows Serverにて、LSI Logic SASでインストール後にVMware 準仮想化 SCSI コントローラ(PVSCSI)に変更を行った場合、OSの起動ができくなることがあり、起動ができるようにするためいくつか試してみたので書いてみようと思います。
構成
- vCenter 8.0U3
- ESXi 8.0U3
- Windows Server 2019
一般的な方法
通常、LSI Logic SASでインストール後にVMware 準仮想化 SCSI コントローラ(PVSCSI)に変更を行った場合には、以下のKBが公開されています。
VMware 準仮想化 SCSI (PVSCSI) アダプタを使用するようにディスクに構成する
流れとしては、以下のようになります。
- VMware Toolsをインストールする
- 一時的な利用のため新しい SCSI コントローラ (PVSCSI) を作成する
- 一時的な利用のため新しい1GB ディスク (SCSI 1:0) を作成する
- 仮想マシンをパワーオンし、ディスク管理で新しい1GBのディスクが見えていることを確認する
- シャットダウンする
- 一時的なSCSIコントローラー(PVSCSI)とディスク(SCSI 1:0)を削除する
- 既存のSCSIコントローラーをLSI Logic SASからVMware 準仮想化に変更する
- 仮想マシンをパワーオンし、OSが起動することを確認する
こちらの方法だと確実に起動することが可能ですが、一時的なSCSIコントローラーやディスクを作成したり、電源のオンオフが必要だったりします。
試した方法
まずは、LSI Logic SASでインストール後にVMware 準仮想化 SCSI コントローラ(PVSCSI)に変更を行った場合にどのような挙動になるか確認します。
何度も試せるように、スナップショットを取得しておきます。
上記の操作を行うと、OSが起動時に以下のinaccessible boot deviceというメッセージが表示され、OSの起動に失敗します。

PVSCSIを認識させる
この状態だと、OSの起動時にPVSCSIのドライバがロードされないため、ローカルディスクの読み取りに失敗します。
PVSCSIドライバを差し込んでみます。
まずは、VMware Toolsのisoファイルを入手し、以下のように仮想マシンにアタッチします。
- シャットダウン
- 既存のSCSIコントローラーをLSI Logic SASからVMware 準仮想化に変更する
- CD/DVDドライブにデータストアISOファイルからisoファイルとして指定する
- 仮想マシンをパワーオン
同じようにOSの起動に失敗します。
しばらくすると、キーボード選択に遷移します。

キーボードを選択すると、トラブルシューティングの画面に遷移します。

トラブルシューティングのメニューの中でコマンドプロンプトを選択します。

コマンドプロンプトを選択すると、「Windows Recovery Environment(WinRE)」と呼ばれるリカバリー用OSのコンソールに入れます。

WinREの操作
以下のコマンドで、PVSCSIドライバの読み込みを行います。
drvload "D:\Program Files\VMware\VMware Tools\Drivers\pvscsi\Win8\amd64\pvscsi.inf"
以下のコマンドでCドライブが読み取りできるか確認します。
PVSCSIドライバがロードできていれば表示されます。
diskpart DISKPART> list volume
展開イメージのサービスと管理 (DISM) サービス コマンドを使って、Windows イメージにドライバーを追加します。
WinREにPVSCSIドライブをロードし、Cドライブを見えるようにし、WinREからWindowsイメージにPVSCSIのドライバをインストールする流れです。
dism /image:C:\ /add-driver /driver:"D:\Program Files\VMware\VMware Tools\Drivers\pvscsi\Win8\amd64\pvscsi.inf"
ドライバの追加ができたため、WinREを終了します。
exit
PCの電源を切るを選択して、シャットダウンします。
その後、仮想マシンをパワーオンし、OSが起動できることを確認します。
Windowsのブートについて
Windowsのブートについては、以下の詳細が書かれています。
Windows のブートに関する問題のトラブルシューティング - Windows Client | Microsoft Learn
- プレブート: PC のファームウェアが電源オンセルフ テスト (POST) を開始し、ファームウェア設定を読み込みます。 このプロセスは、有効なシステム ディスクが検出されると終了します。 ファームウェアはマスター ブート レコード (MBR) を読み取り、Windows Boot Manager を起動します。
- Windows Boot Manager: Windows Boot Manager は、Windows ブート パーティションで Windows ローダー (Winload.exe) を検索して起動します。
- Windows オペレーティング システム ローダー: Windows カーネルを起動するために必要となる重要なドライバーが読み込まれ、実行に向けてカーネルが開始します。
- Windows NT OS カーネル: カーネルはシステム レジストリ ハイブと、BOOT_STARTとしてマークされているその他のドライバーをメモリに読み込みます。
- カーネルは、システム セッションを初期化するセッション マネージャー プロセス (Smss.exe) にコントロールを渡し、BOOT_START としてマークされていないデバイスとドライバーを読み込んで起動します。
エラー画面を見比べると、kernel phaseのWindows NT OS Kernelが実行されているところで問題起きていることが分かります。
さらに、以下に詳細のトラブルシューティング方法についても書かれています。
エラー 7B またはInaccessible_Boot_Deviceのトラブルシューティングを停止する - Windows Client | Microsoft Learn
VMware Toolsを事前にインストールしていると、以下のコマンドでPVSCSIのドライバーがあることは見えますが、カーネル起動時にもともと接続していたLSI Logic SASのデバイスとドライバーを読み込もうとするが、デバイスがPVSCSIが接続されているため、ドライバーが正しく読み込まれないのかもしれません。
dism /image:C:\ /get-drivers 公開名:oem5.inf 元のファイル名:pvscsi.inf インボックス:いいえ クラス名:SCSIAdapter プロバイダー名:VMware, Inc. 日付:2022/11/30 バージョン:1.3.26.0
Linuxの場合
Linuxの場合は、LinuxカーネルにinboxドライバにPVSCSIやvmxnet3のドライバが組み込まれているため、インストール後にPVSCSIに切り替えを行っても起動することができます。
VMware support for Linux inbox VMware drivers
The vmw_pvscsi driver with version 1.0.1.0-k was accepted upstream in the 2.6.33 kernel on December 2009. Ubuntu introduced distribution of the 1.0.1.0-k version of this driver in the 10.04 release.
Ubuntu 22.04でPVSCSIのドライバの情報を見てみると、inboxドライバとして組み込まれていることが分かります。
$ modinfo vmw_pvscsi filename: /lib/modules/5.15.0-125-generic/kernel/drivers/scsi/vmw_pvscsi.ko version: 1.0.7.0-k license: GPL author: VMware, Inc. description: VMware PVSCSI driver srcversion: 9ECE9CD6D5195A698354F86 alias: pci:v000015ADd000007C0sv*sd*bc*sc*i* depends: retpoline: Y intree: Y name: vmw_pvscsi vermagic: 5.15.0-125-generic SMP mod_unload modversions