Hyper-V 2012 R2虚拟机上的INACCESSIBLE_BOOT_DEVICE

我有一个Hyper-V 2012 R2群集,4个Dell PowerEdge R620服务器通过FC连接连接到Dell PowerVault MD3600F存储阵列;这一切都非常简单,所有服务器都运行WS2012R2,几个月前新建的集群,所有驱动程序和固件都是最新的,Windows更新到最新的可用补丁(甚至是两天前发布的补丁).还有一个SCVMM 2012 R2服务器管理整个事情,但这对于手头的问题似乎并不重要.

此群集上运行了多个VM;其中一些是运行Windows Server 2008 R2的第1代虚拟机,而其中大多数是运行Windows Server 2012 R2的第2代虚拟机;这些也包括最新的可用更新;它们实际上是从群集后不久构建的模板部署的,并在Microsoft发布新补丁时定期更新.

一切都运行良好,但有时(即没有明显的原因或原因)VM将无法启动,崩溃与可怕的INACCESSIBLE_BOOT_DEVICE错误代码;这只发生在启动(或重启)时:运行时没有VM崩溃.

每当发生这种情况时,就无法再次启动故障VM;这是两周前第一次发生的虚拟机没有运行任何生产工作负载(它刚刚部署);我们非常急于让它上班,因此我们只是抓了它并部署了一个新的;但找不到问题的根本原因.

然后它在两天前再次发生,当我们修补了几个虚拟机后重新启动它们;其中三个没有回来,而其他一些没有任何问题启动.

即使在安全模式下,故障虚拟机也无法启动;然而,当启动到Windows恢复环境时(从系统本身,从本地(虚拟)磁盘,而不是从Windows DVD;意味着确实可以访问虚拟磁盘),一切似乎都没问题:启动管理器正确列出要引导的系统(bcdedit / enum all / v的输出实际上与工作VM的输出相同),所有卷都可以访问,甚至chkdsk也没有显示任何错误.唯一的异常是,当运行bootrec / scanos或bootrec / rebuildbcd时,该工具说它无法找到任何Windows安装(虽然C:卷就在那里而且它完全可读).

这只发生(至少到目前为止)WS2012R2第2代虚拟机,因此我假设它是由EFI仿真和/或EFI引导加载程序中的某些问题引起的;但是,这只是我的假设.

我提到更新的原因是因为我知道this happened before,并且KB2919355对此负责;此外,微软最近发布了另一个超级更新KB3000850,这也适用于主机,虚拟机和WS2012R2模板.

(巧合的是,在这次更新发布后的第二天,微软经历了整个Azure云平台的全球性崩溃,它与我们的集群发生的事情有一些惊人的相似之处;但我只是在这里猜测一下).

我已经与微软开了一个支持案例,但我也在这里发帖,也许有人可以提供帮助;当然,如果微软提供了解决方案,我会在虚拟机重新上线后立即发布.

最佳答案
我们将问题升级到Microsoft Premier Support,并让一位内核调试专家参与其中;他发现从客户虚拟机中卸载了所有Hyper-V驱动程序,导致它们完全无法启动;他设法通过手动注入文件系统和VM的注册表中的驱动程序来启动其中一个,我们能够获取一些关键数据(它是一个证书颁发机构);但是,VM现在处于完全不受支持的状态,因此我们决定重建它;我们还重建了所有其他没有关键数据的虚拟机.

至于实际导致驱动程序卸载的是什么,案例仍然打开,原因还没有找到;问题在我们使用的模板中潜伏,因为它很快就会影响使用该模板部署的所有VM;我们建立了另一个模板,而且这个模板没有显示相同的问题,所以我们现在运行正常……但我们仍然不知道是什么原因引起了问题.

更新:

过了一会儿,我们终于找到了发生的事情(我之前忘了更新这个答案).

看起来有人或某事强行更新了已经拥有它们的基本模板中的Hyper-V集成服务,它基于完全相同的O.S.释放主机;这导致客户系统中的潜在问题,其中这些驱动程序将被标记为重复和/或被取代,因此需要被删除;但此事件只会在可变时间间隔后触发,此时Windows会执行一些定期的自动清理过程.这最终导致在从该模板实例化的每个VM上完全卸载所有Hyper-V驱动程序,使其完全无法启动.

至于谁或什么执行此更新(通过插入Integration Services安装盘并运行其设置无法完成,因为安装程序正确检测到驱动程序已经安装并退出),我们仍然没有任何线索.应该知道更好的人使用PowerShellDISM手动完成它,或者SCVMM是罪魁祸首.

转载注明原文:Hyper-V 2012 R2虚拟机上的INACCESSIBLE_BOOT_DEVICE - 代码日志