在使用 WSL(Windows Subsystem for Linux)一段时间后,你可能会发现系统上的 VHDX 文件越来越大。即使删除了 WSL 中的文件,虚拟磁盘文件的大小也不会自动减小。本文将介绍如何通过几个简单的步骤,有效压缩 WSL 的 VHDX 文件,释放宝贵的磁盘空间。

在 Windows 上使用 WSL(Windows Subsystem for Linux),可能会发现,即使删除了很多文件,ext4.vhdx 文件的大小依然很大。这是因为删除文件只会释放空间,但虚拟磁盘文件(VHDX 文件)不会自动压缩。 可以通过手动压缩 WSL 的 VHDX 文件,释放磁盘空间。

步骤 1:清理 WSL 系统中的无用文件

在开始压缩前,首先清理 WSL 中的垃圾文件。打开 WSL 终端,输入以下命令:

1
2
sudo apt autoremove
sudo apt clean
  • sudo apt autoremove 会删除不再需要的包。

  • sudo apt clean 会清理包缓存,释放空间。

步骤 2:创建并删除一个填充零的文件

为了帮助系统回收空间,创建一个大文件填充 VHDX 文件中的空闲空间,然后删除它:

1
2
sudo dd if=/dev/zero of=/zero.fill bs=1M
sudo rm /zero.fill
  • dd if=/dev/zero of=/zero.fill bs=1M 创建一个大小为 1MB 的文件并填充零。

  • rm /zero.fill 删除该文件,释放已标记为未使用的空间。

步骤 3:关闭所有 WSL 实例

关闭所有正在运行的 WSL 实例,以便对 VHDX 文件进行操作:

1
wsl --shutdown

这条命令会停止所有 WSL 实例,确保文件可以安全压缩。

步骤 4:压缩 VHDX 文件

为了回收 VHDX 文件中的空闲空间,我们使用 Optimize-VHD 命令来压缩文件。打开 PowerShell(管理员权限) ,并执行以下命令:

1
Optimize-VHD -Path "C:\path\to\your\wsl\ext4.vhdx" -Mode Full
  • -Path 后面的路径是你的 VHDX 文件位置。通常,WSL 的虚拟磁盘文件位于:

    • C:\Users\<YourUsername>\AppData\Local\Packages\<LinuxDistribution>\LocalState\ext4.vhdx
  • -Mode Full 指定完全压缩,回收所有空闲空间。

步骤 5:验证压缩效果

压缩完成后,你可以查看 VHDX 文件的大小,确认是否释放了磁盘空间。

其他方法:导出和重新导入 WSL 发行版

如果你无法使用 Optimize-VHD 命令,或想通过其他方法来压缩 VHDX 文件,可以选择导出并重新导入 WSL 发行版:

  1. 导出 WSL 发行版
1
wsl --export <DistroName> C:\path\to\backup\backup.tar

这将你的 WSL 发行版导出为一个 tar 文件。 <DistroName> 替换为你的发行版名称,例如 Ubuntu-22.04

  1. 注销并卸载当前 WSL 发行版
1
wsl --unregister <DistroName>

这会注销并卸载当前的 WSL 发行版。

  1. 重新导入 WSL 发行版
1
wsl --import <DistroName> C:\path\to\new\wsl C:\path\to\backup\backup.tar

这将从备份文件重新导入 WSL 发行版,并创建一个新的 VHDX 文件。