随机
Enter 搜索 ↑↓ 切换 Esc 清空

wsl2

命令

WSL2 高级配置与使用技巧

wsl2

WSL2 高级配置与使用技巧

补充说明

WSL2 相比 WSL1 使用真正的 Linux 内核(基于 Hyper-V 虚拟机),提供完整的系统调用兼容性。本文涵盖 WSL2 的安装迁移、资源配置、网络代理、跨系统互操作、备份还原等高级配置。

前置条件

  • Windows 10 版本 1903+ 或 Windows 11
  • 已启用虚拟机平台(dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • BIOS 中已开启虚拟化(VT-x / AMD-V)

一、WSL1 与 WSL2 切换

查看当前版本:

wsl -l -v

将指定发行版升级到 WSL2:

wsl --set-version debian 2

设置新安装的发行版默认使用 WSL2:

wsl --set-default-version 2

如升级失败,需安装 WSL2 Linux 内核更新包:

# 下载并安装内核更新包
# https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

二、资源限制(内存 / CPU / Swap)

WSL2 默认使用主机全部内存和 CPU。通过 .wslconfig 文件限制资源占用。

配置文件位置

%USERPROFILE% 目录下创建 .wslconfig 文件:

# %USERPROFILE%\.wslconfig

[wsl2]
memory=8GB                  # 限制最大内存使用
processors=4                # 限制 CPU 核心数
swap=2GB                    # 交换空间大小
swapfile=C:\\Users\\meimo\\AppData\\Local\\Temp\\swap.vhdx
localhostForwarding=true    # 启用 localhost 端口转发

使配置生效

wsl --shutdown
wsl

三、网络代理配置

WSL2 使用虚拟交换机,IP 地址与宿主机不同。需配置代理转发。

方案一:Windows 代理转发到 WSL2

在 Windows 上开启代理时(如 Clash),设为允许局域网连接,然后在 WSL2 中配置:

# 在 WSL2 中获取宿主机 IP
host_ip=$(ip route | grep default | awk '{print $3}')

# 临时设置代理
export http_proxy="http://$host_ip:7890"
export https_proxy="http://$host_ip:7890"
export all_proxy="socks5://$host_ip:7890"

写入 ~/.bashrc 永久生效:

# ~/.bashrc 或 ~/.zshrc
host_ip=$(ip route | grep default | awk '{print $3}')
export http_proxy="http://$host_ip:7890"
export https_proxy="http://$host_ip:7890"
export all_proxy="socks5://$host_ip:7890"
export no_proxy="localhost,127.0.0.1,::1"

方案二:WSL2 镜像网络模式(Win11 22H2+)

创建 %USERPROFILE%\.wslconfig

[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=false
autoProxy=true

配置后,WSL2 与宿主机共享同一 IP 地址,代理自动同步:

wsl --shutdown
wsl

四、跨系统互操作

1. 在 WSL2 中调用 Windows 程序

WSL2 可直接运行宿主机上的 .exe 程序:

# 打开 Windows 资源管理器
explorer.exe .

# 使用 Windows 记事本编辑 WSL2 文件
notepad.exe ~/test.txt

# 执行 Windows 命令
cmd.exe /c ipconfig

2. 在 Windows 中调用 WSL2 命令

通过 wsl 命令直接在 Windows 终端中执行 Linux 命令:

# 执行单条命令
wsl ls -la /home

# 传递管道数据
wsl grep "error" < log.txt

# 用 WSL2 的 Python 执行脚本
wsl python3 /home/meimo/script.py

3. 访问 Windows 文件

WSL2 自动挂载 Windows 驱动器到 /mnt/ 目录:

ls /mnt/c/Users/meimo/Desktop
ls /mnt/d/Downloads

注意:通过 /mnt/ 访问 Windows 文件性能低于 WSL2 原生文件系统(/home/etc 等)。推荐将项目文件放在 WSL2 的 Linux 文件系统中,获得最佳 IO 性能。

4. 从 Windows 访问 WSL2 文件

在 Windows 资源管理器地址栏输入:

\\wsl.localhost\debian\home\meimo

或通过快捷方式:

explorer.exe \\wsl.localhost\debian

五、磁盘与虚拟硬盘管理

1. 查看虚拟硬盘(VHDX)位置

默认路径:

%USERPROFILE%\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4g2z8d5g68\LocalState\ext4.vhdx

不同发行版对应的包名不同,可通过以下命令定位:

(Get-AppxPackage -Name "*Debian*").PackageFamilyName
(Get-AppxPackage -Name "*Ubuntu*").PackageFamilyName

2. 压缩虚拟硬盘

WSL2 虚拟硬盘只会增长不会自动收缩。定期压缩可回收磁盘空间:

# 在 WSL2 内部,用零填充空闲空间
sudo dd if=/dev/zero of=/tmp/zero bs=1M status=progress
sudo rm /tmp/zero
# 在 Windows 管理员 PowerShell 中执行
wsl --shutdown
diskpart

在 diskpart 中:

# 选择 WSL2 虚拟硬盘文件
select vdisk file="C:\Users\meimo\AppData\Local\Packages\...\LocalState\ext4.vhdx"

# 压缩
attach vdisk readonly
compact vdisk
detach vdisk
exit

3. 导出与导入(备份 / 迁移)

# 导出发行版为 tar 文件
wsl --export debian D:\backup\debian.tar

# 导入到新位置
wsl --import debian D:\WSL\debian D:\backup\debian.tar --version 2

# 删除旧发行版
wsl --unregister debian

六、自定义 WSL2 内核

1. 查看当前内核版本

uname -a

2. 使用自定义内核

Microsoft WSL2-Linux-Kernel 下载源码编译,或在 %USERPROFILE%\.wslconfig 中指定预编译内核:

[wsl2]
kernel=C:\\Users\\meimo\\wsl2-kernel\\vmlinux

七、WSL2 中运行 Docker

WSL2 可直接运行 Docker Engine,无需 Docker Desktop。

安装 Docker Engine

# Debian / Ubuntu
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

启动 Docker

sudo service docker start
# 设置开机自启
sudo update-rc.d docker defaults

验证:

docker run hello-world

八、常见问题

内存占用过高

WSL2 默认可以耗尽宿主机全部内存。配置 .wslconfig 限制 memory 值:

[wsl2]
memory=4GB

网络代理失效

WSL2 IP 不同于宿主机。使用 networkingMode=mirrored 或手动获取 host_ip 配置代理。

时间同步偏差

# 同步 WSL2 时间到宿主机
sudo hwclock -s

跨机复制粘贴不工作

确保安装 wslu 工具并更新:

sudo apt install wslu -y

参考链接