WSL 磁盘空间清理
·
C 盘最近空间占用比较大,清理了多次,还是感觉有脏东西占用空间,于是对 WSL 进行大扫除。发现还是有很多优化空间,最终将 WSL 的磁盘空间 从 40G 降低到了 18G。
操作步骤如下:
定位大目录/文件
WSL 系统内,查看根目录占用空间,然后逐层确认下哪些是没用的,一般是 cache、logs 等目录:
du -h --max-depth=1 / | sort -hr
或者直接使用 ncdu 命令行工具进行可视化分析,更方便:
# 安装
sudo apt update && sudo apt install ncdu
# 排除掉 /mnt 目录和驱动目录,对根路径进行分析
ncdu --exclude /mnt --exclude /usr/lib/wsl/drivers /
我扫出来的一些占用磁盘的目录
- uv 目录缓存过大,
uv cache clean命令清理 - 家目录缓存过大,直接删除,
~/.cache - vscode 插件缓存目录过大,直接删除,
~/.vscode-server/data/CachedExtensionVSIXs/* /var/log/journal日志文件过大
# 查看当前日志占用空间
sudo journalctl --disk-usage
# 清理早于指定时间的日志(保留最近7天)
sudo journalctl --vacuum-time=7d
# 清理后再次查看占用
sudo journalctl --disk-usage
- 其它一些软件的 cache 数据,直接删除
执行磁盘压缩
WSL2 使用 ext4.vhdx 虚拟磁盘文件存储数据,该文件会自动扩容但不会自动缩容,即使删除文件后,Windows层面看到的文件大小也不会自动减小,需要手动压缩虚拟磁盘才能释放空间。
- 以管理员身份打开PowerShell或CMD,执行
wsl --shutdown关闭,执行后使用wsl --list --verbose确认所有发行版状态为"Stopped"。 - 找到ext4.vhdx文件路径,默认路径:
C:\Users\[用户名]\AppData\Local\Packages\[发行版包名]\LocalState\ext4.vhdx,或者通过 Everything 等工具查找。 - 压缩磁盘:
diskpart
select vdisk file="你的ext4.vhdx完整路径" # 替换为实际路径
# select vdisk file="C:\Users\xdai\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
总结的一些FAQ
怎么 WSL 查看实际占用的空间?
进入到 WSL 系统内后,用 df 命令查看:
df -h /mnt/wslg/distro
/usr/lib/wsl/drivers 目录是做什么的?
这个目录是自动挂载的 Windows 的 C:\Windows\System32\DriverStore\ 路径,并不会占用 WSL 文件系统的实际空间。
怎么给 WSL 扩容/缩容?
WSL 关闭之后,使用下面命令进行操作。
# wsl --manage <distribution name> --resize <memory string>
wsl --manage Ubuntu --resize 50GB
我删除了很多文件,也执行了 vhdx 文件压缩,怎么还是跟实际占用空间不一致?
使用时间久了之后,需要对空闲块做“归零/打孔”,标记可回收空间块:
sudo fstrim -av
例如,回显信息 /: 30.9 GiB trimmed on /dev/sdc,表示 WSL 的 ext4 文件系统里有 ~31GB 的“空闲块”,执行命令后,这些块 已经被标记为可回收(TRIM),再次压缩 ext4.vhdx 即可。
[!info]
fstrim 是一个用于回收文件系统中未使用块资源的命令,主要用于固态硬盘(SSD)和精简配置存储设备。它通过通知存储设备哪些块不再包含有效数据,从而提高读写效率并延长设备寿命。
最后一张图
参考文档
- https://learn.microsoft.com/zh-cn/windows/wsl/disk-space
- https://github.com/microsoft/WSL/issues/12223
- 感谢 ChatGPT 提供的帮助
更多推荐



所有评论(0)