Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 339

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 392

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 394
WSL磁盘关键问题:释放30G,Windows C/F盘空间不涨 - Joyber 的博客

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盘空闲空间就回来了。

常见坑

  1. wsl没有完全shutdown就压缩 → 报错、损坏虚拟盘,一定要确认wsl没有运行。
  2. 不要把WSL迁移到F盘之后忘记,如果你曾经迁移过,vhdx就在F盘,就压缩F盘上那个vhdx。你当前df输出/dev/sdc是默认位置,在C盘。
  3. docker prune只是在Linux内部删除文件,不会自动收缩vhdx,这是WSL2的机制,所有WSL用户都会遇到

简单总结

  1. docker清理30G → WSL内部可用空间变大,但Windows主机不会释放,vhdx文件体积不变
  2. WSL系统盘默认放在C盘,和F盘无关,F盘当然没变化。
  3. 需要执行diskpart compact vdisk手动压缩虚拟磁盘,Windows C盘才能拿到这30G空闲。

补充小命令

压缩完启动wsl后,进wsl执行df -h,WSL内部看到的可用空间不变,只是Windows侧vhdx物理文件缩小。

标签: none

添加新评论