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

WSL 在 Windows 上使用了多少磁盘空间? 我发现你可以进入 Windows 的“应用和功能”界面,它会显示 WSL2 “Ubuntu”的磁盘使用情况,但似乎不包括“WSL Legacy”,或者也许包括了,因为它报告的空间比我预期的要多?

9可能是基本的Bash/WSL子系统在Windows上占用多少空间?的重复问题。 - Biswapriyo
如果您能指明您使用的Windows版本,我们可以澄清这不是重复问题。请使用编辑按钮使此更加清晰明了。 - music2myear
我在下面的回答中将其标记为我的研究的一部分。他想知道安装WSL需要多长时间,以查看他的系统是否有足够的空间。他可能还试图评估设置经验丰富的WSL所需的空间量,那里接受的答案只是“在安装之前查看您的磁盘空间,并找到差异”,我认为这个答案不可接受。我在那个问题上提供了一个链接到这里的答案,以了解实际使用情况,而不是尝试进行前后大小测量。WSL是Windows 10的功能,我认为版本控制并不重要。 - CTS_AE
4个回答

从Linux确定磁盘使用情况

使用像ncdu这样的工具可以通过一个漂亮的命令行界面轻松确定磁盘使用情况。

安装ncdu

sudo apt install ncdu  

运行ncdu

为了避免将Windows的所有目录都包含在内,我们需要排除/mnt目录。

sudo ncdu / --exclude /mnt

从Windows确定

在Windows的“应用和功能”中,它列出了Ubuntu占用1.92 GB

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

WSL Legacy "Bash on Ubuntu on Linux"

我无法通过Windows找到Bash on Ubuntu on Linux占用多少空间,但我可以通过运行sudo ncdu / --exclude /mnt来查看它使用了多少空间。

相关研究


1@TamusJRoyce - WSL1与Android完全无关......我先前已经完整解释过WSL1是什么,以前的回答中有提到。由于WSL1已不再改进,相比频繁改进的WSL2,可以认为WSL1是一种“传统”实现方式。 - Ramhound
很不幸。我一直在调查WSL 1是否还在改进中,但没有找到任何未被改进的文章。实际上,有些文章说两者都会继续得到支持。除了能运行一些Linux通用命令外,WSL 1与Linux没有任何关系。我经常在无法启用虚拟化的环境中使用WSL 1进行开发工作。"Bash on Ubuntu on Linux"听起来好像WSL 1是在Linux上运行的。因此才发表了那样的评论。非常感谢您的更新!真是太感激了。 - TamusJRoyce
我非常确定应该是 ncdu --exclude=/mnt - BJury
1无论是--exclude /mnt还是--exclude=/mnt似乎都不能真正排除/mnt,这些都是它开始访问的第一项。 - Todd Sewell
我必须像这样排除掉/c/mnt,使用命令 ncdu --exclude /c --exclude /mnt - Josh Russo
起初,--exclude /mnt 对我来说没有起作用,但那是因为当前工作目录本身就在 /mnt 内。在运行 cd / 后,它开始起作用了。 - Ghost4Man
由于wsl2实际上是一个虚拟机(在其上运行lscpu命令,您将看到虚拟化),并且其文件系统是ext4格式,因此您的回答实际上是非常不准确的,因为很明显它在某个地方有一个映像,即使它没有完全预分配的空间,如果您安装了某些东西然后卸载它,如果不是原地修剪,那么您卸载的内容将继续占用空间。 - undefined
虚拟机空间分配的问题就在于,你需要对其进行修剪。以VMware为例,有文档说明如何使用名为zerofree的Linux工具,将未使用的空间填充为零,然后压缩镜像以节省主机空间,而ESXi则有自动修剪解决方案。 - undefined
请查看我的答案,看看差异有多大。 - undefined

这个问题的答案会随着WSL及其发行版的更新而不断变化。 由于Windows不断地为其他目的消耗和释放磁盘空间,因此准确测量任何给定Windows功能所使用的磁盘空间是非常困难的。尽管如此,以下是今天在Windows 11上进行的一些测量结果: 简要概述如下: - WSL功能和内核占用100-200MB的空间。 - Ubuntu发行版最少需要1.1GB的空间,但在首次更新/升级后会迅速扩展到约2.7GB。 - 安装的rootfs tarball还会占用额外的约400MB空间,但可以恢复。 注意: 这些测量是在Windows 11上发布的WSL版本上进行的。 WSL现在以预览形式在Microsoft Store中提供,并且安装后将占用更多的磁盘空间,因为这些功能没有内置在Windows中。我还没有测量过Store/Preview版本的WSL。 此外,这些测量是使用WSL2分发进行的。WSL1分发的初始占用空间将大于WSL2,然而,与WSL2不同,WSL1会在文件被删除时释放空间。 细节: 在安装了Windows 11和更新之后,但尚未安装WSL时,占用了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字节。 使用"wsl --install -d Ubuntu"安装Ubuntu 20.04无疑是占用磁盘空间最多的。在安装和重新启动后,额外使用了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' } 这显示tarball的大小为452,534,052字节。从技术上讲,通过删除该应用程序可以回收这些空间,但请注意,删除应用程序也会删除发行版。可以通过"wsl --export"/"--import"解耦它,然后删除“应用程序”/tarball。 另一部分是实际的发行版本身,在WSL2中可以看到虚拟硬盘的大小。在运行任何命令之前,的大小是1,173,397,504。 在运行sudo apt update && sudo apt upgrade -y之后,发行版的大小增长到2,701,131,776(约2.7GB)。请注意,df显示其为1,513,688k。大小的巨大变化可能是由于虚拟磁盘可以根据需要“增长”,但在从中删除文件时不释放空间。有关详细信息,请参阅this question。 Ubuntu 22.04的更新:基本大小为1.49GB。然而,由于它刚刚发布,已经包含最新的软件包。因此,初始的sudo apt update && sudo apt upgrade -y并未消耗额外的空间。 与Ubuntu 20.04相比,总体节省了约1.2GB。同样,在我们进行Ubuntu 22.04的生命周期中,这可能会发生变化。

感谢这个实证过程的每一步。据我所知,在任何特定时间点上,没有很好的方法来衡量,但这给出了一个有形的度量,正如你所说,它会随着依赖关系随时间变化而改变。我开始想知道WSL的虚拟磁盘存储在哪里,但有趣的是你可以像你提到的那样运行导出操作。 - CTS_AE

@CTS_AE的回答非常有帮助。ncdu是一个优秀的工具,可以可视化文件夹的磁盘使用情况。然而,ncdu --exclude /mnt对我无效。ncdu / --exclude /mnt有效。 我在Debian(WSL2)上进行了测试,ncdu --version显示ncdu 1.15.1。

请查看我的评论和回答... - undefined

这是答案,即使现在(Windows 11)不是那么准确(我在路径中看不到“canonical”): https://askubuntu.com/questions/1363015/understanding-disk-space-using-wsl2 答案在Windows中,请转到这里:%userprofile%\AppData\Local\Packages, 然后搜索您的发行版,找到后右键单击并选择属性,它会为您计算。 正如我上面评论的,df/du/ncdu所说的和实际情况之间有很大的差异,例如我刚安装的Kali,du说它使用了0.9G,但Windows文件资源管理器显示为1.7G。