如何从 wsl2 上的 ubuntu 取回未使用的磁盘空间?

Tim*_*thy 10 disk-space windows-10 windows-subsystem-for-linux ubuntu-20.04

所以问题来了:我在 Windows 10 上的 WSL2 上使用 Ubuntu 20.04,我注意到在 Ubuntu 上删除文件后,我没有取回被删除文件占用的空间。例如:在我删除 Ubuntu 上的文件之前,它在 Windows 资源管理器上显示我的 (C:) 驱动器上的可用空间约为 46GB。然后在我删除了大约 10GB 的文件后,在我的情况下,一些临时 Gatsby 站点,它导致更少的可用空间,大约 45GB。我觉得这很奇怪。

所以我想我的问题是:我怎样才能取回那些未使用的位?是否有一些我可以使用的终端命令,或者我可以通过 windows gui 或其他方式执行某些操作。

PS 我之前的问题因缺乏细节而被关闭。我希望这一次就足够了。另外,请不要在没有对原因发表评论的情况下贬低这一点,但至少给我一些关于原因的信息。

Mas*_*sih 35

    \n
  • 在 Windows 功能中激活 Hyper-V 模块(控制面板 -> 打开或关闭 Windows 功能 -> 激活 Hyper-V -> 重新启动)。这是激活 Optimize-vhd 命令所必需的。
  • \n
  • 以管理员身份打开 Windows powershell:\n首先按 Windows+R 打开“运行”,然后在文本框中键入 \xe2\x80\x9cpowershell\xe2\x80\x9d。接下来,按 Ctrl+Shift+Enter。Windows PowerShell 将以管理模式打开。在 powershell 中,运行以下命令。
  • \n
  • wsl.exe --shutdown
  • \n
  • cd 进入 ext4.vhdx 文件夹,通常是cd C:\\Users\\<user>\\AppData\\Local\\Packages\\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\\LocalState\\
  • \n
  • optimize-vhd -Path .\\ext4.vhdx -Mode full(确保ext4.vhdx没有被鼠标点击,否则会导致powershell中的文件正在被其他进程使用的错误)
  • \n
\n

  • 要从 PowerShell 激活 Hyper-V:`Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All` (4认同)

Gui*_*usa 34

当命令 letoptimize-vhd在您的系统中不可用时,请执行以下操作:

在管理其磁盘之前关闭 wsl

wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

将以下脚本保存为compact-disk.txt

select vdisk file="C:\Users\%username%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
Run Code Online (Sandbox Code Playgroud)

以管理员身份打开提示符并运行上面保存的脚本

diskpart /s <SAVED_SCRIPT_FOLDER_PATH>\compact-disk.txt
Run Code Online (Sandbox Code Playgroud)


Not*_*1ds 12

有一个关于这个主题的 WSL Github问题。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 实例(如本评论中所示)也将回收空间。请注意,您需要在导入后重置默认用户名。见这里

我已经亲自测试并确认了第二种和第三种技术。

  • 我接受你的回答,因为我已经使用第一种方法成功地用 2GB 清除了我的发行版,没有任何问题。对于阅读本文的其他人来说,我首先在 Windows 功能中启用了 Hyper-V,因为我有 Windows 10 专业版。然后在启用 hyper-v 需要重新启动后,我在 powershell 中执行了 `wsl --shutdown`。因为我启用了 Hyper-V,所以我可以运行 `Optimize-VHD -Path C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx -Mode Full` (3认同)
  • 我对稀疏选项没有太多运气,它似乎仍然占用相同的空间。Windows 从稀疏磁盘映像中回收空间的频率/速度是多少? (3认同)
  • 在使用 ubuntu diskpart 后,我​​的 vhdx 从 5.15 GB 变为 5.12 GB。然后,导出/导入大小从 5.12 GB 增加到 4.27 GB。所以我认为导出/导入在回收​​空间方面更有效。 (2认同)

Osc*_*car 7

您可以使用wslcompact实用程序。

它不需要提升提示并确保最小大小,比df /WSL 发行版内报告的大小大约多 2%。它比 DISKPART 或 Optimize-Vhd 命令更紧凑。