hidemium's blog

日々学んだことをアウトプットする。

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) アダプタを使用するようにディスクに構成する

流れとしては、以下のようになります。

  1. VMware Toolsをインストールする
  2. 一時的な利用のため新しい SCSI コントローラ (PVSCSI) を作成する
  3. 一時的な利用のため新しい1GB ディスク (SCSI 1:0) を作成する
  4. 仮想マシンをパワーオンし、ディスク管理で新しい1GBのディスクが見えていることを確認する
  5. シャットダウンする
  6. 一時的なSCSIコントローラー(PVSCSI)とディスク(SCSI 1:0)を削除する
  7. 既存のSCSIコントローラーをLSI Logic SASからVMware 準仮想化に変更する
  8. 仮想マシンをパワーオンし、OSが起動することを確認する

こちらの方法だと確実に起動することが可能ですが、一時的なSCSIコントローラーやディスクを作成したり、電源のオンオフが必要だったりします。

試した方法

まずは、LSI Logic SASでインストール後にVMware 準仮想化 SCSI コントローラ(PVSCSI)に変更を行った場合にどのような挙動になるか確認します。

何度も試せるように、スナップショットを取得しておきます。

  1. シャットダウン
  2. 既存のSCSIコントローラーをLSI Logic SASからVMware 準仮想化に変更する
  3. 仮想マシンをパワーオン

上記の操作を行うと、OSが起動時に以下のinaccessible boot deviceというメッセージが表示され、OSの起動に失敗します。

PVSCSIを認識させる

この状態だと、OSの起動時にPVSCSIのドライバがロードされないため、ローカルディスクの読み取りに失敗します。

PVSCSIドライバを差し込んでみます。

まずは、VMware Toolsのisoファイルを入手し、以下のように仮想マシンにアタッチします。

  1. シャットダウン
  2. 既存のSCSIコントローラーをLSI Logic SASからVMware 準仮想化に変更する
  3. CD/DVDドライブにデータストアISOファイルからisoファイルとして指定する
  4. 仮想マシンをパワーオン

同じように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

  1. プレブート: PC のファームウェアが電源オンセルフ テスト (POST) を開始し、ファームウェア設定を読み込みます。 このプロセスは、有効なシステム ディスクが検出されると終了します。 ファームウェアはマスター ブート レコード (MBR) を読み取り、Windows Boot Manager を起動します。
  2. Windows Boot Manager: Windows Boot Manager は、Windows ブート パーティションWindows ローダー (Winload.exe) を検索して起動します。
  3. Windows オペレーティング システム ローダー: Windows カーネルを起動するために必要となる重要なドライバーが読み込まれ、実行に向けてカーネルが開始します。
  4. Windows NT OS カーネル: カーネルはシステム レジストリ ハイブと、BOOT_STARTとしてマークされているその他のドライバーをメモリに読み込みます。
  5. カーネルは、システム セッションを初期化するセッション マネージャー プロセス (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