为什么 WSL 占用的磁盘空间比它所说的要多?

为什么 WSL 占用的磁盘空间比它所说的要多?

我的磁盘已满,因此我检查了占用了所有空间的内容,设置显示我的 WSL 的 Ubuntu 发行版占用了 120GB,如下所示:

在此处输入图片描述

然后我sudo ncdu / --exclude /mnt在 WSL 中运行,它说它只占用了 53.8GiB(57.8GB)的磁盘空间。

有人知道是什么原因造成磁盘使用率出现这种差异吗?

答案1

WSL2 的工作原理类似于虚拟机;客户操作系统不会直接将单个文件存储在主机文件系统中——它有一个专用的虚拟“磁盘”,该磁盘存储在.vhdxWindows 所见的单个大文件中。

随着客户操作系统将数据写入新的“磁盘”区域,此文件会动态增长,但不缩水当这些区域不再使用时。例如,如果虚拟磁盘的扇区 10000-20000 被一个大文件使用,而您将其删除,则这些扇区(及其数据)的空间仍被 VHDX 文件占用。

因此随着时间的推移,当 Ubuntu 将新文件放置在整个磁盘区域时,VHDX 将继续增长,直到最终达到分配给 VM 的完整“磁盘大小”。

WSL2 使用的 VHD 的自动压缩功能实际上是被添加的本周早些时候

如果这是一个专用的 Hyper-V VM,它需要定期运行fstrim以通知主机操作系统哪些 VHD 区域可能被视为“空闲”(与使用 SSD 时相同);我怀疑新的 WSL2 功能以相同的方式工作,只从其“系统发行版”执行修剪。

相关内容