VMware 嵌套虚拟化终极指南:彻底关闭 VBS,释放 VT-x 硬件权限
📌 问题背景
在 VMware Workstation 中搭建 Windows/Linux 虚拟机时,如果你需要在虚拟机内部进一步运行WSL2或Docker Desktop,就必须开启虚拟机的“嵌套虚拟化”(即在虚拟机设置中勾选虚拟化 Intel VT-x/EPT 或 AMD-V/RVI)。
然而,许多人在开启该选项启动虚拟机时,会频繁遭遇以下报错:
“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。”
或
“模块‘HV’启动失败。未能启动虚拟机。”
即使在 Windows 中关闭了 Hyper-V、WSL 和虚拟机平台,甚至运行了bcdedit /set hypervisorlaunchtype off,重启后依然报错。检查msinfo32(系统信息)会发现:“基于虚拟化的安全性 (VBS)”依然显示为“正在运行”。
🔍 原理深入解析:为什么常规方法全部失效?
1. 什么是 VBS(基于虚拟化的安全性)?
VBS 是 Windows 10/11 引入的一项安全平台,它利用 CPU 的硬件虚拟化技术(Intel VT-x / AMD-V)在操作系统底层创建一个隔离的安全区域(称为虚拟信任级别 1,VTL 1)。这个区域运行着一个安全内核,专门负责运行一些高安全性的功能,例如:
内存完整性(HVCI):也就是我们常说的“内核隔离”,它会严格检查内核驱动和控制流,防止恶意代码篡改。
Credential Guard(凭据保护):将登录凭证等敏感数据锁在 VTL 1 中,防止 Mimikatz 等工具窃取。
2. VBS 与嵌套虚拟化的互斥关系
VBS 启用时,Windows 底层的 Hyper-V 虚拟机监控器(Hypervisor)会抢先占用 CPU 的 VT-x / AMD-V 硬件虚拟化资源,并禁止其他软件直接访问这些指令。
VMware Workstation 在开启“嵌套虚拟化”时,也需要直接操控VT-x 指令,以便在虚拟机内部再创建虚拟机(例如运行 WSL2)。
由于 VT-x 已经被 VBS 的 Hypervisor 独占,VMware 无法获取控制权,于是报错。
关键点:即使你在“启用或关闭 Windows 功能”中去掉了 Hyper-V 和虚拟机平台,VBS 依然可能通过UEFI 固件锁保持激活状态,这就是为什么常规软件开关无效的根本原因。
3. 内存完整性(HVCI)是 VBS 的一部分,但关闭它不等于关闭 VBS
内存完整性(内核隔离)是 VBS 平台上的一个重要功能,但它只是 VBS 的一部分。
如果你只关闭内存完整性(通过 Windows 安全中心),VBS仍然可能保持运行,因为 Credential Guard 或其他安全组件可能还在使用 VTL 1 环境。
因此,若要彻底释放 VT-x 给 VMware,必须完全禁用 VBS,而不仅仅是关闭内存完整性。
🛠️ 方案一:通过 Windows 安全中心关闭内存完整性(软方法,可能不够彻底)
如果你只是想尝试一下,或者你的电脑并不依赖 Credential Guard,可以先试试这个简单方法:
打开Windows 安全中心。
点击设备安全性。
在“内核隔离”下,点击内核隔离详细信息。
将内存完整性开关关闭。
重启电脑。
重启后,再次运行msinfo32,检查 VBS 状态。如果显示“未启用”,那么恭喜你,VMware 嵌套虚拟化应该就能用了。
但很多情况下,VBS 依然会显示“正在运行”,这是因为 UEFI 固件中仍然锁定了 VBS 启动项,此时就需要下面的终极方案。
🧨 终极方案:通过 EFI 注入擦除 UEFI 锁(一次性解决)
既然系统内的命令管用不了,我们就需要使用微软官方提供的SecConfig.efi底层工具,在操作系统加载前直接对 UEFI NVRAM 进行擦除,从而彻底禁用 VBS。
步骤一:以管理员身份运行 PowerShell
在宿主机(物理电脑)上,按下Win + X,选择“终端(管理员)”或“PowerShell (管理员)”。
步骤二:执行 EFI 引导注入脚本
完整复制并运行以下 PowerShell 脚本:
powershell
# ========================================================================= # 微软官方 UEFI 安全变量擦除脚本 # 作用:挂载 EFI 分区,注入 SecConfig.efi 一次性引导工具 # ========================================================================= Write-Host "1. 正在挂载系统 EFI 引导分区..." -ForegroundColor Cyan mountvol X: /s $secConfigPath = "$env:SystemRoot\System32\SecConfig.efi" if (Test-Path $secConfigPath) { Write-Host "2. 正在复制 SecConfig.efi 工具到 EFI 分区..." -ForegroundColor Cyan Copy-Item $secConfigPath "X:\EFI\Microsoft\Boot\SecConfig.efi" -Force # 清理可能存在的残留引导条目 bcdedit /delete "{0cb3b571-2f2e-4343-a879-d86a476d7215}" /f 2>$null Write-Host "3. 正在创建并配置一次性启动项..." -ForegroundColor Cyan bcdedit /create "{0cb3b571-2f2e-4343-a879-d86a476d7215}" /d "VBS_Unlock_Tool" /application osloader bcdedit /set "{0cb3b571-2f2e-4343-a879-d86a476d7215}" path "\EFI\Microsoft\Boot\SecConfig.efi" bcdedit /set "{0cb3b571-2f2e-4343-a879-d86a476d7215}" loadoptions "DISABLE-LSA-ISO,DISABLE-VBS" bcdedit /set "{0cb3b571-2f2e-4343-a879-d86a476d7215}" device partition=X: # 设置为下一次开机的优先启动项 bcdedit /set "{bootmgr}" bootsequence "{0cb3b571-2f2e-4343-a879-d86a476d7215}" Write-Host "==========================================" -ForegroundColor Green Write-Host "一次性引导项配置成功!" -ForegroundColor Green } else { Write-Host "未在系统中找到 SecConfig.efi 文件!" -ForegroundColor Red } Write-Host "4. 正在卸载临时引导分区..." -ForegroundColor Cyan mountvol X: /d步骤三:重启电脑并在黑屏提示处按键(关键!)
执行完脚本后,立即重启电脑。
在开机过程中,你会看到一个蓝色或黑色的提示屏幕,上面显示类似“按任意键继续……”或“Press any key to continue...”的字样。
必须马上按任意键(比如空格键),否则系统会跳过该工具,正常启动进入 Windows。
按下按键后,工具会自动运行,清除 UEFI 中的 VBS 锁定变量,然后自动重启进入 Windows。
步骤四:验证 VBS 已彻底禁用
进入 Windows 后,再次运行msinfo32,查看“基于虚拟化的安全性”一栏,应显示为“未启用”。
✅ 此时,VT-x 已经释放给 VMware,嵌套虚拟化可以正常工作了。
🚀 启用嵌套虚拟化(VMware 设置 + 虚拟机内部配置)
当 VBS 彻底禁用后,就可以放心地开启 VMware 的嵌套虚拟化功能了。
1. 在 VMware Workstation 中勾选嵌套虚拟化
关闭目标虚拟机(必须处于关机状态)。
选中虚拟机,右键 →设置。
切换到处理器选项卡。
勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”(有的版本叫“向客户机操作系统公开硬件辅助虚拟化”)。
点击确定。
2. 启动虚拟机并安装支持嵌套虚拟化的系统
启动该虚拟机(例如 Windows 10/11 或 Linux)。
在虚拟机内部,确认虚拟化已生效:
Windows 客户机:在任务管理器 → 性能 → CPU 中查看“虚拟化: 已启用”。
Linux 客户机:执行
lscpu | grep Virtualization,若输出VT-x或AMD-V则表示支持。
3. 在虚拟机内部安装 WSL2 / Docker Desktop
开启虚拟机的 Windows 功能:Hyper-V、虚拟机平台、Windows 子系统 Linux(如果客户机是 Windows)。
安装 WSL2 或 Docker Desktop,此时它们可以正常运行,因为虚拟化硬件已经成功穿透到虚拟机内。
✅ 验证嵌套虚拟化成功
在虚拟机内部运行
wsl --status确认 WSL2 内核正在运行。或运行 Docker 容器,一切正常。
至此,你已经实现了“在 VMware 虚拟机中再运行虚拟机”的嵌套虚拟化目标。
📚 总结
| 方法 | 效果 | 适用场景 |
|---|---|---|
| 仅关闭内存完整性(安全中心) | 可能无效,因为 VBS 可能仍被 UEFI 锁定 | 轻量尝试,对 VBS 依赖不深的老设备 |
| 使用 SecConfig.efi 彻底禁用 VBS | 100% 释放 VT-x,兼容所有版本 | 所有遇到嵌套虚拟化报错的情况 |
最终建议:
如果你的工作主要涉及虚拟化实验、容器开发,强烈建议使用终极方案彻底关闭 VBS。
如果对安全性有极高要求(企业机密环境),则可能需要在“安全”和“功能”之间权衡,或者改用 Hyper-V 原生虚拟化(与 VBS 兼容)。
希望这篇更新后的指南能一次性解决你的烦恼。如果操作中遇到任何问题,欢迎在评论区留言讨论! 😊