本文总结了 WSL2 与 VMware 虚拟化冲突的解决方案。
结论
在 Windows 11 25H2 + VMware Workstation(17.x /
25H2) 下:
✅ VMware 与 WSL2 可以共存 ❌ 但 VMware
不再是“直通 VT-x”的传统模式 👉 而是 运行在 Hyper-V
之上(兼容模式)
换句话说:
- Hyper-V ON
- WSL2 ✅
- Docker Desktop(WSL2 后端)✅
- VMware ✅(但走 Hyper-V 后端)
- Hyper-V OFF
两种模式
| 模式 |
Hyper-V |
WSL2 |
VMware |
性能 |
| Hyper-V ON |
ON |
✅ |
✅ |
⭐⭐⭐ |
| Hyper-V OFF |
OFF |
❌ |
✅ |
⭐⭐⭐⭐⭐ |
Hyper-V ON模式下虚拟化路径如下①和③所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 路径 ①(Linux / Windows VM) 硬件 └── Hyper-V (L0) └── Windows └── VMware / VirtualBox (L1) └── Linux / Windows VM (L2)
路径 ②(macOS VM) 硬件 └── VMware (L0) └── macOS (L1)
路径 ③(WSL2) 硬件 └── Hyper-V (L0) └── Windows └── WSL2 (L1)
|
由于苹果内核不支持Hyper-V这种虚拟化模型,macOS
虚拟机只能走路径 ②,即 Hyper-V OFF。
Hyper-V ON模式下性能损失是客观存在的:
| 项目 |
直通 VT-x |
Hyper-V 后端 |
| CPU |
100% |
~85–90% |
| I/O |
原生 |
稍慢 |
| Nested VT |
强 |
弱 |
由于Hyper-V
ON模式会导致VMware性能损失,此外我的虚拟机环境还有MacOS,MacOS
虚拟机不支持在 Hyper-V 之上的“二级虚拟化路径”,所以我优先Hyper-V
OFF,如果需要用到WSL2,再切换到Hyper-V
ON。(如果觉得每次切换需要重启麻烦,可以配置开机双启动的选项来选择)
Hyper-V OFF
如何切换
切换 VMware / VirtualBox:
1
| bcdedit /set hypervisorlaunchtype off
|
该命令控制Windows 启动时不会再加载 Hyper-V 的
Hypervisor,也就是说:
- Hyper-V 不工作
- WSL2 不工作
- Virtual Machine Platform 不工作
- Windows Sandbox 不工作
- CPU 的 VT-x / SVM 虚拟化能力释放给第三方虚拟机
切换到 WSL2:
1
| bcdedit /set hypervisorlaunchtype auto
|
👉 相互切换必须重启才生效
换来的是:
- ✔ VMware 满血
- ✔ WSL2 满血
- ✔ 不互相妥协
快捷切换脚本
可将下面代码保存为切换脚本文件toggle_hypervisor.bat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| @echo off chcp 437 >nul setlocal EnableDelayedExpansion
:: ================================ :: Admin check :: ================================ net session >nul 2>&1 if %errorlevel% neq 0 ( echo Please run this script as Administrator. pause exit /b 1 )
:: ================================ :: Get current hypervisorlaunchtype :: ================================ set CURRENT=
for /f "tokens=2" %%i in (' bcdedit /enum {current} ^| findstr /i hypervisorlaunchtype ') do ( set CURRENT=%%i )
if not defined CURRENT ( set CURRENT=Auto )
:MENU cls echo ================================ echo Hypervisor Launch Type Manager echo ================================ echo. echo Current state: %CURRENT% echo. echo 1. Toggle (Auto ^<^> Off) echo 2. Set Auto (Enable Hyper-V) echo 3. Set Off (Disable Hyper-V) echo 4. Exit echo.
set /p CHOICE=Select (1-4):
if "%CHOICE%"=="1" goto TOGGLE if "%CHOICE%"=="2" goto SET_AUTO if "%CHOICE%"=="3" goto SET_OFF if "%CHOICE%"=="4" goto END
echo Invalid selection. timeout /t 1 >nul goto MENU
:TOGGLE if /i "%CURRENT%"=="Auto" ( set NEW=off ) else ( set NEW=auto ) goto APPLY
:SET_AUTO set NEW=auto goto APPLY
:SET_OFF set NEW=off goto APPLY
:APPLY echo. echo Setting hypervisorlaunchtype to %NEW% ... bcdedit /set hypervisorlaunchtype %NEW% if errorlevel 1 ( echo Failed to update hypervisorlaunchtype. pause exit /b 1 )
set CURRENT=%NEW%
echo. set /p REBOOT=Reboot now? (Y/N): if /i "%REBOOT%"=="Y" ( shutdown /r /t 0 )
goto MENU
:END exit /b 0
|
以管理员身份运行,效果如下:
1 2 3 4 5 6 7 8 9 10 11 12
| ================================ Hypervisor Launch Type Manager ================================
Current state: Auto
1. Toggle (Auto <> Off) 2. Set Auto (Enable Hyper-V) 3. Set Off (Disable Hyper-V) 4. Exit
Select (1-4):
|
Hyper-V ON
核心思想
让 VMware 接受 Hyper-V
的存在,使用微软的虚拟化平台:
- WHP(Windows Hypervisor Platform)
- VBS(Virtualization-Based Security)
开启 Windows 必要组件
打开:
1 2 3
| 控制面板 → 程序 → 启用或关闭 Windows 功能
|
✅ 勾选:☑ Virtual Machine Platform
确认 Hyper-V 启动
Windows PowerShell 执行:
1
| bcdedit /enum | findstr hypervisor
|
应看到:
1
| hypervisorlaunchtype Auto
|
❗ 不要设为 off
验证是否真的共存
WSL2 验证:
输出类似:Ubuntu-22.04 Running 2。
VMware 验证:
正常启动虚拟机,不会再提示:VMware Workstation and Hyper-V are not compatible。
[!CAUTION]
MacOS 虚拟机在此方式下无法打开。