开启Hyper-V的Windows主机下,如何让VirtualBox中的Ubuntu虚拟机正常使用/dev/kvm进行嵌套虚拟化
开启Hyper-V的Windows主机下,如何让VirtualBox中的Ubuntu虚拟机正常使用/dev/kvm进行嵌套虚拟化
首先得给你明确一个核心点:Hyper-V和VirtualBox的原生虚拟化模式是互斥的。当你在Windows主机启用Hyper-V(包括Windows Hypervisor Platform)后,系统会优先加载Hyper-V的底层hypervisor,它会独占CPU的虚拟化扩展(比如Intel VT-x/AMD-V),这就导致VirtualBox没法再把这些虚拟化能力传递给内部的Ubuntu虚拟机,所以你之前能看到的/dev/kvm就消失了。
针对你不想迁移500GB虚拟机的情况,给你两个可行的解决思路:
1. 临时切换Hyper-V状态,按需使用
这是最直接的办法,毕竟你需要Hyper-V是为了GPU直通的VM,而VirtualBox的VM需要KVM嵌套虚拟化,两者没法同时运行:
- 当你需要使用VirtualBox里的Ubuntu虚拟机并启用KVM时,临时关闭Hyper-V和Windows Hypervisor Platform:
- 打开Windows的「控制面板」→「程序和功能」→「启用或关闭Windows功能」
- 取消勾选「Hyper-V」和「Windows Hypervisor Platform」,点击确定后重启电脑
- 重启后VirtualBox会恢复原生虚拟化模式,Ubuntu里的
/dev/kvm就会回来,嵌套虚拟化也能正常工作
- 当你需要使用Hyper-V的GPU直通VM时,再重新勾选这两个选项并重启,就能切换回Hyper-V环境
2. 尝试将VirtualBox虚拟机磁盘转换为Hyper-V兼容格式(无需完整迁移)
虽然你不想手动迁移,但可以试试用工具把VirtualBox的VDI磁盘转换为Hyper-V支持的VHDX格式,这样不用重新配置虚拟机的系统环境:
- 首先关闭VirtualBox的Ubuntu虚拟机
- 打开命令提示符(以管理员身份),切换到VirtualBox的安装目录(比如
cd C:\Program Files\Oracle\VirtualBox) - 执行转换命令:
VBoxManage clonehd "你的虚拟机磁盘路径.vdi" "转换后的路径.vhdx" --format VHDX - 然后在Hyper-V管理器里新建一个虚拟机,选择刚才转换好的VHDX磁盘作为系统盘,再配置嵌套虚拟化和GPU直通
- 这个方法相当于把磁盘格式转一下,不用重新安装系统,能节省不少时间,而且Hyper-V本身也支持嵌套虚拟化,你可以在Hyper-V的Ubuntu虚拟机里继续用KVM
另外要提醒你:如果坚持同时开着Hyper-V用VirtualBox,VirtualBox会自动切换到Hyper-V后端模式,这种情况下是没法在Ubuntu里启用KVM的,因为Hyper-V的嵌套虚拟化只支持在Hyper-V虚拟机里再开Hyper-V或VMware,不兼容KVM。
备注:内容来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

