WSL 回收未使用的磁盘空间
WSL 是 Windows 上非常方便的 Linux 虚拟机工具,虚拟机使用的虚拟磁盘是 C 盘上的一个虚拟磁盘文件(VHDX)。虚拟磁盘文件的大小会随着 Linux 虚拟机对虚拟磁盘的用量增加而逐渐增大。然而,这个文件的大小不会根据 Linux 虚拟机对磁盘用量的减少而变小。也就是说,随着你使用 Linux 虚拟机,这个虚拟磁盘文件会变得越来越大,且永远不会变小。最后可能导致 C 盘的空间都被虚拟磁盘文件占满。
Microsoft 并没有提供缩小虚拟磁盘文件的方法,不过我们可以通过 DiskPart 工具手动调整。
-
首先找到 Linux 虚拟机的虚拟磁盘文件的位置。进入 UWP 应用数据目录,找到你的 WSL 实例的包目录:
Set-Location -Path "$env:LOCALAPPDATA\Packages"
WSL 实例的包目录以
发布者名称.应用名称_包标识符
的方式命名。我们使用下面的命令查找名称含有Ubuntu
的目录:Get-ChildItem -Directory | Where-Object { $_.Name -like "*Ubuntu*" } Directory: C:\Users\USERNAME\AppData\Local\Packages Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2024/10/18 10:23 CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc
这里我们的 Ubuntu 包目录为
CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc
,其子目录LocalState
下存放着虚拟磁盘文件ext4.vhdx
。复制虚拟磁盘文件的路径,我这里是:C:\Users\USERNAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
-
使用 DiskPart 磁盘工具压缩磁盘大小。首先打开 DiskPark 交互模式:
diskpart
接下来选中我们的虚拟磁盘文件:
DISKPART> select vdisk file="C:\Users\USERNAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
接下来缩小磁盘文件到实际使用大小:
DISKPART> compact vdisk
等待命令运行完成后刷新磁盘大小,此时就可以发现之前被 WSL 虚拟机占用的空间都回来了。