Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WSL磁盘清理器

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,缓存膨胀明显。
  • 想把手动 fstrimwsl --shutdowndiskpart compact vdisk 流程做成按钮。

不适合以下情况:

  • 想清理服务器磁盘。
  • 想清理整个 Windows 系统盘所有垃圾。
  • 想自动删除 Docker 数据库 volume。
  • 想强制压缩正在使用中的 WSL 磁盘。

快速使用

方式一:直接运行 EXE

下载 Release 页面里的 WSL磁盘清理器.exe,右键以管理员身份运行。

首次使用建议按顺序操作:

  1. 点击“刷新”,确认检测到 WSL 发行版。
  2. 选择目标发行版,例如 Ubuntu
  3. 点击“分析 WSL 占用”,确认主要占用来源。
  4. 点击“安全清理 WSL 缓存”。
  5. 点击“一键压缩 VHDX(自动执行)”。
  6. 等待 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 终端,再重新点击一键压缩。

安全清理 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。

常见问题

为什么 WSL 里删了很多文件,但 Windows C 盘没变大?

WSL2 使用 ext4.vhdx 作为虚拟磁盘。Linux 文件系统内部空间释放后,Windows 宿主机上的 VHDX 文件不一定立刻缩小。通常需要在 WSL 内执行 fstrim,再关闭 WSL,最后使用 DiskPart 或 Hyper-V 工具压缩 VHDX。

可以直接删除 ext4.vhdx 吗?

不可以。直接删除 ext4.vhdx 等于删除整个 WSL 发行版的数据,包括 Linux 系统、项目、Docker 数据、数据库等。

为什么需要管理员权限?

DiskPart 压缩虚拟磁盘需要管理员权限。普通权限可以查看和分析,但不能可靠压缩 VHDX。

会不会删除 Docker 数据库?

默认不会。工具不会执行 docker volume prune,也不会删除 /var/lib/docker/volumes

支持服务器清理吗?

不支持。这个项目只面向本机 Windows + WSL。

打包 EXE

Set-ExecutionPolicy -Scope Process Bypass
.\build_windows.ps1

生成文件:

dist\WSL磁盘清理器.exe

打包脚本会先使用 ASCII 名称构建 WSLDiskCleaner.exe,再用 Unicode code point 生成中文文件名,避免 Windows PowerShell 5.1 读取 UTF-8 脚本时中文乱码导致重命名失败。

GitHub 发布

仓库内提供 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 private

许可证

MIT License。

About

面向 Windows + WSL2 的磁盘清理与 VHDX 压缩工具,支持占用分析、安全缓存清理、fstrim、DiskPart 和图形化操作。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages