在阿里雲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藍屏錯誤。
應急預案
此預案旨在以最快速度恢複業務訪問,而非根治問題。
若需快速恢複業務系統,可先變更配置回原來的規格。
在業務恢複後,若仍需升級到新的執行個體規格,請先參考預防措施對執行個體進行預先處理,然後再次規劃新的營運視窗,重新變更執行個體規格。
故障解決方案
方案一:進入安全模式自動修複(推薦)
此方案利用Windows安全模式自動載入通用驅動的特性,自動修複驅動問題。
在執行修複操作前,請務必為執行個體建立快照,以防操作失敗導致資料丟失。
操作步驟
通過VNC登入故障執行個體。執行個體在兩次啟動失敗後,會自動進入如圖所示修複介面,在此介面選擇疑難解答,進入進階選項介面。

在進階選項介面,選擇啟動設定。

在啟動設定介面,點擊重啟。

執行個體重啟後將進入進階啟動選項菜單,選擇網路安全模式並按
Enter,等待系統載入進入安全模式。
根據介面提示登入系統,進入安全模式案頭。此時會自動載入並註冊新的儲存驅動。

在控制台重啟執行個體後,重新通過VNC登入執行個體。 若執行個體正常啟動並進入Windows案頭,證明問題已解決。

方案二:通過修複模式離線編輯註冊表
此方案通過Windows修複環境中的命令列工具,離線修改註冊表以強制載入儲存驅動。
在執行修複操作前,請務必為執行個體建立快照,以防操作失敗導致資料丟失。
操作步驟
通過VNC登入故障執行個體,執行個體在兩次啟動失敗後,會自動進入如圖所示修複介面,選擇疑難解答進入進階選項介面。

選擇命令提示字元。

選擇具有管理員權限的賬戶(預設adminitrator)並輸入密碼,進入命令提示字元環境。


在命令提示字元視窗中,輸入
regedit並按斷行符號鍵,開啟登錄編輯程式。
選中
HKEY_LOCAL_MACHINE後,依次選擇功能表列的
在彈出的檔案選擇對話方塊中,導航至系統硬碟的註冊表檔案路徑,通常為
C:\Windows\System32\config\SYSTEM,並點擊開啟。在載入登錄區對話方塊中,為載入的登錄區指定一個臨時的項名稱,例如
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項,依次選擇功能表列的,確認卸載。關閉登錄編輯程式和命令提示字元視窗,返回到選項介面,選擇繼續,等待系統重啟。

預期結果: 執行個體正常重啟並進入Windows登入介面。
方案三:通過掛載系統硬碟離線編輯註冊表
此方案通過將故障執行個體的系統硬碟掛載到一台正常的輔助執行個體上進行註冊表修複。
在執行修複操作前,請務必為執行個體建立快照,以防操作失敗導致資料丟失。
操作步驟
準備一台正常啟動並執行Windows執行個體(輔助執行個體),要求如下:
不同鏡像:輔助執行個體的鏡像不能與故障執行個體相同。
相同可用性區域:輔助執行個體必須和故障執行個體在同一可用性區域。
使用Workbench終端串連登入輔助執行個體,按
Win+R輸入diskmgmt.msc並按Enter鍵,進入磁碟管理,右鍵新掛載的磁碟,單擊聯機。
按
Win+R輸入regedit並按Enter鍵,進入登錄編輯程式。選中
HKEY_LOCAL_MACHINE後,依次選擇功能表列的
在彈出的對話方塊中,導航至新掛載系統硬碟的註冊表檔案路徑,並點擊開啟。
例如新掛載的系統硬碟盤符為D,則註冊表檔案路徑為
D:\Windows\System32\config\SYSTEM。在載入登錄區對話方塊中,為載入的登錄區指定一個臨時的項名稱,例如
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鍵,進入磁碟管理,右鍵新掛載的磁碟,單擊離線。重啟故障執行個體後,通過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選擇計劃變更配置的執行個體後單擊執行。忽略任何“找不到”的錯誤提示。
命令執行成功後,即可在ECS控制台對執行個體執行變更配置操作。
執行個體內(手動執行命令)
登入到計劃變更配置的Windows執行個體。
按
Win+R輸入powershell並按Enter鍵,開啟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命令執行成功後,即可在ECS控制台對該執行個體執行變更配置操作。
執行個體內(使用雲助手外掛程式)
登入到計劃變更配置的Windows執行個體。
按
Win+R輸入powershell並按Enter鍵,開啟PowerShell。執行以下命令,切換到雲助手所在路徑並刪除相關註冊表資訊。忽略任何“找不到”的錯誤提示。
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控制台對執行個體執行變更配置操作。