WSL 2 配置、命令与运维手册
WSL 2 的双配置体系(wsl.conf + .wslconfig)完整参考,全量命令速查,systemd 服务管理,以及磁盘空间管理与 VHD 故障修复。
双配置体系
WSL 2 使用两个配置文件,作用范围不同:
.wslconfig | wsl.conf | |
|---|---|---|
| 作用范围 | 所有 WSL 2 发行版(全局) | 单个发行版(按发行版) |
| 控制内容 | VM 资源(内存/CPU/交换)、网络模式、GUI 开关、实验性功能 | 自动装载、网络、互操作、用户、启动命令、systemd |
| 文件位置 | %USERPROFILE%\.wslconfig(Windows 侧) | /etc/wsl.conf(Linux 侧) |
| 适用版本 | 仅 WSL 2 | WSL 1 和 WSL 2 均可 |
| 是否默认存在 | 不存在,需手动创建 | 不存在,需手动创建 |
配置生效规则
修改配置后必须等待运行该发行版的子系统完全停止再重启,更改才会生效。通常需要关闭发行版 shell 的所有实例后约 8 秒。
可以通过以下命令检查发行版是否仍在运行:
wsl --list --running
如果没有运行中的发行版(返回「没有正在运行的分发版」),重启发行版即可看到配置更新生效。
快速重启所有 WSL 实例:
wsl --shutdown
仅关闭指定发行版:
wsl --terminate Ubuntu-24.04
wsl.conf 详解
文件路径:/etc/wsl.conf,位于 Linux 发行版内部。
[automount] 自动装载
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
enabled | true / false | true | 是否自动挂载 Windows 固定驱动器到 /mnt |
mountFsTab | true / false | true | 启动时是否处理 /etc/fstab |
root | 字符串 | /mnt/ | Windows 驱动器挂载的目录。设为 / 则 C:\ 挂载到 /c |
options | 逗号分隔列表 | null | DrvFs 挂载选项,追加到默认选项字符串 |
自动装载选项(options 字段可用值):
| 键 | 说明 | 默认值 |
|---|---|---|
uid | 文件所有者的用户 ID | 发行版默认用户 ID(通常 1000) |
gid | 文件所有者的组 ID | 发行版默认组 ID(通常 1000) |
umask | 排除的权限掩码(文件和目录) | 022 |
fmask | 排除的权限掩码(仅文件) | 000 |
dmask | 排除的权限掩码(仅目录) | 000 |
metadata | 启用 Windows 文件元数据支持 | disabled |
case | 区分大小写行为 | off |
[network] 网络
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
generateHosts | true / false | true | 是否自动生成 /etc/hosts |
generateResolvConf | true / false | true | 是否自动生成 /etc/resolv.conf |
hostname | 字符串 | Windows 主机名 | WSL 发行版使用的主机名 |
[interop] 互操作
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
enabled | true / false | true | 是否允许在 WSL 中启动 Windows 进程 |
appendWindowsPath | true / false | true | 是否将 Windows 路径添加到 $PATH |
[user] 用户
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
default | 字符串 | 初始创建的用户名 | WSL 启动时使用的默认用户 |
[boot] 启动
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
command | 字符串 | null | WSL 实例启动时执行的命令(以 root 身份) |
systemd | true / false | true(新安装) | 是否启用 systemd |
protectBinfmt | true / false | true | 防止 WSL 在启用 systemd 时生成 binfmt 单元 |
[gpu] GPU
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
enabled | true / false | true | 是否允许 Linux 应用通过半虚拟化访问 Windows GPU |
[time] 时间
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
useWindowsTimezone | true / false | true | 是否使用 Windows 的时区设置 |
wsl.conf 完整示例
# 自动挂载 Windows 驱动器
[automount]
enabled = true
root = /
options = "metadata,uid=1000,gid=1000,umask=022,fmask=011,case=off"
mountFsTab = true
# 网络设置
[network]
hostname = dev-wsl
generateHosts = false
generateResolvConf = false
# 禁止启动 Windows 进程
[interop]
enabled = false
appendWindowsPath = false
# 默认用户
[user]
default = developer
# 启动时执行命令
[boot]
command = service docker start
systemd = true
# GPU 支持
[gpu]
enabled = true
# 时间同步
[time]
useWindowsTimezone = true
.wslconfig 详解
文件路径:%USERPROFILE%\.wslconfig(即 C:\Users\<用户名>\.wslconfig),位于 Windows 侧。文件不存在需手动创建。
[wsl2] 主要设置
| 键 | 值类型 | 默认值 | 说明 |
|---|---|---|---|
memory | 大小 | Windows 总内存的 50% | 分配给 WSL 2 VM 的内存量 |
processors | 数字 | 与 Windows 相同的逻辑处理器数 | 分配的逻辑处理器数量 |
swap | 大小 | Windows 内存的 25%(取整到 GB) | 交换空间大小,0 表示无交换 |
swapFile | 路径 | %Temp%\swap.vhdx | 交换文件路径 |
localhostForwarding | true / false | true | WSL 2 中的 localhost 端口是否可从 Windows 访问 |
kernel | 路径 | 内置内核 | 自定义 Linux 内核路径 |
kernelModules | 路径 | 内置 | 自定义内核模块 VHD 路径 |
kernelCommandLine | 字符串 | 无 | 额外的内核命令行参数 |
guiApplications | true / false | true | 是否启用 GUI 应用(WSLg) |
debugConsole | true / false | false | 启动时显示 dmesg 调试控制台 |
nestedVirtualization | true / false | true | 是否启用嵌套虚拟化 |
safeMode | true / false | false | 安全模式(禁用多数功能,用于恢复损坏的发行版) |
vmIdleTimeout | 数字(毫秒) | 60000 | VM 空闲超时关闭时间 |
maxCrashDumpCount | 数字 | 10 | 保留的最大故障转储文件数 |
defaultVhdSize | 大小 | 1099511627776(1TB) | 新发行版 VHD 的默认最大大小 |
networkingMode | 字符串 | NAT | 网络模式:NAT、mirrored、none、virtioproxy |
dnsProxy | true / false | true | 是否将 DNS 服务器配置为主机上的 NAT |
dnsTunneling | true / false | true | DNS 隧道模式 |
autoProxy | true / false | true | 是否使用 Windows 的 HTTP 代理设置 |
firewall | true / false | true | 是否启用 Hyper-V 防火墙 |
标记 ¹ 的设置仅适用于 Windows 11。标记 ² 的设置需要 Windows 11 22H2 或更高。
大小值格式:默认单位为字节,可省略单位。使用其他单位时需追加后缀,如 8GB、512MB。
路径值格式:必须是带转义反斜杠的 Windows 路径,如 C:\\Temp\\myCustomKernel。
[experimental] 实验性设置
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
autoMemoryReclaim | disabled / gradual / dropCache | dropCache | 自动内存回收策略 |
sparseVhd | true / false | false | 新 VHD 是否使用稀疏格式 |
bestEffortDnsParsing | true / false | false | 仅当 dnsTunneling=true 时生效 |
dnsTunnelingIpAddress | 字符串 | 10.255.255.254 | DNS 隧道的名称服务器 IP |
initialAutoProxyTimeout | 字符串(毫秒) | 1000 | 代理检索超时时间 |
ignoredPorts | 逗号分隔列表 | null | 仅当 networkingMode=mirrored 时生效,指定允许绑定的端口 |
hostAddressLoopback | true / false | false | 仅当 networkingMode=mirrored 时生效,允许通过主机 IP 地址回环 |
.wslconfig 完整示例
[wsl2]
memory = 8GB
processors = 4
swap = 4GB
swapFile = C:\\Temp\\wsl-swap.vhdx
localhostForwarding = true
guiApplications = true
nestedVirtualization = false
defaultVhdSize = 1TB
networkingMode = NAT
[experimental]
autoMemoryReclaim = gradual
sparseVhd = true
命令速查
以下命令在 PowerShell 或 CMD 中执行。在 Bash/Linux 终端中使用时,将 wsl 替换为 wsl.exe。
安装与更新
wsl --install # 安装 WSL + 默认 Ubuntu
wsl --install -d <发行版> # 安装指定发行版
wsl --install -d Ubuntu-24.04 # 示例
wsl --list --online # 查看所有可用发行版
wsl --update # 更新 WSL
wsl --update --web-download # 从网络下载更新(绕过 Store)
wsl --version # 查看 WSL 版本信息
wsl --status # 查看 WSL 配置状态
wsl --help # 帮助
发行版管理
wsl --list -v # 列出所有发行版(含版本和状态)
wsl --list --running # 仅列出运行中的发行版
wsl --set-version <发行版> 2 # 将发行版设置为 WSL 2
wsl --set-default-version 2 # 设置默认 WSL 版本
wsl --set-default <发行版> # 设置默认发行版
wsl --terminate <发行版> # 终止指定发行版
wsl --shutdown # 关闭所有 WSL 实例
wsl --unregister <发行版> # 卸载发行版(数据全部丢失!)
运行与用户
wsl # 启动默认发行版
wsl ~ # 以用户主目录启动
wsl -d <发行版> # 启动指定发行版
wsl -d <发行版> --user <用户名> # 以指定用户启动
wsl --user <用户名> # 以指定用户身份运行
<发行版> config --default-user <用户名> # 更改发行版默认用户(如 ubuntu config --default-user john)
导入与导出
wsl --export <发行版> <文件名> # 导出为 tar 文件
wsl --export <发行版> <文件名> --vhd # 导出为 .vhdx 文件
wsl --import <发行版> <路径> <tar文件> # 从 tar 导入
wsl --import <发行版> <路径> <vhdx> --vhd # 从 .vhdx 导入
wsl --import-in-place <发行版> <vhdx> # 就地导入 .vhdx(必须为 ext4 格式)
磁盘操作
wsl --mount <磁盘路径> # 挂载物理磁盘
wsl --mount <磁盘路径> --vhd # 挂载 VHD
wsl --mount <磁盘路径> --bare # 附加但不挂载
wsl --mount <磁盘路径> -t <文件系统> # 指定文件系统类型
wsl --mount <磁盘路径> -p <分区号> # 指定分区
wsl --unmount <磁盘路径> # 卸载磁盘
wsl --unmount # 卸载所有磁盘
IP 地址查询
wsl hostname -i # WSL 发行版的 IP 地址
ip route show | grep -i default | awk '{ print $3}' # 从 WSL 内看 Windows 主机 IP
弃用命令
以下命令已弃用,不应继续使用:wslconfig.exe、bash(旧语法)、lxrun。
systemd 服务管理
启用 systemd
新安装的 WSL(wsl --install)默认已启用 systemd。如果未启用:
- 编辑
/etc/wsl.conf:
sudo nano /etc/wsl.conf
- 添加以下内容:
[boot]
systemd = true
- 关闭并重启 WSL:
wsl --shutdown
- 验证:
# 检查 systemd 是否运行
systemctl status
# 列出所有服务
systemctl list-unit-files --type=service
架构影响
启用 systemd 后,WSL init 进程成为 systemd 的子进程(而非 PID 1)。这意味着:
- 系统关闭由 systemd 控制
- 服务不会保持 WSL 实例活跃(WSL 仍在原有规则下管理实例生命周期)
常用 systemd 操作
# 启动服务
sudo systemctl start docker
# 开机自启
sudo systemctl enable docker
# 查看服务状态
sudo systemctl status docker
# 查看所有服务
systemctl list-units --type=service
# 查看日志
journalctl -u docker -f
systemd 应用示例
snap 包管理(Canonical 的软件打包系统):
snap install spotify
MicroK8s(轻量级 Kubernetes):
snap install microk8s --classic
microk8s status --wait
microk8s enable dashboard dns registry
磁盘空间管理
VHD 存储原理
WSL 2 使用虚拟硬盘(VHD,文件名为 ext4.vhdx,ext4 文件系统格式)存储每个发行版的文件。VHD 会随使用自动增长,默认最大分配空间:
- WSL 0.58.0 之前:512GB(更早版本为 256GB)
- WSL 0.58.0 及之后:1TB
检查磁盘空间
wsl.exe --system -d <发行版> df -h /mnt/wslg/distro
输出字段说明:
| 字段 | 含义 |
|---|---|
| 文件系统 | VHD 文件系统标识符 |
| 大小 | 分配给 VHD 的最大空间 |
| 已用 | 当前使用的空间 |
| 可用性 | 剩余空间 |
| 使用% | 使用百分比 |
扩展 VHD 大小
方法一:wsl --manage(WSL 2.5+)
wsl --shutdown
wsl --manage <发行版> --resize 2TB
支持的大小格式:<数值>B/M/MB/G/GB/T/TB,不支持小数。
方法二:diskpart 手动操作
-
关闭所有 WSL 实例:
wsl --shutdown -
找到 .vhdx 文件路径:
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<发行版>' }).GetValue("BasePath") + "\ext4.vhdx"
- 以管理员身份打开 CMD,启动 diskpart:
diskpart
- 在 DISKPART 提示中:
select vdisk file="<vhdx文件路径>"
detail vdisk
expand vdisk maximum=<大小MB>
exit
maximum 的值必须大于当前虚拟大小,单位为 MB。例如扩展到 2TB:maximum=2097152。
- 启动发行版并扩展文件系统:
sudo mount -t devtmpfs none /dev
mount | grep ext4
sudo resize2fs /dev/sdb <大小MB>M
修复 VHD 装载错误
如果遇到「装载分发磁盘」错误,发行版可能进入了只读模式(因突然断电等原因)。表现为:
An error occurred mounting the distribution disk, it was mounted read-only as a fallback.
修复步骤:
-
关闭 WSL:
wsl --shutdown -
挂载 VHD(替换
<vhdx路径>为实际路径):
wsl --mount <vhdx路径> --vhd --bare
- 查找块设备名称:
wsl lsblk
- 修复文件系统(替换
<device>为块设备名,如sdc):
wsl sudo e2fsck -f /dev/<device>
- 卸载:
wsl --unmount