我正在使用 Windows 终端运行适用于 Linux 的 Windows 子系统 (WSL2),目前我已经从 Microsoft Store下载了“ Windows 上的 Ubuntu ”。当我运行“Windows 上的 Ubuntu”应用程序时,我在终端中看到了我所有的 Ubuntu 目录。
但是,据我从这篇 Ubuntu 论坛帖子中了解到,不应使用此应用程序。相反,“Ubuntu”Microsoft 商店应用程序可用于运行 WSL。
目前 Ubuntu 和 Windows 占用了大约 40GB 的硬盘空间。我的问题是,更改为“Ubuntu”应用程序会占用更少的磁盘空间吗?如果是这样,有人可以帮助我如何在不丢失任何数据的情况下从“Windows 上的 Ubuntu”迁移到“Ubuntu”。
的输出wsl -l -v
$ wsl.exe -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
的输出df -h /
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 251G 27G 213G 11% /
让我们先解决这个主要问题——不是真的。更改您安装的应用程序本身不会对磁盘空间产生任何直接影响。
间接地?大概。但只是因为备份和恢复 WSL 发行版具有“压缩”它的副作用。
为什么 WSL 上的 Ubuntu 占用这么多空间?
包含 Ubuntu 的 WSL2 虚拟磁盘映像是动态Hyper-V 虚拟磁盘。这里的“动态”意味着它开始时是一个接近 0 字节的文件,并随着您向其中添加数据而增长。到目前为止,所有用于 WSL 的 Ubuntu 镜像都是基于 Ubuntu Server 的,并且在安装后占用大约 1GB 的磁盘空间。
例如,我刚刚删除了我的 Ubuntu-22.04 发行版,然后在 PowerShell 中重新运行:
在询问我的用户名和密码后,生成的图像为 1.1GB。
然后,经过基本的
sudo apt update && sudo apt upgrade -y
(无论如何在 WSL 上安装 Ubuntu 之后你应该做的第一件事),发行版现在需要 ~1.7GB。请注意,我使用此 PowerShell 脚本获取 VHDX 大小,但您也可以使用文件资源管理器查找文件ext4.vhdx
并观察其大小。所以假设我此时在 Ubuntu 上安装了 Nix 包管理器,其中包含一些我喜欢的库存包。突然之间,磁盘大小跃升至 ~3.8GB。哎呀!(不是真的,但可以说这对我来说太多了)。所以我删除了所有
/nix
.但是现在我的磁盘映像仍然是 3.8GB。为什么它没有回到 ~1.6GB?
答案是,当动态虚拟磁盘增长以容纳新文件时,它不会在这些文件被删除时自动收缩。
您可以通过以下方式大致(但不准确)了解 Ubuntu 应占用多少空间:
如果您发现您在 Ubuntu 中确实使用了 40GB 的文件(这完全有可能),那么除了卸载或删除项目之外,您真的无能为力。
但是,如果您遇到
ext4.vhd
虚拟磁盘的大小与您在 Ubuntu 中实际使用的大小之间存在很大差异的情况,那么您可以按照此答案获取有关如何缩小虚拟磁盘的一些指导。“Windows 上的 Ubuntu”与“Ubuntu”
并不真地。一旦安装了Ubuntu 的任何商店版本,商店应用程序就真的不再“做”太多了。这很令人困惑,但也请阅读此答案以获取更多详细信息。Canonical 开发人员在该线程中提出的观点只是他们“重命名”了该应用程序以避免混淆。当它被称为不同的东西时你安装了这个事实是非常好的,而不是你需要“修复”的东西。
Store 应用程序的唯一目的是:
ext4.vhdx
将来,当您运行
ubuntu.exe
或ubuntu2004.exe
(这很可能是您的“开始”菜单项指向的内容)时,它会检测到它已经安装并简单地跳过前两个步骤。无论您运行的是 Ubuntu、Windows 上的 Ubuntu、Ubuntu 22.04、Ubuntu 20.04 等(所有选项,至少在某些时候,在 Microsoft Store 中),最终结果是您运行的是您安装的发行版是从Microsoft Store 模板创建的。
商店中最新发布的 Ubuntu 应用程序甚至允许您卸载该应用程序,让您的 Ubuntu发行版完好无损。但是,我不知道你使用的那个是否足够新,所以我不推荐它。无论如何,“模板”文件只占用大约 800MB 左右,所以只有在磁盘空间紧张得多的情况下才值得担心。