Joe*_*Joe 4 virtualbox ubuntu kvm-switch
我的设置是:
症状:
我确实启用了嵌套:
$ systool -m kvm_intel -v | grep nested
nested = "Y"
$ cat /sys/module/kvm_intel/parameters/nested
Y
Run Code Online (Sandbox Code Playgroud)
在我的 VM 配置中('virsh edit')
<features>
<acpi/>
<apic/>
<vmport state='off'/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Haswell</model>
<feature policy='require' name='vmx'/>
</cpu>
Run Code Online (Sandbox Code Playgroud)
L1 来宾中的 systeminfo 说:
Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
Run Code Online (Sandbox Code Playgroud)
知道为什么我不能使用 Windows 主机在 L2 上实现嵌套虚拟化吗?
小智 5
在这个特定问题上花了太长时间后,我找到了一个解决方案。我也遇到了在 Windows Server 2019 VM 来宾上运行嵌套虚拟化的问题。安装 HyperV 后,我的 VM 将无法启动。
在这种特殊情况下,我使用 KVM/Qemu 作为我的 L0 管理程序运行 Linux,并运行我需要运行 docker 的 Windows Server 2019 VM。我们的一个客户有一组 PowerShell 脚本,用于设置 docker 开发环境(我非常不喜欢以 Windows 为中心的环境)。
首先,我确认我的kvm-intel内核模型启用了嵌套虚拟化支持:
cat /sys/module/kvm_intel/parameters/nested
Run Code Online (Sandbox Code Playgroud)
所以这不是问题,但值得一提的是,这是支持 KVM/Qemu 设置的嵌套虚拟化所必需的。
实际的解决方案是从(默认)更改我在 Virt Manager 中的 CPU 配置
<cpu mode="host-model" check="partial"/>
Run Code Online (Sandbox Code Playgroud)
到:
<cpu mode="custom" match="exact" check="partial">
<model fallback="allow">Skylake-Client-noTSX-IBRS</model>
<feature policy="disable" name="hypervisor"/>
<feature policy="require" name="vmx"/>
</cpu>
Run Code Online (Sandbox Code Playgroud)
这迫使我的 CPU 模型Skylake-Client-noTSX-IBRS代替Skylake-Client-IBRS(这是默认值)。出于某种原因,TSX 给我带来了严重的问题。
<feature policy="disable" name="hypervisor" /> 使 Windows “认为”它不是作为 VM 运行的。
<feature policy="require" name="vmx" />强制vmxCPU 功能允许 Windows Server 2019 VM 本身能够运行其他 VM。
如果您查看 Windows 任务管理器(从 VM 内部),您会看到 Windows 认为处理器是裸机处理器(与虚拟处理器相反),同时具有虚拟化支持。此时,II 可以为 Windows 安装 Docker 并开始使用它。设置是:
我希望这可以帮助其他人在 KVM 中运行的 Windows 来宾上遇到嵌套虚拟化问题。无可否认,这是一个边缘案例,但我可以看到其他人遇到了同样的挑战。
要让 Hyper-V 在 KVM 虚拟机中工作,您需要按原样传递主机 CPU 模型,并禁用(虚拟 CPU 的)管理程序 CPU 功能。您的虚拟机 XML 应如下所示:
<cpu mode='host-model' check='partial'>
<model fallback='allow'/>
<feature policy='disable' name='hypervisor'/>
</cpu>
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用 Q35 芯片组创建 VM,而不是 i440fx。理想情况下,来宾应该使用 UEFI 启动。如果您使用 BIOS 启动,则需要 SeaBIOS 1.10(我想,已经有一段时间了)或更高版本。对于 Ubuntu,这意味着 Ubuntu 18.04 LTS 或更高版本。
| 归档时间: |
|
| 查看次数: |
3475 次 |
| 最近记录: |