WSL2与VMware冲突解决方案

本文总结了 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
    • WSL2 ❌
    • VMware ✅(性能最好)

两种模式

模式 Hyper-V WSL2 VMware 性能
Hyper-V ON ON ⭐⭐⭐
Hyper-V OFF 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。(如果觉得每次切换需要重启麻烦,可以配置开机双启动的选项来选择)


Hyper-V OFF

如何切换

切换 VMware / VirtualBox:

bcdedit /set hypervisorlaunchtype off

该命令控制Windows 启动时不会再加载 Hyper-V 的 Hypervisor,也就是说:

  • Hyper-V 不工作
  • WSL2 不工作
  • Virtual Machine Platform 不工作
  • Windows Sandbox 不工作
  • CPU 的 VT-x / SVM 虚拟化能力释放给第三方虚拟机

切换到 WSL2:

bcdedit /set hypervisorlaunchtype auto

👉 相互切换必须重启才生效

shutdown /r /t 0 # 或手动重启

换来的是:

  • ✔ VMware 满血
  • ✔ WSL2 满血
  • ✔ 不互相妥协

快捷切换脚本

可将下面代码保存为切换脚本文件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):

Hyper-V ON

核心思想

让 VMware 接受 Hyper-V 的存在,使用微软的虚拟化平台:

  • WHP(Windows Hypervisor Platform)
  • VBS(Virtualization-Based Security)

开启 Windows 必要组件

打开:

控制面板
→ 程序
→ 启用或关闭 Windows 功能

✅ 勾选:☑ Virtual Machine Platform

确认 Hyper-V 启动

Windows PowerShell 执行:

bcdedit /enum | findstr hypervisor

应看到:

hypervisorlaunchtype    Auto

不要设为 off

验证是否真的共存

WSL2 验证:

wsl -l -v

输出类似:Ubuntu-22.04 Running 2

VMware 验证:

正常启动虚拟机,不会再提示:VMware Workstation and Hyper-V are not compatible

[!CAUTION]

MacOS 虚拟机在此方式下无法打开。

posted @ 2025-12-30 18:57  Invinc-Z  阅读(73)  评论(0)    收藏  举报