WSL磁盘清理器是一个面向 Windows + WSL 用户的小型桌面工具,用来定位和处理 WSL2 ext4.vhdx 虚拟磁盘膨胀问题。
很多 WSL2 用户会遇到这种情况:在 Linux 发行版里删除了 Docker 构建缓存、语言缓存或临时文件后,df -h 显示 WSL 内部空间已经释放,但 Windows 的 C 盘可用空间没有明显增加。这通常是因为 WSL2 的虚拟磁盘文件 ext4.vhdx 会增长,但不会总是自动缩小。本工具把常用的安全清理、fstrim 和 DiskPart 压缩流程做成图形界面,避免每次手动敲命令。
- 自动检测本机 WSL 发行版。
- 显示每个发行版对应的
ext4.vhdx路径和当前大小。 - 分析 WSL 内部磁盘占用,快速查看
/、/root、/var、/opt、Docker 占用。 - 安全清理 WSL 内常见开发缓存。
- 一键执行
fstrim + wsl --shutdown + diskpart /s compact vdisk,自动压缩 VHDX。 - 查询 VHDX sparse 状态。
- 清理 Windows 当前用户临时文件。
- 打开 Windows 存储设置。
- 复制手动 DiskPart 压缩脚本作为备用方案。
默认不会执行以下高风险操作:
- 不删除
/opt/Projects。 - 不删除 Docker volume。
- 不删除数据库、对象存储或业务数据。
- 不执行
docker system prune --volumes。 - 不强制开启
wsl --manage --set-sparse true --allow-unsafe。 - 不清理 Windows 下载目录。
- 不直接删除任何
ext4.vhdx文件。
注意:压缩 VHDX 会关闭所有 WSL 发行版。执行前请保存 WSL、Docker、VS Code Remote 里的工作。
适合以下情况:
C:\Users\<你>\AppData\Local\Packages\...\LocalState\ext4.vhdx很大。- WSL/Docker 清理后,Windows C 盘空间没有明显增加。
- 经常使用 Docker、Python、Node.js、Go、Gradle、uv,缓存膨胀明显。
- 想把手动
fstrim、wsl --shutdown、diskpart compact vdisk流程做成按钮。
不适合以下情况:
- 想清理服务器磁盘。
- 想清理整个 Windows 系统盘所有垃圾。
- 想自动删除 Docker 数据库 volume。
- 想强制压缩正在使用中的 WSL 磁盘。
下载 Release 页面里的 WSL磁盘清理器.exe,右键以管理员身份运行。
首次使用建议按顺序操作:
- 点击“刷新”,确认检测到 WSL 发行版。
- 选择目标发行版,例如
Ubuntu。 - 点击“分析 WSL 占用”,确认主要占用来源。
- 点击“安全清理 WSL 缓存”。
- 点击“一键压缩 VHDX(自动执行)”。
- 等待 DiskPart 压缩完成后,查看 VHDX 大小变化。
需要 Windows 和 Python 3.11+。
python main.py如果需要压缩 VHDX,请用管理员权限打开 PowerShell 或点击程序里的“以管理员重启”。
点击“一键压缩 VHDX(自动执行)”后,程序会依次执行:
1. wsl -d <发行版> -u root -- bash -lc "fstrim -av; sync"
2. wsl --shutdown
3. 生成临时 DiskPart 脚本
4. diskpart /s <临时脚本路径>
5. 删除临时脚本并刷新 VHDX 大小
临时 DiskPart 脚本大致如下:
select vdisk file="C:\Users\...\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
如果提示“另一个程序正在使用此文件”,请关闭 Docker Desktop、VS Code Remote、所有 WSL 终端,再重新点击一键压缩。
工具会清理常见开发缓存和临时文件,例如:
/tmp/*/var/tmp/*/root/.cache/uv/root/.cache/trivy/root/.cache/go-build/root/.cache/pip/root/.npm/_npx/root/.npminstall_tarball/root/.gradle/caches/root/.gradle/daemon/root/.gradle/.tmp- apt 缓存
- journal 日志,保留约 200MB
这些都是缓存或临时文件。工具不会清理你的项目目录 /opt/Projects,也不会删除 Docker volume。
WSL2 使用 ext4.vhdx 作为虚拟磁盘。Linux 文件系统内部空间释放后,Windows 宿主机上的 VHDX 文件不一定立刻缩小。通常需要在 WSL 内执行 fstrim,再关闭 WSL,最后使用 DiskPart 或 Hyper-V 工具压缩 VHDX。
不可以。直接删除 ext4.vhdx 等于删除整个 WSL 发行版的数据,包括 Linux 系统、项目、Docker 数据、数据库等。
DiskPart 压缩虚拟磁盘需要管理员权限。普通权限可以查看和分析,但不能可靠压缩 VHDX。
默认不会。工具不会执行 docker volume prune,也不会删除 /var/lib/docker/volumes。
不支持。这个项目只面向本机 Windows + WSL。
Set-ExecutionPolicy -Scope Process Bypass
.\build_windows.ps1生成文件:
dist\WSL磁盘清理器.exe
打包脚本会先使用 ASCII 名称构建 WSLDiskCleaner.exe,再用 Unicode code point 生成中文文件名,避免 Windows PowerShell 5.1 读取 UTF-8 脚本时中文乱码导致重命名失败。
仓库内提供 publish_v0.1.0.ps1,可在安装并登录 GitHub CLI 后一键创建仓库、提交代码、打标签并发布 Release。
Set-ExecutionPolicy -Scope Process Bypass
.\publish_v0.1.0.ps1默认仓库名为 WSLDiskCleaner,默认发布公开仓库。可以修改参数:
.\publish_v0.1.0.ps1 -RepoName WSLDiskCleaner -Visibility privateMIT License。