当前位置: 首页 > news >正文

WSL 磁盘清理实战:从缓存清理到 ext4.vhdx 压缩回收空间

WSL 磁盘清理实战:从缓存清理到 ext4.vhdx 压缩回收空间

在长期使用 WSL(Windows Subsystem for Linux)的过程中,很多人都会遇到一个典型问题:Linux 内部已经删掉了很多文件,但 Windows 侧的ext4.vhdx仍然持续膨胀,磁盘空间并没有真正回收。

这篇文章整理了一套实际可执行的 WSL 清理流程,涵盖以下几个关键环节:

  • 检查 WSL 与各发行版状态
  • 分析 Linux 文件系统占用情况
  • 清理 APT 缓存和用户缓存
  • 回收 Docker 无用镜像与构建缓存
  • 关闭 WSL 后压缩ext4.vhdx
  • 复核清理结果与剩余大目录

如果你也在 Windows 上跑多个 Ubuntu 发行版,或者用 WSL 承载 Docker / 开发环境,这套流程基本可以直接复用。🚀


一、问题本质:为什么删了文件,Windows 磁盘还是没变小?

WSL2 的 Linux 文件系统通常保存在一个虚拟磁盘文件中,也就是 Windows 侧看到的ext4.vhdx

需要注意两点:

  1. Linux 内部删除文件,只是释放了文件系统中的可用空间
  2. Windows 侧的ext4.vhdx不会自动缩小

也就是说,即使你已经在 Ubuntu 里删掉了大量缓存、镜像、日志或临时文件,Windows 磁盘占用也可能暂时看不到变化。

所以,完整回收空间通常需要两步:

  • 先在 Linux 内部清理无用数据
  • 再在 Windows 侧对ext4.vhdx做压缩

二、清理前先做状态检查

建议先确认当前 WSL 状态,以及机器上有哪些发行版正在运行。

wsl--status wsl-l-v wsl--list--running

如果需要快速看某个发行版根分区的空间使用情况:

wsl-d <DistroName>--df-h/

同时,也建议在 Windows 侧查看各发行版对应的ext4.vhdx文件大小。路径通常位于:

%LOCALAPPDATA%\Packages\...\LocalState\ext4.vhdx

这样可以建立一个清理前基线,方便后续对比效果。


三、先从 Linux 内部找出“大户”

真正清理之前,最好先确认空间到底被谁占了。

1)查看根目录一级占用

wsl-d Ubuntu--user root--sh-lc"du -xh -d 1 / 2>/dev/null | sort -h"wsl-d Ubuntu-22.04--user root--sh-lc"du -xh -d 1 / 2>/dev/null | sort -h"wsl-d Ubuntu-24.04--user root--sh-lc"du -xh -d 1 / 2>/dev/null | sort -h"

2)继续深挖/var等高风险目录

wsl-d Ubuntu--user root--sh-lc"du -xh -d 1 /var 2>/dev/null | sort -h && du -sh /var/cache /var/cache/apt /var/lib/apt /var/lib/docker /root/.cache /home/*/.cache 2>/dev/null"

这一步通常能快速定位以下几类高占用目录:

  • /var/lib/docker
  • /var/cache/apt
  • /var/lib/apt/lists
  • /root/.cache
  • /home/<user>/.cache
  • 各类语言或工具链缓存目录(如.npm.cargo.gradle.rustup.venv等)

⚠️建议先看清楚再删。不是所有大目录都适合直接清理,尤其是仍在使用的项目依赖、镜像或虚拟环境。


四、清理 APT 元数据和常见缓存

对于日常开发环境来说,APT 缓存和~/.cache往往是最安全、最容易回收的一部分。

wsl-d Ubuntu--user root--sh-lc"apt-get clean; rm -rf /var/lib/apt/lists/*; for d in /root/.cache /home/*/.cache; do [ -d \"$d\" ] && find \"$d\" -mindepth 1 -maxdepth 1 -exec rm -rf {} +; done"wsl-d Ubuntu-22.04--user root--sh-lc"apt-get clean; rm -rf /var/lib/apt/lists/*; for d in /root/.cache /home/*/.cache; do [ -d \"$d\" ] && find \"$d\" -mindepth 1 -maxdepth 1 -exec rm -rf {} +; done"wsl-d Ubuntu-24.04--user root--sh-lc"apt-get clean; rm -rf /var/lib/apt/lists/*; for d in /root/.cache /home/*/.cache; do [ -d \"$d\" ] && find \"$d\" -mindepth 1 -maxdepth 1 -exec rm -rf {} +; done"

这一步会做什么?

  • 清理apt下载缓存
  • 删除apt包索引列表
  • 清理 root 用户和普通用户的~/.cache内容

风险说明

  • 大部分缓存之后都可以自动重建
  • 下次执行apt update时,包索引会重新下载
  • 某些开发工具第一次重新启动时可能略慢,这是正常现象

总体来说,这一步通常收益稳定、风险较低。✅


五、Docker 往往才是最大空间黑洞

如果你的 WSL 发行版中运行过 Docker,那么/var/lib/docker很可能就是罪魁祸首。

可以使用以下命令清理无用资源:

wsl-d Ubuntu--user root--sh-lc"docker system prune -af && docker builder prune -af && docker system df"wsl-d Ubuntu-22.04--user root--sh-lc"docker system prune -af && docker builder prune -af && docker system df"wsl-d Ubuntu-24.04--user root--sh-lc"docker system prune -af && docker builder prune -af && docker system df"

这一步会回收什么?

  • 未使用的镜像
  • 已停止的容器
  • 未使用的网络
  • 构建缓存(build cache)

风险说明

⚠️docker system prune -af是有破坏性的。

它会删除当前未被容器使用的镜像和缓存。如果你依赖本地镜像做离线开发、快速构建或环境复现,请先确认是否真的可以删。

建议在执行前先看一下:

wsl-d Ubuntu--user root--sh-lc"docker system df"

如果空间压力很大,而镜像又都可重复拉取/重建,那么这一步往往是最有效的回收手段。💡


六、关闭 WSL,为压缩虚拟磁盘做准备

在 Windows 压缩ext4.vhdx之前,必须确保 WSL 已完全关闭。

wsl--shutdown

这是必需步骤。否则虚拟磁盘仍处于挂载或占用状态,压缩很可能失败,或者压缩效果不明显。


七、在 Windows 侧压缩ext4.vhdx

完成 Linux 内部清理之后,就可以从 Windows 管理员 PowerShell 执行压缩。

Optimize-VHD-Path"C:\Users\<YourUser>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"-Mode FullOptimize-VHD-Path"C:\Users\<YourUser>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"-Mode FullOptimize-VHD-Path"C:\Users\<YourUser>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"-Mode Full

注意事项

  • 需要管理员权限
  • 需要目标发行版已经执行过wsl --shutdown
  • 不同机器上的包名路径可能不同,请按实际情况替换

如果你的环境尚未启用相关 Hyper-V / 虚拟磁盘管理能力,可能还需要先确认 PowerShell 与系统组件是否支持Optimize-VHD


八、一次实际清理的回收结果

下面是一组实际清理结果,供参考。

回收的 Docker 空间

  • Ubuntu:约689MB
  • Ubuntu-22.04:约17.73GB
  • Ubuntu-24.04:约74.83MB

ext4.vhdx压缩前后变化

  • Ubuntu199.23 GB113.97 GB
  • Ubuntu-22.0450.28 GB33.43 GB
  • Ubuntu-24.0430.04 GB23.14 GB

Linux 内最终根分区使用量

  • Ubuntu97Gused on/
  • Ubuntu-22.0430Gused on/
  • Ubuntu-24.0421Gused on/

从结果可以看到,真正显著的空间回收通常来自两部分叠加:Docker 清理 + VHDX 压缩。


九、清理后仍然占空间的常见目录

即使完成以上步骤,某些目录仍然可能长期占用大量空间。

Ubuntu 中常见的大目录

  • /home体积较大
  • 用户目录中的资料文件夹
  • ~/.deepv
  • ~/.venv
  • ~/.rustup
  • ~/.npm
  • ~/.cline

Ubuntu-22.04 中常见的大目录

  • /var/lib/docker(清理前通常最明显)
  • ~/.npm
  • ~/.nuget
  • ~/.nvm
  • 各类项目目录

Ubuntu-24.04 中常见的大目录

  • ~/.npm
  • ~/.nvm

如果你想继续细化排查,可以执行:

wsl-d Ubuntu--user root--sh-lc"du -xh -d 2 /home 2>/dev/null | sort -h"

这条命令对于定位用户目录下的“大户”特别有效。


十、建议优先排查的目录

如果清理后空间仍不理想,可以进一步检查以下目录:

  • ~/.npm
  • ~/.cargo
  • ~/.nuget
  • ~/.gradle
  • ~/.rustup
  • 不再使用的虚拟环境(如~/.venv
  • 长期堆积的大型项目目录
  • 下载目录、模型目录、缓存目录

⚠️ 这一步不建议“一刀切”删除,最好逐项确认用途后再处理。


十一、一份适合复用的 WSL 清理 Checklist

如果你只想快速执行,可以按下面顺序操作:

  1. 检查 WSL 与发行版状态
  2. 统计 Linux 文件系统占用
  3. 查看 Windows 侧ext4.vhdx大小
  4. 清理 APT 缓存与用户缓存
  5. 清理 Docker 无用镜像与构建缓存
  6. 执行wsl --shutdown
  7. 使用Optimize-VHD -Mode Full压缩虚拟磁盘
  8. 再次检查 Linux 占用与 VHDX 大小

十二、结语

WSL 磁盘清理的关键不只是“删文件”,而是理解Linux 内部释放空间Windows 侧回收虚拟磁盘体积是两件不同的事。

如果你只是清理缓存,而没有压缩ext4.vhdx,最终往往只能看到“Linux 内变干净了”,却看不到 Windows 磁盘真正变小。

一个相对稳妥、通用的清理策略是:

  • 先分析占用来源
  • 先清低风险缓存
  • 再清 Docker 等高收益区域
  • 最后统一关机并压缩 VHDX

这样做既更安全,也更容易获得可观的空间回收效果。✨

如果你经常在 WSL 里跑容器、构建环境或 AI/DevOps 工具链,建议把这套流程整理成自己的定期维护 SOP,会很省磁盘,也很省心。

http://www.jsqmd.com/news/454383/

相关文章:

  • 低代码 + AI = 对话方式生成UI
  • nodejs社区医疗挂号 体检服务病历管理系统的vue
  • 基于PaaS平台一体化智能全域数据治理平台建设方案:数据治理战略与实施、数据治理组织与制度、数据治理核心内容、数据安全管理......
  • 【转载】空间数据研究所A平台|2026年01月更新|全国338万个AOI(373个地市|3级分类|42个属性字段|非OSM数据)
  • 万爱通礼品卡回收注意事项:避免常见问题的实用技巧 - 团团收购物卡回收
  • nodejs+vue动物宠物领养公益网站express-koa框架
  • 2026年北京继承律师深度测评:从专业能力到服务体验的选择指南 - 小白条111
  • 哈弗H9和路虎发现运动版豪华越野大对比,谁才是你的心头好?
  • Flutter 三方库 ff_annotation_route 的鸿蒙化适配指南 - 掌握基于注解的自动化路由管理技术、助力鸿蒙大型 HAP 项目构建极速解构且类型安全的页面跳转体系
  • 2026年球形网络摄像头优质品牌推荐:远程监控系统、高清摄像头、半球网络摄像头、家用高清监控、无线监控设备选择指南 - 优质品牌商家
  • nodejs青少年党史宣传教育学习平台vue
  • Flutter 三方库 eth_sig_util 的鸿蒙化适配指南 - 掌握以太坊加密签名核心技术、助力鸿蒙端 Web3 钱包与去中心化身份验证应用开发
  • nodejs基于校园作业反馈的家校联系微信小程序
  • 英国留学中介实测:谁才是留学党刚需之选 - 博客湾
  • 打工仔2026年逆袭!OpenClaw(Clawdbot)10分钟零基础安装教程
  • 全混合动力电动汽车Simulink模型:研究高效控制策略以提升燃油经济性,需Matlab 20...
  • 制造型企业数字化车间建设:数字化车间建设目标、数字化车间建设路线图(六步法策略)、数字化车间通用技术要求
  • 北航26春软件工程作业-[I.1] 个人作业:阅读和提问
  • Prometheus + Grafana 从采集到告警的完整实战(Go + Kind)
  • [第十六届蓝桥杯/java]3.最短距离
  • 7.2 中间件(LangChain 内置中间件)
  • 新洋港潮汐表查询2026-03-09
  • 音视频技术迭代下EasyDSS直播点播视频会议能力的发展方向与价值升级
  • NPU 算力调度内核深度解析
  • 【声呐技术】基于声纳的水下机器人深度学习:概述、鲁棒性与挑战
  • 扫描电镜和透射电镜的区别
  • WebRTC/语音转文字STT/AI语言大模型重构EasyDSS视频会议
  • SqlSession was not registered for synchronization because synchronization is not active
  • GLM-4.7-Flash模型在FP16精度下部署需求
  • Flutter 三方库 fftea 的鸿蒙化适配指南 - 打造极致性能的文本扩展加密、助力鸿蒙端敏感数据安全传输