Hyper-V

Hyper-V 2012 R2 虛擬機上的 INACCESSIBLE_BOOT_DEVICE

  • December 7, 2017

我有一個 Hyper-V 2012 R2 集群,4 個 Dell PowerEdge R620 伺服器通過 FC 連接連接到 Dell PowerVault MD3600F 儲存陣列;這一切都非常簡單,所有伺服器都執行 WS2012R2,集群是幾個月前新建構的,所有驅動程序和韌體都是最新的,Windows 更新到最新的可用更新檔(即使是兩天前發布的更新檔)。還有一個 SCVMM 2012 R2 伺服器管理整個事情,但這似乎對手頭的問題並不重要。

這個集群上有幾個虛擬機在執行;其中一些是執行 Windows Server 2008 R2 的第 1 代 VM,而大多數是執行 Windows Server 2012 R2 的第 2 代 VM;這些也包括最新的可用更新;它們實際上是從集群後不久建構的模板部署的,並在 Microsoft 發布新更新檔時定期更新。

一切執行良好,但有時(即沒有明顯的原因或原因)VM 將無法啟動,並因可怕的INACCESSIBLE_BOOT_DEVICE錯誤程式碼而崩潰;這僅在啟動(或重新啟動)時發生:沒有 VM 在執行時崩潰。

每當發生這種情況時,都無法讓有故障的 VM 再次啟動;兩週前第一次發生這種情況,VM 尚未執行任何生產工作負載(它是新部署的);我們非常急於讓它工作,因此我們只是簡單地刮了一下並部署了一個新的;但是沒有找到問題的根本原因。

然後兩天前又發生了,當時我們在打更新檔後重新啟動了幾台虛擬機;其中三個沒有恢復,而其他一些則沒有任何問題啟動。

故障虛擬機即使在安全模式下也無法啟動;但是,當啟動到 Windows 恢復環境時(從系統本身,因此從本地(虛擬)磁碟,而不是從 Windows DVD;這意味著虛擬磁碟確實可以訪問),一切似乎都正常:啟動管理器正確列出要引導的系統(的輸出bcdedit /enum all /v實際上與工作 VM 的輸出相同),所有捲都可以訪問,甚至chkdsk根本沒有顯示錯誤。唯一的異常是,當執行bootrec /scanosor時bootrec /rebuildbcd,該工具說它無法找到任何 Windows 安裝(儘管 C: 卷在那裡並且完全可讀)。

這僅在 WS2012R2 第 2 代 VM 中發生(至少到目前為止),因此我假設它是由 EFI 仿真和/或 EFI 引導載入程序中的某些問題引起的;但是,這只是我的一個假設。

我提到更新的原因是因為我知道這發生在以前,並且KB2919355對此負責;此外,微軟最近發布了另一個大型更新KB3000850,這也適用於主機、虛擬機和 WS2012R2 模板。

(巧合的是,在此更新發布的第二天,微軟經歷了整個 Azure 雲平台的全球崩潰,這與我們的集群發生的事情有一些驚人的相似之處;但我只是在這裡猜測)。

我已經向 Microsoft 打開了一個支持案例,但我也在此處發帖,也許有人可以提供幫助;當然,如果微軟提供了解決方案,我會在虛擬機重新上線後立即發布。

我們將問題上報到 Microsoft Premier Support,並請了一位核心調試專家來處理它;他發現某些東西從來賓虛擬機中解除安裝了所有 Hyper-V 驅動程序,從而使它們完全無法啟動;他通過在文件系統和虛擬機系統資料庫中手動注入驅動程序,設法讓其中一個啟動,我們能夠取回一些關鍵數據(它是一個證書頒發機構);但是,VM 現在處於完全不受支持的狀態,因此我們決定重建它;我們還重建了所有其他沒有關鍵數據的虛擬機。

至於究竟是什麼原因導致驅動解除安裝,目前還在開案,尚未查明原因;這個問題隱藏在我們使用的模板中,因為它遲早會影響使用該模板部署的所有虛擬機;我們建構了另一個模板,這個模板沒有顯示相同的問題,所以我們現在執行良好……但我們仍然不知道是什麼導致了問題。


更新:

過了一會兒,我們終於找到了發生的事情(我之前只是忘了更新這個答案)。

看起來有人或某事強行更新了基礎模板中的 Hyper-V 集成服務,該模板已經擁有它們,基於主機的完全相同的作業系統版本;這導致來賓系統中存在潛在問題,這些驅動程序將被標記為重複和/或被取代,因此需要被刪除;但此事件只會在可變時間間隔後觸發,即 Windows 執行一些定期自動清理過程。這最終導致從該模板實例化的每個 VM 上完全解除安裝所有 Hyper-V 驅動程序,使其完全無法啟動。

至於是誰或什麼執行了這個更新(這不能通過插入集成服務安裝盤並執行它的安裝程序來完成,因為安裝程序正確檢測到驅動程序已經安裝並退出),我們仍然沒有任何線索。要麼是應該更了解的人使用PowerShellDISM手動完成的,要麼 SCVMM 是罪魁禍首。

引用自:https://serverfault.com/questions/651835