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层面看到的文件大小也不会自动减小,需要手动压缩虚拟磁盘才能释放空间。

  1. 以管理员身份打开PowerShell或CMD,执行 wsl --shutdown 关闭,执行后使用 wsl --list --verbose确认所有发行版状态为"Stopped"。
  2. 找到ext4.vhdx文件路径,默认路径:C:\Users\[用户名]\AppData\Local\Packages\[发行版包名]\LocalState\ext4.vhdx,或者通过 Everything 等工具查找。
  3. 压缩磁盘:
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)和精简配置存储设备。它通过通知存储设备哪些块不再包含有效数据,从而提高读写效率并延长设备寿命。

最后一张图

释放 inode / block

df -h 统计

尚未通知底层

sudo fstrim

仅标记
不改变文件大小

wsl --shutdown

compact vdisk

du/ncdu 查看大文件

rm 删除文件

ext4 文件系统
块变为空闲

df 显示 Used 下降

WSL 虚拟块设备
/dev/sdc

发送 TRIM / DISCARD
标记空闲块

ext4.vhdx
仍保持原体积

关闭 WSL
释放文件锁

Windows 回收空块
ext4.vhdx 变小

参考文档

  • https://learn.microsoft.com/zh-cn/windows/wsl/disk-space
  • https://github.com/microsoft/WSL/issues/12223
  • 感谢 ChatGPT 提供的帮助
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐