官方文档
官方文档已经写得很完整,这里只记录我自己会反复使用的命令。
管理发行版
# 查看已安装和可安装的发行版
wsl --list --verbose
wsl --list --online
# 安装、更新和设置默认发行版
wsl --install --distribution Debian
wsl --update
wsl --set-default Debian
# 停止全部 WSL 实例
wsl --shutdown修改 Ubuntu 镜像地址
通过 WSL 安装 Ubuntu 后,我会把默认软件源换成 USTC 镜像。下面的路径适用于使用 ubuntu.sources 的 Ubuntu 版本:
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources导出 tar 适合备份或迁移,WSL2 也可以直接导出 VHDX:
wsl --export Ubuntu Ubuntu.tar
wsl --import Ubuntu C:\app\wsl\Ubuntu Ubuntu.tar --version 2
wsl --export Debian Debian.vhdx --vhd
wsl --import-in-place Debian-VHD Debian.vhdxwsl --unregister Ubuntu 会直接删除发行版及其中的数据。我只在确认导出文件可用后执行。
启用 systemd
我的 /etc/wsl.conf 配置如下。公开文章里把实际用户名写成 TARGET_USER,使用时替换为发行版中已有的用户:
[boot]
systemd=true
[user]
default=TARGET_USER
[interop]
enabled=false
appendWindowsPath=false我不需要从 WSL 调用 Windows 程序,所以关闭了互操作。这样会导致 powershell.exe、explorer.exe 等命令无法在 WSL 中运行。修改后回到 PowerShell 执行 wsl --shutdown,重新进入发行版即可生效。
zram 压缩交换
我使用过下面这组命令创建 zram swap,大小取 WSL 可见内存的一半:
sudo zramctl /dev/zram0 --algorithm lzo-rle --size "$(($(grep -Po 'MemTotal:\s*\K\d+' /proc/meminfo) / 2))KiB"
sudo mkswap -U clear /dev/zram0
sudo swapon --discard --priority 100 /dev/zram0
swapon --show这要求当前 WSL2 内核已经提供 /dev/zram0 和对应压缩算法。它适合减少换页 I/O,但压缩数据仍然占用内存,不等于释放 Windows 磁盘空间。
关闭 zram:
sudo swapoff /dev/zram0