WSL 在 Windows 上使用了多少磁盘空间?

CTS*_*_AE 14 disk-space ubuntu windows-10 windows-subsystem-for-linux

WSL 在 Windows 上使用了多少磁盘空间?

我发现您可以进入 Windows 的应用程序和功能,它会显示 WSL2“Ubuntu”的磁盘使用情况,但这似乎不包括WSL Legacy,或者可能是因为它报告的内容似乎超出了我的预期?

CTS*_*_AE 12

从 Linux 确定磁盘使用情况

使用类似的工具ncdu可以通过一个漂亮的 cli 界面轻松确定磁盘使用情况。

安装 ncdu

sudo apt install ncdu  
Run Code Online (Sandbox Code Playgroud)

运行 ncdu

所以我们没有得到所有的 Windows 目录,我们需要排除该/mnt目录。

ncdu --exclude /mnt
Run Code Online (Sandbox Code Playgroud)

从 Windows 确定

在 Windows 的应用程序和功能下,它被Ubuntu列为占用1.92 GB

ncdu报告1.7 GiB (~1.82GB),这与 Windows 报告的非常接近。

WSL 旧版“Linux 上的 Ubuntu 上的 Bash”

我无法Bash on Ubuntu on Linux通过 Windows找到占用了多少空间,但是我可以通过运行ncdu --exclude /mnt.

相关的研究


Not*_*1ds 10

当然,随着 WSL 及其发行版的更新,这个问题的答案总是会发生变化。

测量任何给定 Windows 功能所使用的确切磁盘空间也非常困难,因为 Windows 也不断消耗和释放磁盘空间用于其他目的。也就是说,以下是今天在 Windows 11 上进行的一些测量:

简写:

  • WSL 功能和内核占用 100-200MB 的空间。
  • Ubuntu 发行版至少需要 1.1GB,但在第一次更新/升级时会迅速扩展到 2.7GB 左右。
  • 安装的 rootfs tarball 额外消耗了约 400MB,但可以恢复。

笔记:

这些测量是使用 Windows 11 上发布的 WSL 版本完成的。

WSL 现在可以从 Microsoft Store 中以预览版形式获得,并且该版本在安装后将消耗更多磁盘空间,因为这些功能未内置于 Windows 中。我尚未测量 WSL 的 Store/Preview 版本。

此外,这些测量结果是采用 WSL2 分布进行的。WSL1 发行版消耗的初始大小将大于 WSL2,但是,WSL1在删除文件时释放空间(与 WSL2 不同)。

细节:

  • 在安装 WSL 之前全新安装 Windows 11 + 更新会消耗35,584,876,544大量磁盘空间。

  • 启用 WSL 功能并重新启动后,35,587,739,648字节被消耗。减少约2,863,104(2.8MB)。这是预期的,因为该功能内置于 Windows 中并且只是“启用”(不一定安装)。

    请注意,在此阶段,WSL1 已安装并且可以与发行版一起使用。

  • 启用虚拟机平台以启用 WSL2 会消耗额外的23,044,096字节。然而,重新启动实际上收回了14,274,560这一点,因为8,769,536. 同样,这个较小的数字可能是因为该功能随 Windows 一起提供,并且刚刚启用。

  • 下载 16.1MB WSL2 内核包并重新启动后,568,856,576消耗了巨大的额外资源。这个数字应该有一个很大的警告,因为 Edge 是为了下载软件包而首次启动的。几乎可以肯定,大部分额外消耗的磁盘空间来自首次激活的 Edge 功能和其他副作用。

    安装的内核本身占用73,476,524字节。

  • 安装 Ubuntu 20.04wsl --install -d Ubuntu无疑是磁盘空间的最大消耗者。安装并重新启动后,1,648,529,408使用了额外的空间(1.6GB)。

    这有两个主要部分。首先是“应用程序”本身。这包括安装的 rootfs tarball。它存储在C:\Program Files\普通用户通常无法访问的目录中。不过,您可以通过在管理会话中运行简单的 PowerShell 一行来检查 WSL tarball 大小:

    Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\' | Where-Object {$_.Name -eq 'install.tar.gz' } 
    
    Run Code Online (Sandbox Code Playgroud)

    这表明 tarball 是452,534,052字节。从技术上讲,这可以通过删除应用程序来恢复,但请注意——删除应用程序也会删除发行版。不过,可以将其解耦(通过wsl --export/ --import),然后删除“App”/tarball。

    另一部分是实际分布本身,在 WSL2 下可以在虚拟 HDD 的大小中看到ext4.vhdx。在运行任何命令之前, 的大小vhdx为 1,173,397,504。

    过了一段时间后sudo apt update && sudo apt upgrade -y,发行版的大小增长到2,701,131,776(大约 2.7GB)。请注意, adf显示它是1,513,688k。大小的巨大变化vhdx可能是由于虚拟磁盘可以根据需要增长,但在从中删除文件时不会释放空间。有关详细信息,请参阅此问题。

  • Ubuntu 22.04 更新:基本vhdx大小为 1.49GB。然而,由于它今天刚刚发布,它已经包含了最新的软件包。因此,首字母sudo apt update && sudo apt upgrade -y不会占用任何额外的空间。

    与 Ubuntu 20.04 相比,总体节省了约 1.2GB。同样,随着 Ubuntu 22.04 生命周期的进展,这种情况可能会发生变化。