Alibaba Cloud ECS コンソールで Windows インスタンスのインスタンスタイプを世代間で変更した後、インスタンスが起動に失敗することがあります。この障害は、「INACCESSIBLE_BOOT_DEVICE」というメッセージが表示されるブルースクリーンエラーによって示され、オペレーティングシステムにアクセスできなくなります。このトピックでは、この問題を解決する方法について説明します。
問題の説明
発生条件
この問題は、Windows ECS インスタンスのインスタンスタイプをインスタンスファミリー間で (世代をまたいで) 変更した場合に発生します。たとえば、インスタンスタイプを ecs.g7 (VirtIO-SCSI) から ecs.g8i (NVMe) に変更した場合にこの問題が発生することがあります。
症状
インスタンスタイプを変更した後、リモートデスクトップを使用してインスタンスに接続できなくなります。VNC 接続を使用してインスタンスにログインすると、起動プロセス中にブルースクリーンが表示されます。画面には Stop Code: (INACCESSIBLE_BOOT_DEVICE) というメッセージが表示されます。
エラーのスクリーンショット

根本原因
起動速度を最適化するため、Windows オペレーティングシステムは、通常の起動時に現在のハードウェア環境に必要な重大なドライバーのみを読み込みます。
ECS インスタンスのインスタンスタイプを世代間で変更すると、基盤となるストレージハードウェアのインターフェイスプロトコルが変更される場合があります。
たとえば、インスタンスをecs.g7からecs.g8iにアップグレードすると、基盤となるストレージドライバーはVirtIO-SCSIからNVMeに切り替わります。アップグレード後も、オペレーティングシステムは起動フェーズで古いストレージドライバー (viostor.sys) を読み込もうとします。しかし、新しいハードウェアはNVMeインターフェイスを使用します。この不一致により、システムディスクが検出できなくなります。その結果、システムは起動可能なデバイスを見つけることができず、INACCESSIBLE_BOOT_DEVICEブルースクリーンエラーが発生します。
緊急時対応計画
この計画は、サービスアクセスをできるだけ早く復旧させるために設計されています。恒久的な解決策ではありません。
サービスを迅速に復旧させるには、まず インスタンスタイプを 元のタイプに戻します。
サービスが復旧した後も、新しいインスタンスタイプにアップグレードする必要がある場合は、まず「予防策」セクションの手順に従ってインスタンスを前処理する必要があります。その後、新しいメンテナンスウィンドウをスケジュールして、再度 インスタンスタイプを変更 できます。
解決策
解決策 1: セーフモードに入り自動修復する (推奨)
この解決策では、Windows のセーフモード機能を使用します。これにより、汎用ドライバーが自動的に読み込まれ、ドライバーの問題が修正されます。
修復を実行する前に、操作エラーによるデータ損失を防ぐために、インスタンスの スナップショットを作成 してください。
手順
VNC 接続を使用して障害が発生したインスタンスにログインします。インスタンスが 2 回起動に失敗すると、次の図に示す修復インターフェイスに自動的に入ります。このインターフェイスで、[Troubleshoot] を選択して [Advanced Options] インターフェイスに移動します。

[Advanced Options] インターフェイスで、[Startup Settings] を選択します。

[Startup Settings] インターフェイスで、[Restart] をクリックします。

インスタンスが再起動すると、[Advanced Boot Options] メニューに入ります。[Safe Mode With Networking] を選択し、
Enterキーを押します。システムがセーフモードで読み込まれるのを待ちます。
画面の指示に従ってシステムにログインし、セーフモードのデスクトップに入ります。新しいストレージドライバーが自動的に読み込まれ、登録されます。

コンソールで、インスタンスを再起動します。その後、再度 VNC 接続を使用してインスタンスにログインします。インスタンスが正常に起動し、Windows デスクトップにアクセスできれば、問題は解決です。

解決策 2: 修復モードでレジストリをオフライン編集する
この解決策では、Windows 修復環境のコマンドラインインターフェイスを使用してレジストリをオフラインで変更し、ストレージドライバーを強制的に読み込みます。
修復を実行する前に、操作エラーによるデータ損失を防ぐために、インスタンスの スナップショットを作成 してください。
手順
VNC 接続を使用して障害が発生したインスタンスにログインします。インスタンスが 2 回起動に失敗すると、次の図に示す修復インターフェイスに自動的に入ります。[Troubleshoot] を選択して [Advanced Options] インターフェイスに移動します。

[Command Prompt] を選択します。

管理者権限を持つアカウント (デフォルトは Administrator) を選択し、パスワードを入力してコマンドプロンプト環境を開きます。


コマンドプロンプトウィンドウで
regeditと入力し、Enter キーを押して [レジストリエディター] を開きます。
HKEY_LOCAL_MACHINEを選択します。次に、メニューバーから を選択します。
表示されるファイル選択ダイアログボックスで、システムディスク上のレジストリファイルパスに移動します。パスは通常
C:\Windows\System32\config\SYSTEMです。[開く] をクリックします。[ハイブの読み込み] ダイアログボックスで、読み込まれたハイブの一時的なキー名 (例:
OfflineSYSTEM) を指定します。次に、[OK] をクリックします。
HKEY_LOCAL_MACHINE\OfflineSYSTEM\Selectを展開します。Defaultキーの値を確認します。たとえば、値が1の場合、現在のコントロールセットはControlSet001です。
次の 3 つのレジストリパスを見つけます。各パスを右クリックし、[削除] を選択します。パスが存在しない場合は、無視してください。
HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\AliNVMe\StartOverride HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\stornvme\StartOverride HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\viostor\StartOverride
読み込んだ
OfflineSYSTEMキーを選択します。メニューバーから を選択し、アンロード操作を確認します。レジストリエディターとコマンドプロンプトウィンドウを閉じます。オプションインターフェイスに戻り、[続行] を選択します。システムが再起動するのを待ちます。

期待される結果: インスタンスは正常に再起動し、Windows ログインインターフェイスにアクセスできます。
解決策 3: システムディスクをアタッチしてレジストリをオフライン編集する
この解決策では、障害が発生したインスタンスのシステムディスクを正常なヘルパーインスタンスにアタッチして、レジストリを修復します。
修復を実行する前に、操作エラーによるデータ損失を防ぐために、インスタンスのスナップショットを作成してください。
手順
次の要件を満たす正常な Windows インスタンス (ヘルパーインスタンス) を準備します。
異なるイメージ: ヘルパーインスタンスのイメージは、障害が発生したインスタンスのイメージと同じであってはなりません。
同じゾーン: ヘルパーインスタンスは、障害が発生したインスタンスと同じゾーンにある必要があります。
コンソールで、障害が発生したインスタンスを 停止 します。次に、障害が発生したインスタンスからシステムディスクを デタッチ し、ヘルパーインスタンスに データディスクとしてアタッチします。
Workbench を使用してヘルパーインスタンスにログインします。
Win+Rを押し、diskmgmt.mscと入力してEnterを押し、[ディスクの管理] を開きます。新しくアタッチされたディスクを右クリックし、[オンライン] をクリックします。
Win+Rを押し、regeditと入力してEnterを押し、[レジストリエディター] を開きます。HKEY_LOCAL_MACHINEを選択します。次に、メニューバーから を選択します。
表示されるダイアログボックスで、新しくアタッチされたシステムディスク上のレジストリファイルパスに移動し、[開く] をクリックします。
たとえば、新しくアタッチされたシステムディスクのドライブ文字が D の場合、レジストリファイルのパスは
D:\Windows\System32\config\SYSTEMです。[ハイブの読み込み] ダイアログボックスで、読み込まれたハイブの一時的なキー名 (例:
OfflineSYSTEM) を指定します。次に、[OK] をクリックします。
HKEY_LOCAL_MACHINE\OfflineSYSTEM\Selectを展開します。Defaultキーの値を確認します。たとえば、値が1の場合、現在のコントロールセットはControlSet001です。
次の 3 つのレジストリパスを見つけます。各パスを右クリックし、[削除] を選択します。パスが存在しない場合は、無視してください。
HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\AliNVMe\StartOverride HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\stornvme\StartOverride HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\viostor\StartOverride
読み込んだ
OfflineSYSTEMキーを選択します。メニューバーから を選択します。アンロード操作を確認し、[レジストリエディター] を終了します。Win+Rを押し、diskmgmt.mscと入力してEnterを押し、[ディスクの管理] を開きます。新しくアタッチされたディスクを右クリックし、[オフライン] を選択します。コンソールで、修復したディスクをヘルパーインスタンスから デタッチ します。次に、元のインスタンスにシステムディスクとして アタッチ し直します。
障害が発生したインスタンスを再起動し、VNC 接続を使用してインスタンスにログインします。
期待される結果: インスタンスは正常に再起動し、Windows ログインインターフェイスにアクセスできます。
予防策
この問題を回避するには、世代をまたいで Windows インスタンスのインスタンスタイプを変更する前に、以下の前処理操作を実行します。これにより、次回の起動時に、システムは利用可能なすべてのストレージドライバーを強制的にロードします。
修復を実行する前に、操作エラーによるデータ損失を防ぐため、インスタンスの スナップショットを作成 してください。
コンソール (クラウドアシスタントを使用してコマンドをバッチで実行)
ECS コンソール - クラウドアシスタントで、[PowerShell] コマンドを作成します。
次の 3 つのコマンドを [コマンド内容] ボックスに貼り付けます。
reg delete HKLM\SYSTEM\CurrentControlSet\Services\stornvme\StartOverride /f reg delete HKLM\SYSTEM\CurrentControlSet\Services\AliNVMe\StartOverride /f reg delete HKLM\SYSTEM\CurrentControlSet\Services\viostor\StartOverride /fインスタンスタイプを変更する予定のインスタンスを選択し、[実行] をクリックします。"not found" エラーメッセージは無視してください。
コマンドが正常に実行された後、ECS コンソールでインスタンスタイプを変更できます。
インスタンス内 (コマンドを手動で実行)
インスタンスタイプを変更する予定の Windows インスタンスに ログオン します。
Win+Rを押し、powershellと入力してEnterを押し、PowerShellを開きます。次のコマンドを実行して、関連するレジストリ情報を削除します。"not found" エラーメッセージは無視してください。
reg delete HKLM\SYSTEM\CurrentControlSet\Services\stornvme\StartOverride /f reg delete HKLM\SYSTEM\CurrentControlSet\Services\AliNVMe\StartOverride /f reg delete HKLM\SYSTEM\CurrentControlSet\Services\viostor\StartOverride /fコマンドが正常に実行された後、ECS コンソールでインスタンスタイプを変更できます。
インスタンス内 (クラウドアシスタントプラグインを使用)
インスタンスタイプを変更する予定の Windows インスタンスに ログオン します。
Win+Rを押し、powershellと入力してEnterを押し、PowerShellを開きます。次のコマンドを実行して、クラウドアシスタントのパスに切り替え、関連するレジストリ情報を削除します。"not found" エラーメッセージは無視してください。
cd (Get-ChildItem "C:\ProgramData\aliyun\assist\" -Directory | Where-Object { $_.Name -match '^\d+(\.\d+){2,3}$' } | Sort-Object { [version]$_.Name } -Descending | Select-Object -First 1).FullName ./acs-plugin-manager.exe -e -P ACS-ECS-ScsiNvmeBootfixコマンドが正常に実行された後、ECS コンソールでインスタンスタイプを変更できます。