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

WSL2 吃掉我 25GB C 盘空间:一次完整的排查与回收记录

C 盘只剩 1GB罪魁祸首是 WSL2 里的 Docker 缓存19GB。但清理完 Docker 后 C 盘并没有立刻恢复——因为WSL2 的虚拟磁盘ext4.vhdx只会自动膨胀不会自动收缩。最终通过docker system prunefstrimOptimize-VHD三步组合拳回收了约 17GB 空间。起因C 盘告急某天系统开始卡顿一查磁盘Get-PSDrive-Name C可用空间只剩~1GB已经影响正常使用了。排查方向很明确——我机器上跑着多个 WSL 发行版wsl-l-vNAME STATE VERSION * Ubuntu Running 2 podman-machine-default Stopped 2 kali-linux Stopped 2WSL2 的虚拟磁盘是最大嫌疑。第一步定位 VHDX 文件WSL2 把整个 Linux 文件系统打包在一个ext4.vhdx虚拟磁盘中默认存放在 C 盘用户目录下Get-ChildItem-Path$env:LOCALAPPDATA\Packages-Recurse-Filterext4.vhdx找到 Ubuntu 的虚拟磁盘%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu_...\LocalState\ext4.vhdx文件大小~25GB。破案了。第二步排查 Linux 内部占用进入 Ubuntu 看看空间都被谁吃了# 文件系统总览wsl-dUbuntu-uroot --sh-lcdf -h /# 各目录占用排序wsl-dUbuntu-uroot --sh-lcdu -sh /home /var /usr /opt /tmp /root 2/dev/null | sort -h结果目录占用/home 1GB/usr~9GB/var~22GB继续深挖/varwsl-dUbuntu-uroot --sh-lcdu -sh /var/* 2/dev/null | sort -h | tail19G /var/lib/dockerDocker 独占 19GB占了 VHDX 总量的 76%。第三步清理 Docker查看 Docker 占用明细wsl-dUbuntu-uroot --sh-lcdocker system df -v可以看到镜像、已停止容器、build cache 各自的占用情况。执行清理wsl-dUbuntu-uroot --sh-lcdocker system prune -af这条命令清理的内容✅ 所有已停止的容器✅ 所有未被引用的镜像✅ 全部 build cache✅ 未使用的网络❌不会删除 volume这是刻意的本次回收~10GB。⚠️关于--volumes参数Docker volume 里通常存放数据库文件、业务数据等有状态内容。除非你明确知道所有 volume 都可以丢弃否则不要加--volumes。清理系统缓存顺手清理 APT 缓存和临时文件wsl-dUbuntu-uroot --sh-lcapt-get clean rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*清理 systemd 日志保留最近 7 天wsl-dUbuntu-uroot --sh-lcjournalctl --vacuum-time7d /dev/null 21 || true清理完成后Ubuntu 内部实际占用24GB → 7.3GB。第四步为什么 C 盘还没恢复这是很多人踩的坑WSL2 的 ext4.vhdx 是只增不减的。Linux 内部删了文件VHDX 文件大小不会自动缩小。必须手动压缩。类比理解就像一个气球吹到 25L即使放掉一半气体气球皮也不会自己缩回去——你需要手动压缩它。第五步压缩 VHDX5.1 执行 fstrim通知底层释放空闲块wsl-dUbuntu-uroot --sh-lcfstrim -av5.2 关闭所有 WSL 实例wsl--shutdown5.3 处理 sparse 文件标记如有如果之前执行过wsl --manage Ubuntu --set-sparse true压缩时会报错虚拟硬盘文件必须是未压缩和未加密的文件并且不能是稀疏文件。检查并关闭 sparse 标记# 检查fsutil sparse queryflag你的ext4.vhdx完整路径# 如果显示 This file is set as sparse执行fsutil sparse setflag你的ext4.vhdx完整路径0# 再次确认应显示 This file is NOT set as sparse5.4 执行压缩需要管理员 PowerShellOptimize-VHD-Path你的ext4.vhdx完整路径-Mode Full 如果系统没有Optimize-VHD非 Pro/Enterprise可以用diskpart替代diskpart select vdisk file你的ext4.vhdx完整路径 compact vdisk detach vdisk exit压缩完成后C 盘空间真正释放。最终结果指标处理前处理后Docker 占用19GB~2GBUbuntu 内部实际占用24GB7.3GBext4.vhdx 文件大小25GB~8GBC 盘可用空间~1GB20GB完整 SOP可直接复用以后再遇到同样问题按顺序执行# ① 确认 C 盘状态Get-PSDrive-Name C# ② 查看 WSL 发行版wsl-l-v# ③ 定位 VHDX 文件Get-ChildItem$env:LOCALAPPDATA\Packages-Recurse-Filterext4.vhdx# ④ 查看 Linux 内部占用wsl-d Ubuntu-u root--sh-lcdf -h /; echo ---; du -sh /var/lib/docker 2/dev/null# ⑤ 清理 Docker不删 volumewsl-d Ubuntu-u root--sh-lcdocker system prune -af# ⑥ 清理系统缓存wsl-d Ubuntu-u root--sh-lcapt-get clean rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*# ⑦ fstrimwsl-d Ubuntu-u root--sh-lcfstrim -av# ⑧ 关闭 WSLwsl--shutdown# ⑨ 压缩 VHDX管理员 PowerShellOptimize-VHD-Path你的ext4.vhdx路径-Mode Full# ⑩ 验证Get-PSDrive-Name C日常维护建议定期检查 Docker 占用docker system df养成习惯别等爆了才清理清理时不要无脑--volumesvolume 里可能有数据库数据误删无法恢复删大文件后记得压缩 VHDXLinux 内部释放空间 ≠ Windows 释放空间必须走 fstrim Optimize-VHD考虑迁移 VHDX 到其他盘如果 D 盘空间充裕可以用wsl --exportwsl --import把整个发行版搬走从根本上解决 C 盘压力一句话总结WSL2 Docker 吃 C 盘的本质Docker 缓存在 Linux 里无限增长而 VHDX 虚拟磁盘只膨胀不收缩。清理数据只是第一步压缩 VHDX 才是真正释放空间的关键。
http://www.gsyq.cn/news/1400406.html

相关文章:

  • AI框架选型新指标:用行为承诺度量化项目健康度
  • UniApp 快速集成个推推送(UniPush2.0)完整实战教程
  • 谁在定义AI硬件的2026?
  • 告别命令行!ESP32-S3安全三件套(Flash加密+Secure Boot V2+NVS加密)的图形化工具配置避坑指南
  • 【Linux】Ext 系列文件系统
  • MTKClient 从入门到精通:联发科设备刷机与逆向工程完全指南
  • 新手避坑指南:在RHEL 6.10上安装Cadence IC618和Verdi 2018.09的完整流程(含依赖库检查)
  • 顺序统计量不等式:Bootstrap与保形预测的理论基石
  • 基于STCO框架构建类型安全提示工程,降低LLM幻觉率30%
  • 基于Whisper、Groq与Streamlit构建本地语音AI助手:从原理到实践
  • UVa 295 Fatman
  • 开发者如何克服完美主义陷阱,构建内在交付体系实现项目上线
  • 2026年5月北京十大装修公司排行榜推荐:十大专业公司评测夜间施工防噪音 - 品牌推荐
  • 为AI编码助手集成运行时日志:从日志采集到智能诊断的工程实践
  • 2026年Python学习指南:从零基础到实战项目,掌握核心语法与工具
  • 苏州可靠的宠物店怎么选 关键因素解析 - 品牌排行榜
  • Tomato-Novel-Downloader:三步构建你的个人小说图书馆
  • 深度解析:3步实现Wallpaper Engine资源逆向工程与高效提取
  • Linux系统重启后,Kubernetes集群核心服务kube-apiserver启动失败的排查与修复
  • 2026年4月国内比较好的AI无损测糖选果机品牌推荐,小柿子选果机/冬枣选果机,AI无损测糖选果机制造商哪家权威 - 品牌推荐师
  • EFM32开发板SWD通信故障排查与优化
  • Python循环不会写?for和while实战技巧大公开
  • 海外支付难的不是接渠道,而是让每一笔钱对得上
  • 告别命令行!用VSCode+PyQt5+QtDesigner,10分钟搞定你的第一个Python桌面应用
  • 突破《原神》60帧限制:安全高效的帧率解锁方案
  • LeetCode 10:正则表达式匹配 | 动态规划
  • Unity游戏配置表管理新思路:不写编辑器扩展,用ExcelDataReader+ScriptableObject实现数据热更新
  • RC振荡器和LC振荡器,是包含在单片机内部,还是作为单独的元件?
  • 从1600次周下载看开源工具包设计:聚焦高频开发痛点
  • CentOS 7 安装 Docker 与 MySQL 、Redis完整指南