解决 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 文件路径。