WSL2与VMware冲突解决方案
本文作者: Neozhuang
转载时有部分内容做了调整,欢迎访问原文获取最新信息。
原文链接: https://www.cnblogs.com/neozhuang/p/19422948/wsl2-vmware-conflict-solution
1 结论
在 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
- WSL2 ❌
- VMware ✅(性能最好)
2 两种模式
| 模式 | Hyper-V | WSL2 | VMware | 性能 |
|---|---|---|---|---|
| Hyper-V | ON | ON | ✅ | ✅ |
| Hyper-V | OFF | ❌ | ✅ | ⭐⭐⭐⭐⭐ |
Hyper-V ON模式下虚拟化路径如下①和③所示:
路径 ①(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。(如果觉得每次切换需要重启麻烦,可以配置开机双启动的选项来选择)
2.1 Hyper-V OFF
2.1.1 切换 VMware / VirtualBox
bcdedit /set hypervisorlaunchtype off该命令控制Windows 启动时不会再加载 Hyper-V 的 Hypervisor,即:
- Hyper-V 不工作
- WSL2 不工作
- Virtual Machine Platform 不工作
- Windows Sandbox 不工作
- CPU 的 VT-x / SVM 虚拟化能力释放给第三方虚拟机
2.1.2 切换到 WSL2
bcdedit /set hypervisorlaunchtype auto👉 相互切换必须重启才生效
shutdown /r /t 0 # 或手动重启2.1.3 快捷切换脚本
可将下面代码保存为切换脚本文件toggle_hypervisor.bat:
@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以管理员身份运行,效果如下:
================================
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):2.2 Hyper-V ON
2.2.1核心思想
让 VMware 接受 Hyper-V 的存在,使用微软的虚拟化平台:
- WHP(Windows Hypervisor Platform)
- VBS(Virtualization-Based Security)
2.2.2 开启 Windows 必要组件
打开:
控制面板
→ 程序
→ 启用或关闭 Windows 功能✅ 勾选:☑ Virtual Machine Platform
2.2.3 确认 Hyper-V 启动
Windows PowerShell 执行:
bcdedit /enum | findstr hypervisor应看到:
hypervisorlaunchtype Auto❗ 不要设为 off
2.2.4 验证是否真的共存
WSL2 验证:
wsl -l -v输出类似:Ubuntu-22.04 Running 2。
VMware 验证:
正常启动虚拟机,不会再提示:VMware Workstation and Hyper-V are not compatible。
[注意] MacOS 虚拟机在此方式下无法打开。
