解决删除文件后 WSL2 磁盘空间不释放的问题
在WSL中安装了许多软件,当不需要使用的时候,删除想释放空间,发现即使删除了软件,c盘空间并没有得到释放。
1 分析原因
不同于 WSL1
,WSL2
本质上是虚拟机,所以 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盘容量,已经释放。