在今年早些时候,微软宣布将开发一种新技术,称之为嵌套虚拟化技术,这样用户就可以在Hyper-V虚拟机中运行Hyper-V容器,即在Hyper-V虚拟机中跑Hyper-V虚拟机。现在,在微软推送的Win10预览版10565中已经开放了该功能的早期版本。需要说明的是,这项功能是针对系统自带Hyper-V虚拟机的。
该功能本质上是把在虚拟机中运行虚拟机监控程序所需的一些硬件功能进行了虚拟化。
听起来有点绕,Hyper-V虚拟机的运行依靠硬件虚拟化技术支持,例如Intel VT-x和AMD-V。通常,一旦Hyper-V在宿主机中安装后,虚拟机监控程序会将该技术从客户机中隐藏,阻止客户虚拟机再安装Hyper-V。如下图所示,在之前的版本中,宿主机的Hyper-V虚拟机监控程序拥有虚拟化扩展功能的完全控制权限,功能不对客户机开放。
而在最新版本中,宿主机的Hyper-V虚拟机监控程序则对客户机开放虚拟化扩展功能,因此客户机也可以拥有自己的虚拟机。
如下图所示,你可以看到在一台电脑中运行了一个Hyper-V虚拟机,而这个Hyper-V虚拟机里面又运行了一个虚拟机。
需要注意的是,该功能目前还处于预览阶段,因此不可避免的会出现一些问题,不可用于生产环境。以下是已知问题:
嵌套版本必须都是最新版本,Windows Server 2012 R 2以及Windows10预览版10565之前的版本都不可以。
一旦开启了虚拟化嵌套技术,以下功能将无法兼容,使用这些功能将导致虚拟机停止工作或功能不起作用:
-动态内存;
-Runtime内存调整;
-在虚拟机中应用checkpoints时将不起作用;
-动态迁移功能;
必须开启MAC欺骗技术才能保证客户机正常网络连接;
目前只支持Intel VT-x虚拟化技术;
电脑需要有足够大的内存!
开启虚拟化技术嵌套的方法:
创建一个Hyper-V虚拟机,之后关闭;
运行虚拟化嵌套技术开启脚本(点此下载):
Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1
~/Enable-NestedVm.ps1 -VmName
在客户机中启用Hyper-V功能;
开启客户机网络支持:
在宿主机中运行下面的Powershell命令即可:
Set-VMNetworkAdapter -VMName -MacAddressSpoofing on
此时就可以在客户机中继续安装嵌套的客户机了。