ECS コンソールで Windows インスタンスの世代間のインスタンスタイプ変更を実行した後、インスタンスの起動に失敗し、「INACCESSIBLE_BOOT_DEVICE」エラーが表示されたブルー スクリーンが発生して、オペレーティングシステムがロードできなくなることがあります。このトピックでは、この問題を解決する方法について説明します。
問題の説明
発生条件
この問題は、Windows を実行している ECS インスタンスで世代間のインスタンスタイプ変更を実行した場合に発生します。たとえば、インスタンスファミリーを ecs.g7 (VirtIO-SCSI) から ecs.g8i (NVMe) に変更した場合などです。
症状
ECS コンソールでインスタンスを起動した後、リモートデスクトップ接続 (RDP) を使用してインスタンスに接続できません。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 回連続で起動に失敗すると、インスタンスは自動的に回復画面に入ります。この画面で、[トラブルシューティング] を選択して [詳細オプション] 画面に移動します。
-
[詳細オプション] 画面で、[スタートアップ設定] を選択します。
-
[スタートアップ設定] 画面で、[再起動] をクリックします。
-
インスタンスが再起動すると、[詳細ブートオプション] メニューが表示されます。[セーフモードとネットワーク] を選択し、
Enterキーを押します。システムがセーフモードでロードされるのを待ちます。 -
画面の指示に従ってシステムにログインし、セーフモードのデスクトップに入ります。新しいストレージドライバーが自動的にロードされ、登録されます。
-
ECS コンソールで、インスタンスを再起動し、VNC 接続を使用してインスタンスにログインします。インスタンスが正常に起動し、Windows デスクトップに入ると、問題は解決されます。
ソリューション 2:レジストリをオフラインで編集
このソリューションでは、Windows 回復環境のコマンドラインツールを使用してレジストリをオフラインで変更し、ストレージドライバーを強制的にロードします。
修復を実行する前に、操作ミスによるデータ損失を防ぐために、インスタンスの 手動スナップショットを作成する必要があります。
操作手順
-
VNC 接続を使用して失敗したインスタンスにログインします。2 回連続で起動に失敗すると、インスタンスは自動的に回復画面に入ります。[トラブルシューティング] を選択して [詳細オプション] 画面に移動します。
-
[コマンドプロンプト] を選択します。
-
管理者権限を持つアカウント (デフォルトは administrator) を選択し、パスワードを入力してコマンドプロンプトを開きます。
-
コマンドプロンプトウィンドウで
regeditと入力し、Enter キーを押して [レジストリエディター] を開きます。 -
HKEY_LOCAL_MACHINEを選択します。次に、メニューバーから を選択します。 -
表示されるファイル選択ダイアログボックスで、システムディスク上のレジストリファイルのパス (通常は
C:\Windows\System32\config\SYSTEM) に移動し、[開く] をクリックします。 -
[ハイブの読み込み] ダイアログボックスで、ロードされたハイブの一時的なキー名 (例:
OfflineSYSTEM) を指定し、[OK] をクリックします。 -
HKEY_LOCAL_MACHINE\OfflineSYSTEM\Selectを展開し、Defaultキーの値を確認します。たとえば、値が1の場合、現在のコントロールセットはControlSet001です。 -
次のレジストリパスを見つけます。各パスを右クリックし、[削除] を選択します。パスが存在しない場合は、無視してください。
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 インスタンス (ヘルパーインスタンス) を準備します。
-
異なるイメージ:ヘルパーインスタンスのイメージは、失敗したインスタンスのイメージと異なる必要があります。
-
同じゾーン:ヘルパーインスタンスは、失敗したインスタンスと同じゾーンにある必要があります。
-
-
ECS コンソールで、失敗したインスタンスを 停止し、そのシステムディスクを デタッチしてから、システムディスクをデータディスクとしてヘルパーインスタンスにアタッチします。
-
ワークベンチを使用してヘルパーインスタンスにログインします。
Win+Rキーを押し、diskmgmt.mscと入力してEnterキーを押し、[ディスクの管理] を開きます。新しくアタッチされたディスクを右クリックし、[オンライン] をクリックします。 -
Win+Rキーを押し、regeditと入力してEnterキーを押し、[レジストリエディター] を開きます。 -
HKEY_LOCAL_MACHINEを選択し、次にメニューバーから を選択します。 -
表示されるダイアログボックスで、新しくアタッチされたシステムディスク上のレジストリファイルのパスに移動し、[開く] をクリックします。
たとえば、新しくアタッチされたシステムディスクのドライブ文字が D の場合、レジストリファイルのパスは
D:\Windows\System32\config\SYSTEMです。 -
[ハイブの読み込み] ダイアログボックスで、ロードされたハイブの一時的なキー名 (例:
OfflineSYSTEM) を指定し、[OK] をクリックします。ハイブがロードされると、HKEY_LOCAL_MACHINE ノードの下に新しい OfflineSYSTEM キーが表示されます。
-
HKEY_LOCAL_MACHINE\OfflineSYSTEM\Selectを展開し、Defaultキーの値を確認します。たとえば、値が1の場合、現在のコントロールセットはControlSet001です。 -
次のレジストリパスを見つけます。各パスを右クリックし、[削除] を選択します。パスが存在しない場合は、無視してください。
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キーを押し、[ディスクの管理] を開きます。新しくアタッチされたディスクを右クリックし、[オフライン] をクリックします。 -
ECS コンソールで、修復したクラウドディスクをヘルパーインスタンスから デタッチし、元のインスタンスにシステムディスクとして アタッチし直します。
-
失敗したインスタンスを再起動し、VNC 接続を使用してログインします。
期待される結果:インスタンスは正常に再起動し、Windows のログイン画面が表示されます。
予防策
この問題を回避するには、Windows インスタンスで世代間のインスタンスタイプ変更を実行する前に、次の手順を実行する必要があります。これらのタスクにより、次回の起動時にシステムが利用可能なすべてのストレージドライバーを強制的にロードします。
修復を実行する前に、操作ミスによるデータ損失を防ぐために、インスタンスの 手動スナップショットを作成する必要があります。
コンソール (クラウドアシスタント)
-
ECS コンソール のクラウドアシスタントページで、PowerShell コマンドを作成します。
-
次のコマンドを [コマンド内容] ボックスに貼り付けます。
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 コンソールでインスタンスタイプを変更できます。