今年早些时候,微软宣布 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 啦。
最新评论
你可以把 U 盘断开连接,重新插上再次查看属性。然后验证「当前只读状态」与 U 盘能不能写入文件的实际情况是否匹配。
就是按照帖子的做法搞了一遍,只能修改只读状态,当前只读状态还是没变化
使用 attributes disk clear readonly 命令取消写保护即可。
MoveFile 确实用于在下次重启时安排文件移动、重命名或删除操作,这点没问题。但移动操作只能在单个卷上执行(不能跨卷,我刚在虚拟机上测试过了),并且要求目标目录已经存在。由于我平常基本用不到这个工具,文章中的示例错误了,这个我会抽时间更正。