WSL(尤其是 WSL2)磁盘占用不断增大的原因,通常不是 Linux 文件本身,而是 ext4.vhdx 虚拟磁盘不会自动缩容。即使在 Ubuntu 中删除了大量文件,Windows 上的 ext4.vhdx 仍会保持原有大小。
本文提供一套完整、安全的清理流程。
目录
1. 清理 Linux 内部垃圾
1.1. 清理 APT 缓存
# 查看 APT 本地缓存的软件包(.deb)占用的磁盘空间
cd ~/ && sudo du -sh /var/cache/apt
sudo apt clean
sudo apt autoremove -y
1.2. 清理日志
# 查看日志占用
sudo du -sh /var/log
# 清理 7 天前的旧日志
sudo journalctl --vacuum-time=7d
1.3. 清理 pip 缓存
# 查看缓存占用
du -sh ~/.cache
pip cache info
# 使用 pip 自带的清理命令(推荐)
pip cache purge
# 或手动删除缓存目录
rm -rf ~/.cache/pip
pip cache purge 的效果:
- 删除所有 pip 缓存(HTTP 缓存与 wheel 缓存)
- 不会影响已安装的包
- 不会影响 conda 或 venv 环境
- 下次执行
pip install时会重新下载索引页,速度稍慢,但属于正常现象
1.4. 清理 Conda 缓存
conda clean -a
conda clean -a 是 Conda 官方提供的清理命令,用于删除各种可以重新下载或重新生成的缓存,从而释放磁盘空间。
2. 压缩 ext4.vhdx 虚拟磁盘
仅删除 Linux 内的文件不会让
ext4.vhdx变小,必须在 Windows 侧执行离线压缩。
2.1. 确认发行版名称
压缩命令中的发行版名称(如 Ubuntu、Ubuntu-22.04)因安装情况而异,先在 PowerShell 中确认实际名称:
wsl -l -v
输出中 NAME 一列即为压缩命令需要使用的名称。
2.2. 使用 wsl --manage --compact(推荐)
# 关闭所有 WSL 实例
wsl --shutdown
# 压缩指定发行版的虚拟磁盘(发行版名称以 wsl -l -v 输出为准)
wsl --manage Ubuntu-22.04 --compact
这是微软推荐的方法,会自动完成压缩。
2.3. 使用 diskpart 手动压缩
在管理员 PowerShell 中执行:
# 关闭 WSL
wsl --shutdown
# 查找 ext4.vhdx 的实际路径
Get-ChildItem "$env:LOCALAPPDATA\Packages" -Recurse -Filter ext4.vhdx
# 进入 diskpart
diskpart
随后在 diskpart 交互环境中执行:
# 将路径替换为上一步 Get-ChildItem 查询得到的实际路径
select vdisk file="C:\Users\...\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
这是微软长期支持的手动压缩方法,适用于不支持 --compact 参数的旧版本 WSL。
3. 开启 sparse 模式自动回收空间
较新版本的 WSL 支持将虚拟磁盘设为稀疏(sparse)模式,使 vhdx 文件在 Linux 侧删除文件后自动向 Windows 归还空间,无需手动压缩:
wsl --shutdown
# 对指定发行版开启稀疏模式
wsl --manage Ubuntu-22.04 --set-sparse true
开启后 ext4.vhdx 会随实际使用量动态增长和缩减,适合希望免除定期手动压缩的用户。
该功能需要较新的 WSL 版本支持,可通过
wsl --version确认,必要时执行wsl --update升级。
4. 推荐定期执行的命令
Linux 侧(WSL 内):
sudo apt clean
sudo apt autoremove -y
sudo journalctl --vacuum-time=7d
pip cache purge
Windows 侧(PowerShell):
wsl --shutdown
wsl --manage Ubuntu-22.04 --compact
1182



被折叠的 条评论
为什么被折叠?



