WSL2 是 Windows 上的 Linux 子系统,运行在微软提供的轻量虚拟机中,使用真实 Linux 内核,命令行工具、服务与图形程序均可运行,并与 Windows 的文件系统、终端和编辑器互通。
BIOS 与 UEFI 中要开启 CPU 虚拟化;操作用户具备管理员权限。注意Windows 家庭版不含 Hyper-V 管理组件
◆ 与虚拟机的区别
WSL2 的虚拟机由 Windows 直接管理,没有 BIOS 自检与引导过程,启动为秒级,闲置时资源回收到主机;完整虚拟机需要预先分配内存与处理器,走完整引导流程,启动为数十秒级。
文件互通上,WSL2 把 Windows 各盘挂载到 /mnt 下,Windows 侧通过 \wsl.localhost\发行版名 访问 Linux 文件,两个方向均为现成通道,不需要额外配置;虚拟机通常需要共享文件夹或网络传输。
内核与控制权方面,WSL2 使用微软定制内核,随 wsl --update 更新,版本与模块受发行方控制,自编译模块需要按该内核重新编译;虚拟机使用发行版原版内核,内核替换、模块加载、桌面环境与系统调优均无额外限制。
集成能力方面,剪贴板、显卡(图形程序与 CUDA)、终端与编辑器直通主机;虚拟机需要安装增强工具,图形性能与桌面体验受限。
选择依据:以命令行开发、容器、与 Windows 工具链频繁互通为主的使用场景,WSL2 的开销小、配置项少;需要完整内核控制、图形桌面、快照与桥接网络时,选虚拟机。两者可以在同一台机器上并存。
◆ 安装 WSL
命令行安装
Windows 10 2004 及以上与 Windows 11 提供了一条命令完成安装的方式。以管理员身份打开 PowerShell,执行:
wsl --install
该命令启用“适用于 Linux 的 Windows 子系统”与“虚拟机平台”两项功能,下载 WSL 内核与默认发行版 Ubuntu,并把 WSL2 设为默认版本。
需要指定其他发行版时加 -d 参数,可安装的名称先列出:
wsl --list --online
输出为 NAME 与 FRIENDLY NAME 两列,安装时使用 NAME 一列的值,如 wsl --install -d Debian、wsl --install -d kali-linux。
手动启用功能与内核包
系统版本较早、企业版 LTSC 不带商店,或 wsl --install 报错时,改用手动方式,先启用两项系统功能并重启,再安装内核更新包,然后把默认版本设为 2,最后安装发行版。
启用功能在管理员 PowerShell 中执行两条命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
两条命令分别启用 Linux 子系统功能与虚拟机平台功能;/all 表示连同依赖一并启用,/norestart 表示暂不重启。图形入口为搜索“启用或关闭 Windows 功能”,勾选“适用于 Linux 的 Windows 子系统”与“虚拟机平台”。执行完重启系统。
随后安装 WSL2 内核更新包,文件名形如 wsl_update_x64.msi,官方下载页为 https://aka.ms/wsl2kernel,安装过程保持默认选项。
设置默认版本,决定此后新装发行版使用的版本:
wsl --set-default-version 2
已有发行版不受该设置影响,用 wsl --set-version 发行版名 2 单独转换,转换需要数分钟,期间该发行版不可用。
验证用 wsl --status 查看默认发行版与默认版本,用 wsl --version 查看 WSL 程序与内核版本。
发行版的安装方式
商店安装:打开微软商店搜索发行版名称,如 Ubuntu、Debian、Kali Linux,安装后从开始菜单启动,首次启动要求设置 Linux 用户名与密码。
◆ 初始化与验证
首次启动发行版要求输入用户名与密码,这是 Linux 系统内的账户,与 Windows 账户无关;该用户默认具备 sudo 权限
进入系统后确认发行版信息:
cat /etc/os-release
输出发行版名称与版本号,Ubuntu 环境正确时首行为 NAME="Ubuntu"。
在 Windows 侧终端查看已安装发行版:
wsl --list --verbose
查看 WSL 程序版本:
wsl --version
◆ 文件系统与磁盘
WSL2 的根目录位于一块 ext4 格式的虚拟磁盘中,文件名为 ext4.vhdx,位置在 C:\Users\用户名\AppData\Local\Packages 下该发行版对应的目录内。磁盘容量随写入增长,删除文件后不会自动缩小,导出后再导入可重建为实际占用大小,新版 WSL 也可用 wsl --manage 发行版名 --set-sparse true 设为稀疏文件回收空间。
Linux 侧访问 Windows 文件通过 /mnt 下的挂载点,C 盘为 /mnt/c,其余盘依次排列。Windows 侧访问 Linux 文件通过以下路径:
\\wsl.localhost\发行版名
新版系统使用该写法,旧系统为 \wsl$\发行版名。
跨文件系统的访问速度明显低于文件系统内部,涉及大量小文件的项目与依赖目录应放在 Linux 侧的家目录中,再通过 VS Code 远程方式打开,而不是放在 /mnt/c 下。
备份、迁移与清理用三条命令:
wsl --export Ubuntu-24.04 D:\backup\ubuntu.tar
wsl --import Ubuntu-24.04-new D:\wsl\Ubuntu-24.04-new D:\backup\ubuntu.tar --version 2
wsl --unregister 发行版名
wsl --export 把整个发行版打包为单个 tar 文件,可在换机或重装系统后导入;wsl --import 按给定目录重建;wsl --unregister 注销发行版,其文件随之删除,执行前确认已导出。三条命令执行前先运行 wsl --shutdown,保证文件系统状态一致。变更安装目录也可用 wsl --manage 发行版名 --move 新目录 直接移动。
◆ 资源配置与网络
.wslconfig
全局配置写在 Windows 用户目录下的 .wslconfig 文件中,路径为 C:\Users\用户名.wslconfig,文件默认不存在,需手动创建,用记事本保存时去掉 .txt 后缀。该文件对所有 WSL2 发行版生效。
[wsl2]
memory=8GB
processors=4
swap=4GB
networkingMode=mirrored
[experimental]
autoMemoryReclaim=gradual
memory 为该虚拟机可用的最大内存,默认为主机内存的 50%
processors 为可用逻辑处理器数,默认为全部
swap 为交换空间大小,默认为内存的 25%,设为 0 表示不创建交换文件networkingMode 为网络模式,mirrored 表示镜像模式,与主机共用网络栈,IPv6 与局域网访问均更直接,该模式要求 Windows 11 22H2 及以上
autoMemoryReclaim 控制闲置缓存内存的回收,可选 disabled、gradual 与 dropCache
配置改动在 WSL 重启后生效:
wsl --shutdown
网络访问
WSL2 默认为 NAT 模式,WSL 内服务监听端口后,Windows 侧用 localhost 加端口直接访问,不需要额外配置。
局域网内其他设备访问 WSL 内服务需要一层端口转发,在管理员 PowerShell 中执行:
netsh interface portproxy add v4tov4 listenport=主机端口 listenaddress=0.0.0.0 connectport=WSL端口 connectaddress=WSL地址
listen 两项为 Windows 侧的监听地址与端口,connect 两项为转发目标的地址与端口。WSL 的地址在重启后可能变化,在 WSL 内用 hostname -I 查看;监听端口还需在 Windows 防火墙中放行。Windows 11 22H2 及以上可启用镜像网络,省去转发配置。
反方向在 WSL 内访问 Windows 侧服务时,地址为主机在虚拟网络中的网关地址,在 WSL 内执行 ip route,default 行的 via 之后即为该地址。
◆ VS Code 远程开发
VS Code 通过 WSL 扩展连接发行版,代码与工具链全部运行在 Linux 侧,编辑界面运行在 Windows 侧。
在 Windows 侧的 VS Code 扩展面板中搜索 WSL,标识为 ms-vscode-remote.remote-wsl,该扩展装在 Windows 侧
安装完成后在 WSL 终端中进入项目目录并执行:
code .
code 命令由扩展注入到 WSL 的 PATH 中,首次执行会在 Linux 侧下载服务端组件。扩展分两类安装位置,界面类扩展装在 Windows 侧,语言支持、调试器、格式化工具一类装在 WSL 侧。
图形程序通过 WSLg 直接显示在 Windows 桌面上,不需要额外配置 X 服务器。容器与依赖 Linux 环境的命令行工具在 WSL 内与在原生 Linux 上一致。
◆ 常用命令
进入与退出:wsl 进入默认发行版,wsl -d 发行版名 进入指定发行版,exit 退出终端,wsl --shutdown 停止全部,wsl --terminate 发行版名 停止单个。
查询:wsl --list --verbose 查看发行版、状态与版本,wsl --list --online 查看可在线安装的发行版,wsl --status 查看默认发行版与内核版本,wsl --version 查看 WSL 程序版本。
维护:wsl --update 更新 WSL 与内核,wsl --update --web-download 改为从 GitHub 下载更新,wsl --set-default-version 2 设置新装发行版的默认版本,wsl --set-default 发行版名 设置默认发行版。
迁移与清理:wsl --export、wsl --import、wsl --unregister,用法见文件系统与磁盘一节。
上述命令均在 Windows 侧终端执行,wsl 后不加参数时进入默认发行版。
◆ 故障排查
按报错码对照。0x8007019e 为 Linux 子系统功能未启用,执行安装一节的两条 dism 命令并重启;0x800701bc 为 WSL2 内核未安装或过旧,执行 wsl --update,失败时手动安装内核更新包;0x80370102 为虚拟化未开启,先在任务管理器中确认虚拟化状态,再进 BIOS 打开 Intel VT-x 或 AMD-V,然后确认虚拟机平台功能已启用。
0x80072ee7 与 0x80072efd 为连接微软服务器失败,多出现在下载发行版与内核的阶段。处理顺序:更换 DNS 为 223.5.5.5 一类可用地址并执行 ipconfig /flushdns;重试时给安装命令加 --web-download,改为从 GitHub 下载;配置代理后用 netsh winhttp set proxy 主机:端口 让系统组件走代理;以上均无效时,改用手动启用功能加离线包导入的路线,全程只依赖浏览器下载。
提示“The packaged version of WSL is not supported by windows-version 10.0.19045.2130”一类信息,为 Windows 10 的内部修订号低于商店版 WSL 的要求。运行 Windows 更新安装 KB5020030,把系统升到 19045.2311 及以上,或改用手动启用功能的内置版路线。
WSL 内解析域名失败或更新软件源报网络错误时,执行 wsl --shutdown 后重新进入,虚拟网卡与 DNS 配置随虚拟机重建。
Windows 侧访问 \wsl.localhost\发行版名 提示找不到时,先确认该发行版处于运行状态,再确认路径中的发行版名与 wsl --list 的输出完全一致。test
windows配置wsl2
http://192.168.5.241:8090/archives/windowspei-zhi-wsl2