WSL vhdx文件压缩/清理
WSL在使用了一段时间之后,占用空间会越来越大,可以使用以下方法清理

操作步骤(手把手)
步骤 1:提前标记空闲空间
先在WSL2中执行 sudo fstrim -v /
如果不执行,压缩效果可能会很差(甚至没效果)。
步骤 2:确认 WSL 磁盘文件的真实路径
以管理员身份打开 PowerShell,执行以下命令,找到你要瘦身的 WSL 发行版对应的 VHDX Path:
powershell
# 列出所有 WSL 发行版及磁盘路径
wsl --list --verbose --all
# 或更精准的命令(PowerShell 7+)
Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object {
$distro = Get-ItemProperty $_.PSPath
[PSCustomObject]@{
DistroName = $distro.DistributionName
VHDXPath = $distro.BasePath + "\ext4.vhdx"
}
}

得到路径:C:\WSL\ext4.vhdx
步骤 3: 强力终结所有可能占用的进程
在 PowerShell (管理员) 里依次运行以下命令,不要漏:
powershell
# 1. 再次确保 WSL 完全关闭
wsl --shutdown
还有以下命令,强制杀掉所有 WSL 相关进程(包括后台宿主),一般第1个就够了
taskkill /F /IM wsl.exe
taskkill /F /IM wslhost.exe
taskkill /F /IM LxssManagerUser.exe
taskkill /F /IM LxssManager.exe
步骤 4:执行 DiskPart(手动输入路径)
管理员 PowerShell 中输入 diskpart 回车;
在 DiskPart 窗口中,手动输入(不要复制)以下命令(替换为你刚查到的真实路径):
plaintext
# 示例(替换成你的真实路径)
select vdisk file="C:\WSL\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
注意:路径中有空格没关系,只要用英文双引号包裹即可。

步骤 5:验证是否成功
执行 compact vdisk 后,会输出类似 已成功压缩虚拟磁盘。,说明瘦身完成;
若仍提示错误,检查:
路径是否真的存在(文件资源管理器打开验证);
WSL 是否已完全关闭(wsl --shutdown 执行后再操作);
是否以管理员身份运行 PowerShell/DiskPart。
OK,到此结束
还有另外一个命令:可以在PowerShell下运行::
Optimize-VHD -Path "C:\WSL\ext4.vhdx" -Mode Full

使用前提(必须满足)
WSL 必须完全关闭:执行 wsl --shutdown 后再运行该命令,否则 VHDX 文件被占用,会提示 “文件正在使用”;
需要管理员权限:必须以 “管理员身份” 打开 PowerShell,否则权限不足;
需开启 Hyper-V 相关功能:该命令依赖 Hyper-V 模块(WSL 2 默认会安装,无需额外操作)
浙公网安备 33010602011771号