我不确定这个问题是与 Linux 还是 Windows 相关。不过,我们可以继续:
在具有两台 Xeon E5-2690v3 的服务器上使用qemu-system-x86_64 7.2.15
带有内核的 Debian bookworm ,我创建了第一个运行 Windows 11 的虚拟机。安装介质包含 Windows 11 Pro 21H2。6.1.0 / amd64
这次安装最初失败是因为虚拟机硬件中缺少 TPM 2.0 模块。感谢这个网站和其他人的帮助,这个问题并不难解决(安装swtpm
相关组件,并稍微扩展一下 Qemu 命令行)。按照这些步骤操作后,Windows 11 安装顺利。如上所述,这是 21H2 版本。
在安装过程中,Qemu 已经-cpu host
。也就是说,Windows 11 使用 Xeon E5-2690v3 CPU 自行安装。
然后,虚拟机开始安装更新。当我尝试将 Windows 11 功能升级到 23H2 版本时,它提示升级失败,原因是 CPU 与 Windows 11 不兼容。没错,确实如此:首先,它在该 CPU 上顺利安装,然后由于 CPU 不兼容,更新失败了。
由于我需要该虚拟机的最新版本,我在 Qemu 中对各种 CPU 类型进行了多次测试。除了一个例外,其他所有测试都失败了:如果我设置了-cpu qemu64
,更新就会成功。
虽然我很高兴(当然),但我真的很想知道它为什么有效。我多次研究过与 Windows 11 兼容的英特尔 CPU 列表,但没有看到类似的条目。AMD CPU 列表qemu64
也是如此。
因此问题是:为什么-cpu qemu64
即使此 CPU 不在受支持的 CPU 列表中,Windows 11 也可以运行?
我无法告诉您在 Windows 端发生了什么,但我可以帮助您澄清有关 qemu
-cpu host
和-cpu ${model}
标志的困惑。相关文献:QEMU/KVM CPU 模型配置。-cpu host
将通过访问 CPU 识别寄存器,以及尽可能多的可以安全虚拟化到客户机的功能。-cpu ${model}
将模拟一个反映该 CPU 型号的 CPU 识别寄存器,并将主机 CPU 上可用的数据(如果可能)传递到具有上述功能的客户机 CPU。这可能需要对硬件外设进行更“基础”的模拟。我怀疑 Windows 只是检测到它在虚拟机中运行,然后只允许明确标明是虚拟化 CPU 的基准 CPU,除非你购买了更昂贵的许可证(而且那个更新刚刚带来了更好的虚拟化 CPU 检测功能)。我不确定,这确实是 Windows 的问题。
另一种可能是,
host
你的 CPU 上的选项不支持 Windows 11 所需的 TPM 直通,但 qemu64 上的 TPM 模拟可能支持。我也不知道——我缺乏 Windows 方面的知识 :)