WSL磁盘关键问题:释放30G,Windows C/F盘空间不涨
WSL磁盘关键问题:释放30G,Windows C/F盘空间不涨
你看到Total reclaimed space:30.28GB,只是WSL内部文件系统标记释放空间,WSL虚拟磁盘文件不会自动缩小。
WSL2磁盘是一个ext4.vhdx虚拟磁盘文件,存放在Windows的C盘。
- Linux里面删除文件,只会把内部空间标记空闲;vhdx文件本身大小不会自动收缩。
- 所以WSL内部看:已使用从105G→76G,空闲变多;但Windows文件看,这个vhdx文件体积没有变小,Windows磁盘可用空间不会增加。
看你截图:
/dev/sdc 1007G 76G 880G 8% /WSL内部已经回收了30G空闲,但是Windows上这个 ext4.vhdx 文件还是当初膨胀后的大小,不会自动缩回去。
你的WSL文件到底存在哪里
WSL2发行版虚拟磁盘默认路径(存C盘!不是F盘)
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx✅WSL的磁盘占用全部落在C盘,不在F盘,所以F盘完全不会变化。
F盘那行/mnt/f只是挂载读取WindowsF盘,WSL系统本身不在F。
操作:手动压缩vhdx,把30G还给Windows C盘
⚠️重要:操作前完全关闭WSL,做好备份!
步骤1:彻底关闭WSL(powershell管理员执行)
wsl --shutdown
#确认全部停止
wsl --list --running必须没有运行中的WSL实例,否则压缩报错。
步骤2:找到你的vhdx路径
打开资源管理器,进入C:\Users\<你的Windows用户名>\AppData\Local\Packages\
找到类似:CanonicalGroupLimited.Ubuntu22.04LTS_xxxx\LocalState\ext4.vhdx
复制完整路径。
步骤3:用diskpart压缩虚拟磁盘
以管理员打开PowerShell,执行下面,把路径替换成你真实的vhdx完整路径:
diskpart进入diskpart交互控制台,依次输入:
select vdisk file="C:\Users\xxx\AppData\Local\Packages\...\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit执行完成后,看Windows下这个ext4.vhdx文件大小,就会减少约30G,C盘空闲空间就回来了。
常见坑
- wsl没有完全shutdown就压缩 → 报错、损坏虚拟盘,一定要确认wsl没有运行。
- 不要把WSL迁移到F盘之后忘记,如果你曾经迁移过,vhdx就在F盘,就压缩F盘上那个vhdx。你当前df输出
/dev/sdc是默认位置,在C盘。 - docker prune只是在Linux内部删除文件,不会自动收缩vhdx,这是WSL2的机制,所有WSL用户都会遇到。
简单总结
- docker清理30G → WSL内部可用空间变大,但Windows主机不会释放,vhdx文件体积不变。
- WSL系统盘默认放在C盘,和F盘无关,F盘当然没变化。
- 需要执行
diskpart compact vdisk手动压缩虚拟磁盘,Windows C盘才能拿到这30G空闲。
补充小命令
压缩完启动wsl后,进wsl执行df -h,WSL内部看到的可用空间不变,只是Windows侧vhdx物理文件缩小。
版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1514.html
转载时须注明出处及本声明