所以这就是问题所在:我在 Windows 10 上的 WSL2 上使用 Ubuntu 20.04,我注意到在 Ubuntu 上删除文件后,我没有收回被删除文件占用的空间。例如:在我删除 Ubuntu 上的文件之前,它在 Windows 资源管理器上显示我在 (C:) 驱动器上的可用空间约为 46GB。然后在我删除了大约 10GB 的文件之后,在我的情况下是一些临时的 Gatsby 站点,它导致可用空间更少,大约 45GB。我觉得这很奇怪。
所以我想我的问题是:我怎样才能找回那些未使用的位?是否有一些我可以使用的终端命令,或者我可以通过 Windows gui 或其他东西做某事。
PS我之前的问题因缺乏细节而被关闭。我希望这一次就足够了。另外,请不要在没有对原因发表评论的情况下对此投反对票,但至少给我一些关于原因的信息。
有一个关于这个主题的 WSL Github issue open。WSL 将自动增长虚拟磁盘 (ext4.vhdx),但缩小它以回收未使用的空间是目前必须手动完成的事情。
您需要做的第一件事是知道 ext4.vhdx 的位置。对于默认的 Ubuntu 安装,它应该类似于
%PROFILE%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\
然后,您可以使用几种技术来删除未使用的空间。我建议您从 a 开始
wsl --shutdown
并复制 vhdx 作为备份开始。如果您正在运行 Docker Desktop,请将其关闭,否则它可能会在您的--shutdown
.如果您使用的是 Windows Professional 或更高版本,则可以安装 Hyper-V 并使用 Optimize-VHD commandlet,如原始问题中所述。.
在 Windows Home(及更高版本)上,您可以
diskpart
按照此评论中的说明使用。导出 WSL 发行版并将其重新导入新的 WSL 实例(如本注释中所示)也将回收空间。请注意,您需要在导入后重置默认用户名。见这里。
我亲自测试并确认了第二种和第三种技术。
wsl.exe --shutdown
cd C:\Users\<user>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\
optimize-vhd -Path .\ext4.vhdx -Mode full
当命令 let
optimize-vhd
在您的系统中不可用时,请执行以下操作:使用这个自我提升脚本,您可以一次压缩多个 vhdx。
顺便说一句,您也可以在启动时运行它(“登录时启动 Docker”应该被禁用)