最近入手了一台联想 ThinkBook 14 G7+ IAH,预装 Windows 11,打算在上面跑 VMware Workstation。我的目标是创建 Ubuntu 22.04 虚拟机,并在其中运行 QEMU/KVM 虚拟机,实现经典的嵌套虚拟化场景。
理想很美好,现实却一路踩坑。最终发现,罪魁祸首是 Windows 11 默认开启的 VBS(基于虚拟化的安全性) 和 Credential Guard。本文将记录从联想知识库方法到微软官方文档的完整排查与解决过程。
环境信息
| 机型 |
主机系统 |
| ThinkBook 14 G7+ IAH |
Windows 11 |
| 虚拟化平台 |
Guest OS |
| VMware Workstation |
Ubuntu 22.04 |
虚拟化架构与问题
我的目标是一个三层嵌套虚拟化架构:
- Windows 11 宿主机 (Intel VT-x)
- ↓ VMware Workstation (嵌套虚拟化已开启)
- ↓ Ubuntu 22.04 Guest
- ↓ QEMU/KVM 虚拟机 ← Watchdog 超时!
问题现象:
在 Ubuntu 22.04 中使用 virt-manager 或 virsh 创建 KVM 虚拟机时,启动后反复出现 watchdog 超时错误,导致虚拟机无法正常运行。
排查过程:三个阶段
从发现问题到解决,我经历了三个阶段。前两个阶段采用了网络常见方法,均告失败;第三阶段依据微软官方文档,才彻底解决问题。
阶段一:关闭 Hyper-V 和容器功能(失败)
这是搜索引擎里最流行的方案。
操作步骤:
- 关闭 Windows 可选功能: 进入
控制面板 -> 程序和功能 -> 启用或关闭 Windows 功能,取消勾选:
Hyper-V (包括所有子项)
Virtual Machine Platform (虚拟机平台)
Windows 沙盒
Windows 虚拟机监控程序平台
容器 (如有)
- 重启验证。
结果: VMware 可以运行 Ubuntu 虚拟机,但 Ubuntu 内的 KVM 仍报 watchdog 超时。未解决。
阶段二:联想知识库方法(知识编号 423992,失败)
参考联想官方文章《Win11 最新关闭 VBS 的几种方法》,执行更完整的操作流程:
- 关闭内核隔离:
Windows 安全中心 -> 设备安全性 -> 内核隔离详细信息,关闭内存完整性和固件保护(如有)。
- 关闭 Hypervisor 启动: 以管理员运行CMD,执行:
bcdedit /set hypervisorlaunchtype off
- 运行微软 DG Readiness Tool 脚本: 以管理员运行 PowerShell,执行:
# 进入脚本所在目录
cd C:\path\to\dgreadiness
# 允许运行远程签名的脚本
Set-ExecutionPolicy RemoteSigned
# 执行禁用 VBS
.\DG_Readiness_Tool_v3.6.ps1 -Disable
- 进 BIOS 关闭安全启动: 重启进BIOS(ThinkBook 通常按
F2 或 Fn+F2),在安全选项卡中关闭安全启动(Secure Boot),清除默认启动密钥(如有),保存退出。
- 开机确认: 启动时若弹出关闭提示,按
F3 确认。
结果: 重启后,在 msinfo32 中检查,VBS 状态依然显示 “已启用,但尚未运行”。

执行联想知识库全部方法后,VBS 框架依然处于启用状态。
关键发现:
截图信息显示,虽然 Services Configured 和 Services Running 为空(无实际服务运行),但 VBS 框架本身处于启用状态。这足以占用虚拟化资源,干扰 VMware 的嵌套虚拟化。联想的方法未能触及 Credential Guard 的注册表配置,因此 VBS 框架拒绝完全退出。
阶段三:微软官方方案——修改注册表(成功)
最终在微软官方文档 Configure Credential Guard 中找到答案。当 Credential Guard 非通过 UEFI Lock 或组策略启用时,可直接修改注册表禁用。
操作步骤:
以管理员身份运行 regedit,修改以下两个注册表键值:
| 1. 第一个键值 |
属性 |
值 |
| 路径 |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa |
| 键名 |
LsaCfgFlags |
| 类型 |
REG_DWORD |
| 值 |
0 |
| 2. 第二个键值 |
属性 |
值 |
| 路径 |
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard |
| 键名 |
LsaCfgFlags |
| 类型 |
REG_DWORD |
| 值 |
0 |
也可以使用命令行一步到位:
REM 设置第一个注册表键值
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v LsaCfgFlags /t REG_DWORD /d 0 /f
REM 设置第二个注册表键值
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard /v LsaCfgFlags /t REG_DWORD /d 0 /f
REM 重启计算机使修改生效
shutdown /r /t 0
⚠️ 注意事项:
- 必须将键值显式设为
0,仅删除注册表项可能无效。
- 修改后必须重启才能生效。
结果: 重启后,msinfo32 中 VBS 状态变为 “未启用”,KVM 嵌套虚拟化恢复正常!✅
验证是否生效
重启后,可通过以下方式验证:
- 系统信息查看: 按
Win + R 输入 msinfo32,查看“基于虚拟化的安全性”状态,应为 “未启用”。
- PowerShell 命令验证:
# 查询 VBS 安全服务运行状态
(Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard).SecurityServicesRunning
# 返回 0 = 未运行(已关闭)
# 返回 1 = 正在运行
为什么联想知识库的方法不够?
联想知识库的方法(关闭功能、内核隔离、bcdedit、DG脚本、安全启动)已很全面,对多数场景应足够。但在我的 ThinkBook (预装 Windows 11 22H2) 上却无效,原因在于:
Windows 11 22H2 及更新版本默认启用了 Credential Guard,其启用状态独立写在注册表中。 即使你关闭了所有相关功能和选项,只要注册表 LsaCfgFlags 的值不为 0,VBS 框架就会保持“待命”状态,从而占用虚拟化资源。
关键细节: 很多教程只修改了 Lsa 路径下的 LsaCfgFlags,但遗漏了 DeviceGuard 路径下同名的键值。两个都要改为 0,缺一不可。
完整操作清单与安全提示
如果你遇到相同问题,建议按此顺序操作。前序步骤是必要基础,加上最后的注册表操作才能彻底关闭 VBS。
📋 完整操作清单:
- ✓ 关闭 Windows 功能:Hyper-V、容器、虚拟机平台、Windows 沙盒。
- ✓ 关闭 Windows 安全中心 -> 内核隔离 -> 内存完整性。
- ✓ 执行
bcdedit /set hypervisorlaunchtype off。
- ✓ 运行微软 DG Readiness Tool:
DG_Readiness_Tool_v3.6.ps1 -Disable。
- ✓ 进 BIOS 关闭安全启动 (Secure Boot),清除启动密钥。
- ✓ 注册表
Lsa\LsaCfgFlags 显式设为 0。
- ✓ 注册表
DeviceGuard\LsaCfgFlags 显式设为 0。
- ✓ 重启计算机,并用
msinfo32 验证 VBS 状态为“未启用”。
💡 安全提示:
关闭 VBS 和 Credential Guard 会降低系统的凭据保护级别。如果无需运行嵌套虚拟化,建议保持默认开启。此操作主要在开发或测试场景下进行。另外,关闭 VBS 后 Windows Hello PIN 可能会失效,可能需要改用密码登录或重新设置 PIN。
总结
核心结论很明确:对于 Windows 11 22H2+ 系统上的嵌套虚拟化问题,联想知识库提供的方法是必要的基础操作,但还不够彻底。必须额外通过注册表显式关闭 Credential Guard(修改两处 LsaCfgFlags 值为 0),才能完全禁用 VBS 框架,从而解决 VMware 内 KVM 的 watchdog 超时问题。
希望这篇在云栈社区分享的完整排查记录,能帮你少走弯路。如果你在配置复杂的虚拟化环境或解决 Windows 11 系统兼容性问题时还有其他心得,也欢迎交流探讨。
参考链接: