请参阅下面的更新,了解我对该问题的更普遍性质的发现。
我有一台运行 OVMF 固件的 Windows VM,该固件带有 VFIO 直通功能,用于在 Arch Linux 主机上运行的显卡。我正在尝试在该 VM 中启用 Windows Sandbox。Microsoft 文档表明可以在 L1 VM 中运行 Sandbox,尽管他们的文档是为 Hyper-V 虚拟机管理程序编写的。
当我在虚拟机中启用 Windows Sandbox 并在安装过程中重新启动时,虚拟机在启动过程中大约半秒后失败。它会重复两次,然后尝试启动修复。这是视频这显示了发生了什么(对质量表示歉意)。此视频结束后,“自动修复”告诉我我的 PC 无法正常启动。
如果从该环境进入恢复命令行并运行dism /image:D:\ /disable-feature /featurename:containers-disposableclientvm
(即禁用 Windows Sandbox),我就能正常启动我的系统。在我的系统上,这个问题始终会重现。
文档表明,如果机器配置不支持 Windows Sandbox,则它将不会成为 Windows 功能对话框中的启用选项,如果我设置主机内核参数,kvm_intel.nested=0
它确实会变灰。
该问题最初出现在 Windows 10 Pro 版本 1909 上,但更新到版本 2004(内部版本 19041.388)后问题仍然存在。
我的问题是:我怎样才能获得错误消息而不是无消息的崩溃,以及/或者我怎样才能使其不崩溃?我发现,如果没有错误消息或有用的日志条目,很难用 Google 来查找这种情况,而且我不知道接下来该怎么做。
我尝试过的事情:
- 按照上述方法将客户操作系统从 1909 更新至 2004,但无济于事。
- 移除 GPU 和 USB 直通并运行 QXL + Spice 图形。这没有帮助。
- 将虚拟磁盘复制到硬盘上并直接从硬件上启动(即从等式中删除 Linux 虚拟机管理程序)。这有效,并且我能够按预期启用 Windows Sandbox 并启动沙盒 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 -a
:Linux myhostnamehere 5.7.9-arch1-1 #1 SMP PREEMPT Thu, 16 Jul 2020 19:34:49 +0000 x86_64 GNU/Linux
libvirt 域配置:粘贴箱。我删除了一些 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
无需重启即可成功安装,但一旦重启就会出现故障症状。
- Windows
Containers
功能顺利启用。 - 运行
bcdedit /set hypervisorlaunchtype Auto
(Containers
启用,不管它值不值得)会导致与上述相同的崩溃症状,删除该条目可以修复它,就像 Windows 功能一样。 - 正在运行
bcdedit /set hypervisorlaunchtype Off
(在重启之前或重启恢复期间启用上述任何有问题的功能)避免碰撞,但阻止我使用 Windows Sandbox 等虚拟化功能(“未找到虚拟机管理程序”错误)。 - 使用以下方式运行单独的 Windows VM:更简单的配置,特别是使用 BIOS 固件而不是 OVMF UEFI 固件,当我启用 Windows Sandbox 时仍然会跳转到自动启动修复。
- 将主机内核参数
kvm_intel.pml
(默认为是)设置为否没有效果,问题仍然存在。(一些帖子在线参考了与此参数相关的一个较旧的问题,该问题应该已经修复。无论如何,这个调整对我没有帮助。)
基于此,我有信心将问题总结为:尽管具有嵌套虚拟化硬件和主机内核功能,但我的主机上的 Windows 客户机本身无法运行虚拟机管理程序。我的硬件和主机支持嵌套虚拟化,Windows 引用了 Hyper-V 环境中对嵌套虚拟化的支持。在非 Hyper-V 环境中,我需要做什么才能使其正常工作,或者找出不工作的原因?