系统极客一直在努力
专注于操作系统及软件使用教程

Hyper-V将开始支持嵌套虚拟化

Hyper-V将开始支持嵌套虚拟化

今年早些时候,微软宣布 Hyper-V 将开始支持嵌套虚拟化,以让大家可以在 Hyper-V 虚拟机中运行 Hyper-V 容器,而在刚发布的 Windows 10 Build 10565 中微软已经开始提供嵌套虚拟化功能的早期预览。之所以说是”早期预览”表明目前已经有许多已知问题,而且功能还并没有完善,只提供给专业人士提前了解功能。

什么是嵌套虚拟化?

之前我们曾提到过 Hyper-V 需要依靠硬件虚拟化支持(Intel VT-x 或 AMD-V)来运行虚拟机,而不允许在虚拟机中再安装 Hyper-V 进行嵌套。而使用嵌套虚拟化技术则可以将硬件虚拟化层暴露给 Guest OS,这就使得我们可以在 Hyper-V 的 Guest OS 再安装 Hyper-V 来跑虚拟机。

在下图中,我们可以看到目前 Windows 10 Build 10565 Hyper-V 中的 Guest OS 中已可再安装 Hyper-V 嵌套虚拟化出来一个 Windows 10。

嵌套虚拟化

原理示意

通常情况下 Hyper-V 的 hypervisor 层会完全控制虚拟化扩展,不会暴露给 Guest OS。

嵌套虚拟化

而在启用嵌套虚拟化之后,Hyper-V 的已经配置虚拟化扩展可直接暴露给 Guest VM,而 Guest VM 可使用这个特性安装自己的虚拟机管理程序来跑 Guest OS。

嵌套虚拟化

已知问题

就像前面所说,该功能是只一个预览功能,不应当在生产环境中进行使用,以下列出已知问题列表:

  • 要使用嵌套虚拟化,Hyper-V 及 hypervisors 层必需都是最新版本,也就是说目前还不支持 Build 10565 之前的 Hyper-V
  • 启用嵌套虚拟化功能的 VM (目前)不能再启用:动态内存、内存热插、实时迁移、保存和恢复及快照功能
  • 目前嵌套虚拟化功能与 Virtualization Based Security (VBS) 功能有冲突,启用前必需先禁用 VBS
  • 目前只支持 Intel 的硬件虚拟化技术,因此 CPU 必需支持 Intel VT-x (AMD CPU 悲催了)
  • 嵌套虚拟化需要大内存支持,想必这个不说大家都应该能够明白

启用Hyper-V嵌套虚拟化

1 创建一个虚拟机

2 运行启用脚本

该脚本会自动检测当前 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

注意:虚拟机必需为关闭状态

3 在 Guest VM 中再安装 Hyper-V

4 启用网络(可选)

一旦启用 Guest VM 嵌套虚拟化,则必需启用 MAC spoofing 功能之后 Guest VM 里面的 Guest OS 网络才能正常工作。

Set-VMNetworkAdapter -VMName  -MacAddressSpoofing on

5 最后我们就可以创建嵌套的 Guest OS 啦。

分享到:更多 ()