在 KVM 虚拟机中安装 Windows 虚拟化功能会导致早期引导来宾崩溃

Gle*_*len 5 virtualization hyper-v virtual-machine linux-kvm libvirt

请参阅下面的更新,了解我发现的有关此问题的更一般性质的内容。

我有一个运行 OVMF 固件的 Windows VM,带有 VFIO 直通功能,用于在 Arch Linux 主机上运行的显卡。我正在尝试在所述 VM 中启用 Windows Sandbox。Microsoft 文档表明在 L1 VM 中运行 Sandbox 应该是可能的,尽管他们的文档是为 Hyper-V 管理程序编写的。

当我在我的 VM 中启用 Windows Sandbox 并作为其安装过程的一部分重新启动时,VM 在启动过程中大约半秒失败。它会这样做两次,然后尝试启动修复。这是一个显示发生了什么的视频(对质量表示歉意)。该视频结束后,自动修复告诉我我的电脑无法正常启动。

如果我从那个环境进入恢复命令行并运行dism /image:D:\ /disable-feature /featurename:containers-disposableclientvm(即禁用 Windows Sandbox),我就可以很好地启动到我的系统中。在我的系统上,此问题始终可重现。

文档表明,如果计算机配置不支持 Windows 沙盒,则它不会成为 Windows 功能对话框中的启用选项,并且如果我设置了主机内核参数,kvm_intel.nested=0它确实会变灰。

此问题最初出现在 Windows 10 Pro 版本 1909 上,但更新到版本 2004(内部版本 19041.388)后问题仍然存在。

那么,我的问题是:我怎样才能得到错误消息而不是无消息崩溃,和/或我怎样才能让它不崩溃?我发现在没有错误消息或有用的日志条目的情况下很难在这种情况下进行谷歌搜索,而且我不知道从哪里开始。

我尝试过的事情:

  • 如上所述,从 1909 年到 2004 年的客户操作系统更新无济于事。
  • 移除 GPU 和 USB 直通并使用 QXL + Spice 图形运行。这没有帮助。
  • 将虚拟磁盘复制到硬盘驱动器并直接在硬件上从它启动(即从等式中删除 Linux 管理程序)。这有效,我能够按预期启用 Windows 沙箱并启动沙箱 VM,但是并不能解决我的问题。对我来说,这证实了这个问题与我的虚拟机管理程序的交互有关,而不是与 Windows 安装有关。
  • cpu 标记配置变体,都无济于事(请参阅下面链接的 libvirt 域 XML 文件):
    • mode='host-passthrough' check='partial' migratable='on'
    • mode='host-passthrough' check='partial' migratable='off'
    • mode='host-model' check='partial
  • Q35机种代替i440FX,无济于事。不幸的是,我手头没有使用的确切配置,但我切换了domain/os/type[machine]XML 中的属性,将一些 PCI 控制器更改为 PCIe 控制器,并添加了一些 PCIe 控制器而没有其他调整。

配置:

主持人uname -aLinux myhostnamehere 5.7.9-arch1-1 #1 SMP PREEMPT Thu, 16 Jul 2020 19:34:49 +0000 x86_64 GNU/Linux

libvirt 域配置:Pastebin。我已经编辑了一些 ID,但这是逐字逐句的。

当这些崩溃发生时,主机 dmesg 中不会出现任何有趣的内容。

Qemu 版本 5.0.0-7,libvirt 版本 6.5.0-1。(这些是包管理器版本标签。)

来宾:Windows 2004 版(操作系统内部版本 19041.450),专业版

更新:

(在上面的配置部分添加了来宾操作系统版本。)

我已经尝试了以下额外的事情,并相应地更新了问题标签和标题。

  • 在我的主机上,在 Linux 客户机上测试了嵌套虚拟化。我在我的 Arch 主机上的 Ubuntu 20.04 中成功运行了 Fedora 29,所以在我的硬件和 L0 配置上嵌套虚拟化本身不是问题。
  • 尝试了以下附加的 Windows 功能。(这些是 DISM 使用的名称。)在我在功能安装期间执行的重新启动时,所有这些都会产生与上述相同的早期启动崩溃和重新启动症状。
    • Microsoft-Hyper-V-All
    • VirtualMachinePlatform
    • HypervisorPlatform 无需重新启动即可成功安装,但一旦重新启动就会产生故障症状。
  • ContainersWindows功能可以在不剧。
  • 运行bcdedit /set hypervisorlaunchtype AutoContainers启用,不管它的价值)会导致与上述相同的崩溃症状,删除该条目可以修复它,就像使用 Windows 功能一样。
  • 运行bcdedit /set hypervisorlaunchtype Off(在重新启动之前或在重新启动恢复期间启用上述任何有问题的功能)可避免崩溃,但会阻止我使用 Windows Sandbox 等虚拟化功能(“未找到管理程序”错误)。
  • 使用更简单的配置运行单独的 Windows VM ,特别是使用 BIOS 固件而不是 OVMF UEFI 固件,当我启用 Windows Sandbox 时,仍然会跳转到自动启动修复。
  • 将主机内核参数kvm_intel.pml(默认为 yes)设置为 no 没有效果,问题依然存在。(一些在线帖子引用了与此参数相关的旧问题,该问题应该已修复。无论如何,此调整对我没有帮助。)

基于此,我有信心将问题总结为:尽管具有嵌套的虚拟化硬件和主机内核功能,但我主机上的 Windows 来宾本身无法运行管理程序。我的硬件和主机支持嵌套虚拟化,Windows 参考支持 Hyper-V 环境中的嵌套虚拟化。在我的非 Hyper-V 环境中,我需要做什么才能让它工作,或者找出为什么它不工作的错误?