wsl2磁盘空间不释放的主因是ext4.vhdx虚拟磁盘只增不缩,需分四步排查:先定位vhdx文件大小,再检查linux内部使用率,排除docker、休眠文件等共犯,最后执行linux内部清理+windows侧diskpart压缩。
wsl2 占用磁盘空间不释放,最常见原因是 ext4.vhdx 虚拟磁盘只增不缩。它不会自动回收 linux 内已删除但未清零的空闲块,导致 windows 看到的文件体积持续膨胀。排查必须分两层:先确认是不是它真占了大头,再判断是内部垃圾没清、还是虚拟硬盘没压缩、或是其他隐藏因素在“背锅”。
第一步:快速定位 ext4.vhdx 实际大小
别猜,直接查。在 PowerShell(普通权限即可)里运行:
Get-ChildItem "$env:LOCALAPPDATA\Packages" -Recurse -Filter "ext4.vhdx" | Select-Object FullName, @{Name="SizeGB";Expression={[math]::Round($_.Length/1GB,2)}} | Sort-Object SizeGB -Descending输出会列出所有 WSL2 发行版的 .vhdx 文件及其 GB 级大小。如果看到某个文件超过 5GB 甚至十几 GB,而你又没存大量数据,那基本就是它的问题。如果结果为空,说明问题不在 WSL2,可跳过后续步骤。
第二步:检查 WSL2 内部真实使用率
即使 .vhdx 文件很大,Linux 系统内可能实际只用了很小一部分。进对应发行版终端,运行:
wsl -d Ubuntu # 替换为你自己的发行版名 df -h /
重点看 Use% 这一列。如果显示 95% 以上,说明 Linux 系统内部确实快满了,需要清理;如果才 30%,但 .vhdx 却有 10GB,那就说明空间没被回收,必须走压缩流程。
第三步:排除“假象占用”——不是 WSL2,而是其他共犯
C 盘爆满,WSL2 常被误认为主因,其实它常和以下几类问题“组团作案”:
-
Docker Desktop 的 WSL2 后端数据盘:Docker 默认把镜像、容器全存在 WSL2 的默认发行版里,一个大型镜像就占好几 GB,且单独清理需额外命令(
docker system prune -a) -
Windows 休眠文件 hiberfil.sys:尤其在开启快速启动时,它常占 C 盘 3–8GB,可用
powercfg /h off关闭(重启后生效) -
系统更新缓存和临时文件:Win + R 输入
%windir%\SoftwareDistribution\Download,清空该文件夹可释放数 GB - WSL2 自动备份或快照残留:某些第三方工具或手动导出操作可能留下未清理的 tar 包或备份目录
第四步:针对性清理与压缩(确认是 WSL2 后必做)
只有两步都做完,空间才能真正回来:
-
先清 Linux 内部:在 WSL2 终端执行
sudo apt clean && sudo apt autoremove && sudo journalctl --vacuum-size=50M,再清空/tmp和日志;Docker 用户加跑docker system prune -a -
再压 Windows 虚拟盘:PowerShell 以管理员身份运行,依次执行
wsl --shutdown→diskpart→select vdisk file="完整路径\ext4.vhdx"→attach vdisk readonly→compact vdisk→detach vdisk→exit











