You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2的ext4虚拟磁盘(vhdx)容量显示不一致问题咨询

WSL2的ext4虚拟磁盘(vhdx)容量显示不一致问题咨询

嘿,我来帮你拆解这个问题,顺便给你几个更彻底的空间优化思路~

先说说容量差异的原因

你遇到的105GB(Windows里vhdx文件大小)和89GB(网络驱动器显示的容量)的差异,核心是动态虚拟磁盘的特性导致的:

  • Windows里看到的105GB,是这个vhdx文件当前在物理磁盘上实际占用的空间——因为WSL2用的是动态扩展磁盘,它会随着你在WSL里存文件自动变大,但你删除文件后,vhdx不会自动缩小,那些“已经标记为可用但还没被回收”的空间就留在了vhdx里,导致物理占用比WSL内部实际已用空间大。
  • 而网络驱动器里显示的89GB,应该是WSL中ext4文件系统的实际已使用空间(如果是可用空间的话,那总逻辑容量会更大),两者的差值就是vhdx里没被回收的“悬空”空间。

除了diskpart,你还可以试试这些优化方法

  1. 先把WSL内部的垃圾清干净
    压缩前先清理WSL里的冗余文件,能让后续压缩效果更好:

    • 如果是Ubuntu/Debian系发行版,运行:
      sudo apt autoremove && sudo apt clean && sudo apt autoclean
      
    • 手动删掉大文件、旧日志(比如/var/log目录下的过期日志),确保WSL里的已用空间尽可能小。
  2. 用WSL自带的压缩命令(更省心)
    现在WSL提供了官方的压缩工具,比diskpart简单:

    • 先关闭所有WSL实例,在PowerShell里运行:
      wsl --shutdown
      
    • 然后指定你的发行版进行压缩(比如Ubuntu-22.04):
      wsl --manage Ubuntu-22.04 --compact
      

    这个命令会自动扫描vhdx里的未使用空间并回收,不用手动操作diskpart。

  3. 检查并确保vhdx的稀疏属性开启
    动态vhdx必须是稀疏文件才能只占用实际需要的空间,你可以检查一下:

    • 找到vhdx文件的位置(一般在C:\Users\<你的用户名>\AppData\Local\Packages\<发行版包名>\LocalState,比如Ubuntu的包名类似CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc)。
    • 在PowerShell里进入该目录,运行:
      fsutil sparse queryflag .\ext4.vhdx
      
    • 如果显示“稀疏标志已设置”就没问题;如果没设置,用下面的命令开启:
      fsutil sparse setflag .\ext4.vhdx 1
      
  4. 零填充未使用空间再压缩(终极优化)
    如果上面的方法效果有限,可以手动把WSL里的空闲空间填充为零,让压缩工具能彻底回收:

    1. 在WSL里运行(这个过程会让vhdx临时变大,确保物理磁盘有足够剩余空间):
      sudo dd if=/dev/zero of=/tmp/zero.fill bs=1M && sudo rm /tmp/zero.fill
      
      这个命令会创建一个填满零的文件直到磁盘满,然后删除它,这样ext4里的空闲空间就全是零了。
    2. 关闭WSL(wsl --shutdown),再用wsl --manage <发行版> --compact命令压缩,这时候vhdx的物理占用会更接近WSL里的实际已用空间。

按照这些步骤操作,应该能进一步缩小vhdx的物理占用,解决容量显示不一致的问题~

备注:内容来源于stack exchange,提问作者Juri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:02:38