在使用 WSL(Windows Subsystem for Linux)一段时间后,你可能会发现系统上的 VHDX 文件越来越大。即使删除了 WSL 中的文件,虚拟磁盘文件的大小也不会自动减小。本文将介绍多种压缩 WSL VHDX 文件的方法,你可以根据自己的 Windows 版本和需求选择最合适的方案。

方案速览

方案 速度 适用系统 特点
Sparse VHD ⚡ 自动 Windows 11 一次配置,永久生效
fstrim + Optimize-VHD 🚀 快 Windows Pro/Enterprise 官方推荐方案
fstrim + diskpart 🚀 快 所有 Windows 版本 无需 Hyper-V
导出重新导入 🐢 慢 所有 Windows 版本 最彻底的压缩

前置步骤:清理 WSL 系统中的无用文件

无论选择哪种压缩方案,建议先清理 WSL 中的垃圾文件:

1
2
sudo apt autoremove
sudo apt clean

方案一:启用 Sparse VHD 自动释放(推荐)

适用于:Windows 11 较新版本

这是最省心的方案。启用后,删除文件时空间会自动释放给宿主系统,无需手动压缩。

步骤 1:配置 .wslconfig

%USERPROFILE%\.wslconfig 文件中添加以下内容(如果文件不存在则创建):

1
2
[experimental]
sparseVhd=true

步骤 2:对已有发行版启用 Sparse

1
wsl --manage <发行版名称> --set-sparse true

例如:

1
wsl --manage Ubuntu --set-sparse true

步骤 3:重启 WSL

1
wsl --shutdown

配置完成后,WSL 会自动管理磁盘空间,无需再手动压缩。

方案二:fstrim + Optimize-VHD(快速)

适用于:Windows Pro / Enterprise / Education(需要 Hyper-V)

步骤 1:在 WSL 中执行 fstrim

fstrim 比传统的 dd 零填充快得多

1
sudo fstrim -v /

步骤 2:关闭 WSL

1
wsl --shutdown

步骤 3:使用 Optimize-VHD 压缩

打开 PowerShell(管理员权限),执行:

1
Optimize-VHD -Path "C:\Users\<用户名>\AppData\Local\Packages\<发行版>\LocalState\ext4.vhdx" -Mode Full

提示:如果提示找不到 Optimize-VHD 命令,需要先启用 Hyper-V 功能,或使用方案三。

方案三:fstrim + diskpart(通用)

适用于:所有 Windows 版本(包括 Windows Home)

步骤 1:在 WSL 中执行 fstrim

1
sudo fstrim -v /

步骤 2:关闭 WSL

1
wsl --shutdown

步骤 3:使用 diskpart 压缩

打开 命令提示符或 PowerShell(管理员权限)

1
diskpart

在 diskpart 交互界面中依次执行:

1
2
3
4
5
select vdisk file="C:\Users\<用户名>\AppData\Local\Packages\<发行版>\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

注意:如果启用了 Sparse VHD,需要先临时关闭才能使用 diskpart:

1
2
3
wsl --manage <发行版名称> --set-sparse false
# 执行 diskpart 压缩...
wsl --manage <发行版名称> --set-sparse true

方案四:导出并重新导入

适用于:所有 Windows 版本

这种方法最彻底,但耗时较长,适合磁盘空间紧张需要最大程度压缩的情况。

步骤 1:查看发行版名称

1
wsl --list

步骤 2:导出 WSL 发行版

1
wsl --export <发行版名称> D:\backup\wsl-backup.tar

步骤 3:注销当前发行版

1
wsl --unregister <发行版名称>

⚠️ 警告:此操作会删除当前的 VHDX 文件,请确保备份已完成。

步骤 4:重新导入

1
wsl --import <发行版名称> D:\WSL\<发行版名称> D:\backup\wsl-backup.tar

步骤 5:设置默认用户

重新导入后默认以 root 登录,需要恢复默认用户:

1
<发行版名称> config --default-user <用户名>

例如:

1
ubuntu config --default-user john

附录:查找 VHDX 文件位置

WSL 的虚拟磁盘文件通常位于以下路径:

1
C:\Users\<用户名>\AppData\Local\Packages\<发行版包名>\LocalState\ext4.vhdx

常见发行版包名:

  • Ubuntu: CanonicalGroupLimited.Ubuntu*
  • Debian: TheDebianProject.DebianGNULinux_*
  • Docker Desktop: Docker.DockerDesktopClient_*

你也可以在文件资源管理器地址栏输入 %LOCALAPPDATA%\Packages 快速定位。