298 字
1 分钟
WSL2 虚拟磁盘空间压缩指南

WSL2 使用动态虚拟硬盘(VHDX),有一个问题:磁盘空间只增不减。即使删除了大量文件,VHDX 文件的实际占用也不会自动释放。

解决方案#

NOTE

以下方法仅适用于 WSL2。

方法一:设置 Sparse 磁盘#

较新版本的 WSL 支持 Sparse 模式,可自动释放未使用空间:

Terminal window
# 将 Ubuntu 替换为你的发行版名称
wsl --manage Ubuntu --set-sparse true

缺点是可能无法释放已占用的空闲空间。

方法二:使用 Diskpart 压缩(推荐)#

这是微软官方推荐的方法

压缩前务必备份重要数据!

1. 关闭 WSL#

Terminal window
wsl --shutdown

2. 找到 VHDX 文件#

Terminal window
# 列出所有 WSL 的 VHDX 文件
Get-ChildItem -Path "$env:USERPROFILE\AppData\Local\Packages\*" -Filter "ext4.vhdx" -Recurse -ErrorAction SilentlyContinue

常见路径:

  • Ubuntu: %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu*\LocalState\ext4.vhdx
  • Debian: %USERPROFILE%\AppData\Local\Packages\TheDebianProject.DebianGNULinux*\LocalState\ext4.vhdx

3. 使用 Diskpart 压缩#

以管理员身份运行:

Terminal window
diskpart

在 Diskpart 中输入:

select vdisk file="C:\Users\用户名\AppData\Local\Packages\...\LocalState\ext4.vhdx"
compact vdisk
exit
TIP

路径需使用完整绝对路径,不能用 %USERPROFILE% 变量。

等待显示 DiskPart successfully compacted the virtual disk file 即可。

预防建议#

  1. 定期清理 WSL 内部缓存:sudo apt clean && sudo apt autoremove
  2. 大型数据存放在 Windows 文件系统,通过 /mnt/c/ 访问
  3. 使用 Docker 时定期运行 docker system prune
WSL2 虚拟磁盘空间压缩指南
https://fuwari.vercel.app/posts/wsl2-compress-disk/
作者
枯園
发布于
2026-01-21
许可协议
CC BY-NC-SA 4.0