现在嵌套虚拟化越来越火了,很多老铁们也开始研究微软的Hyper-v嵌套虚拟化,那什么又是嵌套虚拟化那?

什么是嵌套虚拟化

  •    简单的说就是允许你将虚拟机用作 Hyper-V 主机并在该虚拟化的主机中创建虚拟机,这对于开发和测试环境尤其有用。要在至少运行 Windows Server 2016 Technical Preview 4 或 Windows 10 构建 10565 物理 HYPER-V 主机和虚拟化的主机上。
    在下图中,你可以看到一个主机运行虚拟机,从而运行自己的虚拟机,这是通过嵌套虚拟化实现的。

微软Hyper-v嵌套虚拟化

不同的虚拟化

  •   下图是正常的虚拟化场景(无虚拟化嵌套),Hyper-V管理程序拥有对虚拟化的扩展完全控制权(橙色箭头部分),但这些虚拟化扩展不能被来宾OS调用。

微软Hyper-v嵌套虚拟化

  •    与之形成对比的是,下面的嵌套的图。Hyper - V 已经配置使虚拟化扩展可以被来宾虚机调用。来宾虚机可以利用这一点,并安装自己的管理程序。它可以运行自己的来宾虚机。

微软Hyper-v嵌套虚拟化

如何启用嵌套虚拟化

PS:下面涉及的所有命令均是在物理服务器上运行

  • 首先我们安装一台虚拟机,在虚拟机里安装Hyper-v,您会得到如下报错

微软Hyper-v嵌套虚拟化

  • 就像截图上说的,我们虚拟机上没有开启虚拟化功能,我们可以先查看下虚拟机清单

Get-VM

微软Hyper-v嵌套虚拟化

  • 找到我们要开启虚拟化功能的机器名称,查看该虚拟机的属性。通过截图内标红位置我们可以看到,该虚拟机没有开启嵌套虚拟化功能。

Get-VMProcessor -VMName 虚拟机名称 | fl

微软Hyper-v嵌套虚拟化

  • 如图所示,使用命令开启嵌套虚拟化功能,这个时候会报如下错误,如图所示:

Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName 虚拟机名称

微软Hyper-v嵌套虚拟化

  • 之所以出现上述错误是因为该虚拟机正在运行中,不允许修改,我们需要先将虚拟机关机后再次修改。
    微软Hyper-v嵌套虚拟化

  • 关机后我们再次运行Set命令,如图所示:

Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName 虚拟机名称
微软Hyper-v嵌套虚拟化

  • 修改完成后我们再次Get下虚拟机的状态,如图所示,我们看到已经开启嵌套虚拟化功能。

Get-VMProcessor -VMName 虚拟机名称 | fl

微软Hyper-v嵌套虚拟化

  • 这个时候我们开启虚拟机,再次安装Hyper-v功能,如图所示:

微软Hyper-v嵌套虚拟化

微软Hyper-v嵌套虚拟化