如何在Ubuntu中启用嵌套虚拟化。

我想在我的操作系统上进行一些库测试。所以我需要几个环境来运行KVM。但我发现我的虚拟机无法运行KVM。

我使用的是VirtualBox 4.2。


不确定它们是否适合替代,但我想提一下user-mode linux更多链接)- LXC(Linux容器)- chroot - Linux命名空间(从3.8内核开始支持)。 - ignis
3个回答

KVM需要VT-X/AMD-V,但是VirtualBox不会将VT-X/AMD-V传递给客户操作系统

因此,KVM无法在VirtualBox中运行(至少目前是这样)。请跟踪错误票号#4032

VT-X和AMD-V(也称为虚拟化扩展)以原生方式在CPU上运行客户操作系统。没有它们,虚拟化软件必须通过软件解释操作系统的操作码,这样非常慢。

目前,您可以选择:

  • 在一个超级监视器中运行KVM,该超级监视器将虚拟化扩展传递给客户机(例如,在VMware Workstation 8中运行的KVM),或者
  • 在VirtualBox中运行另一个超级监视器(例如,在VirtualBox中运行的VirtualBox)。 这个选项会非常慢,因为客户机将缺少VT-X/AMD-V。

关于将其在主机上运行的可能性怎么样?例如,他可以共享想要在虚拟机中测试的文件夹,并在主机上运行安卓仿真器。那样的性能如何? - Toskan
3检查您的CPU是否支持KVM的命令是:egrep -c "(svm|vmx)" /proc/cpuinfo。如果返回值为0,则表示不支持。 - Sadegh

Virtualbox刚刚发布了(2018年12月18日)6版本,预计将支持嵌套虚拟化。然而,目前看来在Intel处理器上仍然不可用。 https://www.virtualbox.org/wiki/Downloads 关于主要问题(在Ubuntu中启用嵌套虚拟化)- KVM模块支持Ubuntu 16及以上版本的嵌套虚拟化(可能也支持较低版本)。不确定在主机上使用XEN,但是您肯定可以在KVM中嵌套XEN。

4您可以使用以下方法“激活”嵌套虚拟化:vboxmanage modifyvm yournestedvmname --nested-hw-virt on,或者在您的.vbox文件的CPU部分添加<NestedHWVirt enabled="true"/>,但唯一的效果将是在用户界面上激活相应的复选框。在客户机上运行cat /proc/cpuinfo,仍然没有vmx。 - George Bungarzescu
截至2020年3月1日,VirtualBox也适用于Intel处理器(已在i5、i7和笔记本处理器上进行了测试)。测试版本为VirtualBox 6.1.4,但您仍然需要在命令行中使用--nested-hw-virt来激活嵌套虚拟化。您可以将其用于Windows测试环境中的Hyper-V/Docker甚至ESXi。之前的VirtualBox 6.1版本(2019年12月底、2020年1月)可能也能工作,但未经过测试。您可以通过阅读更改日志https://www.virtualbox.org/search?q=intel+nested&noquickjump=1&ticket=on&changeset=on&wiki=on或git提交来查看时间线。 - George Bungarzescu

在 UBUNTU 中启用 KVM 的嵌套虚拟化功能 在启用嵌套 VT 功能之前,请关闭所有正在运行的虚拟机。

接下来,卸载 KVM 模块。

要在 INTEL 系统上卸载 KVM 模块,请运行以下命令:

$ sudo modprobe -r kvm_intel

在AMD系统上:
$ sudo modprobe -r kvm_amd

使用以下命令在支持嵌套特性的英特尔CPU上重新加载KVM模块:
$ sudo modprobe kvm_intel nested=1

使用以下命令在AMD CPU上启用嵌套功能重新加载KVM模块:
$ sudo modprobe kvm_amd nested=1

永久启用嵌套虚拟化 根据以下步骤进行操作: