压缩 WSL 的 VHDX 文件并释放磁盘空间
在使用 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 | sudo apt autoremove |
方案一:启用 Sparse VHD 自动释放(推荐)
适用于:Windows 11 较新版本
这是最省心的方案。启用后,删除文件时空间会自动释放给宿主系统,无需手动压缩。
步骤 1:配置 .wslconfig
在 %USERPROFILE%\.wslconfig 文件中添加以下内容(如果文件不存在则创建):
1 | [experimental] |
步骤 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 | select vdisk file="C:\Users\<用户名>\AppData\Local\Packages\<发行版>\LocalState\ext4.vhdx" |
注意:如果启用了 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 快速定位。