解决 WSL2 删除文件后磁盘空间不释放的问题

Windows Subsystem for Linux 2(WSL2)是一个强大的工具,允许用户在 Windows 上运行 Linux 发行版。然而,WSL2 使用虚拟硬盘(VHD)来存储文件系统,这导致了一个常见问题:删除文件后,磁盘空间不会自动释放回主机系统。本文将详细介绍如何解决这一问题,并释放未使用的磁盘空间。

问题描述

在 WSL2 中,删除文件后,磁盘空间可能不会立即释放回主机系统。这是因为 WSL2 使用虚拟硬盘(VHD)来存储文件系统,而 VHD 文件的大小不会自动缩小。要释放空间,你需要手动压缩 VHD 文件。

解决方案

1.在 WSL2 中清理空间

首先,确保你已经删除了不需要的文件,并清理了包管理器缓存等。

# 清理 apt 缓存(适用于 Ubuntu/Debian)
sudo apt clean

# 删除不需要的包
sudo apt autoremove

2. 关闭 WSL2 实例

在 Windows 命令提示符或 PowerShell 中关闭 WSL2 实例:

wsl --shutdown

3. 压缩 VHD 文件

打开 PowerShell 并运行以下命令来压缩 WSL2 的 VHD 文件:

diskpart

diskpart 提示符下,执行以下命令:

select vdisk file="C:\Users\<YourUsername>\AppData\Local\Packages\<DistroPackage>\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

请将 <YourUsername> 替换为你的 Windows 用户名,<DistroPackage> 替换为你的 WSL2 发行版的包名(例如 CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc)。

4. 重新启动 WSL2

重新启动 WSL2 实例:

wsl

5. 检查空间

你可以使用 df -h 命令在 WSL2 中检查磁盘空间,确保空间已释放。

注意事项

  • • 如果你有多个 WSL2 发行版,每个发行版都有自己的 VHD 文件,你需要为每个发行版重复上述步骤。

  • • 如果你不确定 VHD 文件的位置,可以在 PowerShell 中使用以下命令查找:

wsl --list --verbose

然后根据发行版名称找到对应的 VHD 文件路径。