解决删除文件后 WSL2 磁盘空间不释放的问题

在WSL中安装了许多软件,当不需要使用的时候,删除想释放空间,发现即使删除了软件,c盘空间并没有得到释放。

1 分析原因

不同于 WSL1WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。

这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。

一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。

所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

2 如何操作

2.1 找到并确定要压缩的虚拟磁盘文件

首先,获取 Linux 分发版的 .vhdx 文件和目录路径,请打开 PowerShell 并使用以下脚本,并将 <distribution-name> 替换为实际分发名称。

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

2.3 压缩虚拟磁盘文件

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart

在新打开的 DiskPart 命令窗口中执行:

将<path>替换为刚刚获取的.vhdx文件路径

# 选择虚拟磁盘文件
select vdisk file="<path>\ext4.vhdx"
# 压缩文件
compact vdisk

大功告成,查看C盘容量,已经释放