翻译自 How to Shrink a WSL2 Virtual Disk
我是WSL的铁粉,特别是 WSL2,它使用虚拟技术提高了 WSL 的性能和兼容性(例如 Docker )。不过,因为 WSL2 使用了虚拟磁盘,意味着它可能只有 15GB 的数据,但是虚拟磁盘占用了 100GB 的空间。如果你往 WSL2 中放了大量的数据,然后就删掉,会发现WSL2的磁盘占用没有降下来,这就是虚拟磁盘造成的。
我找了一些方法来去压缩 WSL2 的虚拟磁盘,发现了一个对我有效的方法,希望它对你来说也同样适用。
准备工作
在压缩虚拟磁盘前,需要将 WSL2 先关闭。
可以先使用命令行来检查它的状态:
wsl.exe --list --verbose
如果没有关闭(状态是 Running
),再用命令行去关闭它:
wsl.exe --terminate
虽然这个方法对我来说有效,但你的环境可能跟我不同,这样做可能会导致你的数据发生损坏,建议你先备份一下WSL2的数据。
使用 diskpart
来压缩WSL2的虚拟磁盘
我发现可以使用 diskpart
工具来压缩WSL2的虚拟磁盘,它会根据WSL2中数据的大小来重新申请磁盘空间。
在命令行启动 diskpart
工具:
diskpart
它会自己打开一个新的窗口。
接下来需要确定虚拟磁盘文件的位置。
WSL2的虚拟磁盘文件在C:\Users\{user}\AppData\Local\Packages\
下面,不同的WSL2发行版对应的名称不同,例如 Pengwin 是 WhitewaterFoundryLtd.Co
,Ubuntu 是 CanonicalGroupLimited
,Debian 是
TheDebianProject
。找到了你的 WSL2 的文件夹,就能在它下面找到 LocalState\ext4.vhdx
这个磁盘文件。
例如,我的磁盘文件是 C:\Users\ontheroad\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
。
用 diskpart
选择这个文件:
select vdisk file="{vhdx文件名}"
再执行压缩命令:
compact vdisk
压缩过程需要几分钟。
压缩完成后可以关掉 diskpart
窗口,整个过程也完成了。可以再看看文件管理器中的磁盘使用,应该减少了很多。