Administrator
Published on 2026-03-07 / 5 Visits
0

WSL2 ext4.vhdx 文件瘦身方法

#AI

WSL2 的 ext4.vhdx 是动态扩展虚拟磁盘,删除文件不会自动缩小,必须手动清理+压缩才能释放空间。下面给你最稳妥、最常用的完整流程。


一、先在 Ubuntu 内部清理(瘦身基础)

先在 WSL 里删掉不用的文件,让系统标记空间为“空闲”,后面才能被 Windows 压缩工具回收。

1. 清理系统垃圾(Ubuntu 终端执行)

# 清理 APT 缓存
sudo apt clean
sudo apt autoremove -y

# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# 清理日志(可选,谨慎)
sudo journalctl --vacuum-size=100M

# 如果你用 Docker(非常占空间)
docker system prune -a --volumes -f

2. 关键:填零(让压缩更彻底)

这一步把空闲空间全部写 0,Windows 才能识别并彻底回收。

# 创建一个填满所有空闲空间的 0 文件(会提示空间不足,正常)
sudo dd if=/dev/zero of=/zero.fill bs=1M status=progress

# 删除这个文件,此时空闲区已被“标记为可压缩”
sudo rm -f /zero.fill

二、关闭 WSL(必须)

在 Windows 管理员 PowerShell 执行:

# 彻底关闭所有 WSL 实例
wsl --shutdown

# 确认已关闭(STATE 应为 Stopped)
wsl --list --verbose

提示:如果开了 Docker Desktop,先退出它。


三、压缩 ext4.vhdx(两种方法,任选其一)

方法 A:PowerShell Optimize-VHD(推荐,最简单)

# 替换成你的路径
$vhdxPath = "C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"

# 执行压缩(Full 模式最彻底)
Optimize-VHD -Path $vhdxPath -Mode Full

若提示 Optimize-VHD 不存在,先启用 Hyper-V:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

方法 B:diskpart(兼容性更好)

diskpart

在弹出的 diskpart 窗口依次执行:

select vdisk file="C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

四、验证效果

# 查看压缩后大小(GB)
Get-Item "C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" | Select-Object Length, @{Name="SizeGB";Expression={[math]::Round($_.Length/1GB, 2)}}

五、进阶:彻底瘦身(导出/导入)

如果上面压缩后还是很大,可以用 wsl --export 重建镜像(最彻底):

# 1. 导出备份(安全)
wsl --export Ubuntu D:\Ubuntu_backup.tar

# 2. 注销当前实例(会删除原 vhdx!先确认备份)
wsl --unregister Ubuntu

# 3. 重新导入(路径可自定义,比如 D:\WSL\Ubuntu)
wsl --import Ubuntu D:\WSL\Ubuntu D:\Ubuntu_backup.tar --version 2

# 4. 恢复默认用户(Ubuntu)
ubuntu config --default-user dzplo

六、常见问题

  • 压缩后没变小:多半是 WSL 没彻底关闭,或没做“填零”步骤。
  • 文件被占用:关闭所有 WSL 终端、VSCode、Docker 等,再重试 wsl --shutdown
  • 路径不对:用 wsl --list --verbose 确认发行版名称,再核对路径。

需要我帮你把上面的步骤整合成一个一键执行的 PowerShell 脚本,你直接复制运行就能完成清理+压缩吗?