WSL2 优化与管理

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处

官方文档

官方文档已经写得很完整,这里只记录我自己会反复使用的命令。

管理发行版

# 查看已安装和可安装的发行版
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.vhdx

wsl --unregister Ubuntu 会直接删除发行版及其中的数据。我只在确认导出文件可用后执行。

启用 systemd

我的 /etc/wsl.conf 配置如下。公开文章里把实际用户名写成 TARGET_USER,使用时替换为发行版中已有的用户:

[boot]
systemd=true

[user]
default=TARGET_USER

[interop]
enabled=false
appendWindowsPath=false

我不需要从 WSL 调用 Windows 程序,所以关闭了互操作。这样会导致 powershell.exeexplorer.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

相关笔记