wsl.exe
帮助(显示为wsl.exe --help
)谈论“系统分布”:
Options:
...
--system
Launches a shell for the system distribution.
它是什么?在 WSL 文档中搜索“系统分发”时,我在How to manage WSL disk space部分只得到以下结果:
有关块设备的信息包括: 名称:分配给设备的名称将是
sd[a-z]
,指的是 SCSI 磁盘,并为每个正在使用的磁盘指定一个字母。sda
总是系统分布。
启动此 shell 后,检查
/etc/os-release
以获取有关已安装发行版的更多信息。在我的 WSL 中,这似乎是
Common Base Linux Mariner
,并在此处记录:https ://aka.ms/cbl-marinerWSL 中的(或“a”,取决于上下文)“系统分布”的命名有点奇怪,但可能意味着与“用户分布”相反。这也有点难以解释。大约 2 年前的原始WSLg Architecture devblog 帖子中有一个概述。
对于大多数用户来说,除了好奇之外,真的没有必要了解或使用系统发行版。但是,它可以用于:
--system
WSL 帮助中那个奇怪的论点是什么;-)首先,一些额外的“术语”。要理解什么是“系统分布”,我们首先需要真正理解什么是WSL中的“分布”。简短摘要 - 分发是在 WSL2 VM内运行的名称空间隔离环境(容器)。有关详细信息,请参阅此答案。
实际上有多个系统分布:
WSL 本身提供的模板、根文件系统(基于CBL Mariner,如@Panki 的回答中所述)。这个根文件系统然后被用来创建...
每个其他正在运行的用户发行版(例如 Ubuntu、Alpine、Kali、Arch 等)的系统发行版(命名空间容器)。该系统分布是 Wayland(带有 RDP/RAILS)、Xwayland、Weston 和 PulseAudio 运行的地方。然后,这些服务的套接字在启动时被挂载、绑定挂载和/或符号链接(技术随着时间的推移而改变)到用户分发版中。此系统分发版与同级用户分发版具有相同的生命周期。
默认 WSL 安装使用 Ubuntu(当前为 20.04)作为发行版。在这种情况下,当您启动 WSL/Ubuntu 时,会启动相应的系统分发,启动服务,并创建从系统分发返回 Ubuntu 的符号链接/挂载。该架构对于在 WSL 下运行的所有 Linux 发行版都是通用的。然而,某些发行版(我在看你,GNU Guix ;-))可能会偏离“规范”太远并且需要额外的工作才能使用 WSLg 运行 GUI 应用程序。
主要坐骑是
/mnt/wslg
(正如你提到的,应该是/dev/sda
——我以前从未真正注意到过)。X11 套接字所在的/tmp/.X11
目录(现在)是只读的,绑定挂载回/mnt/wslg/.X11-unix
.为 Wayland 和 PulseAudio 创建了类似的绑定安装或符号链接,尽管我还没有完全探索架构的所有角落和缝隙。
因此,当您启动 WSL 时,您可以单独启动:
你会看到你的默认用户在
wslg
那里。但是,您也可以访问它wsl --system -u root
。您也可以从开始,
wsl --system
您会发现(使用wsl -l -v
)您的默认分发也已启动。因为“按分发”系统分发是在每次 WSL 分发启动时“按需”创建的,所以它是短暂的。当用户分发停止时,您在
wsl --system
(或wsl --system -d <user_distro_name>
)中所做的任何更改都将丢失。要使更改永久生效,您可以使用 Github 上的 WSLg 存储库构建您自己的系统发行版,并将 WSLg 使用的存储库替换为一个
.wslconfig
文件。老实说,自从 WSLg 可用以来的近两年时间里,我不知道 Microsoft 以外的任何人发现有必要这样做,但这无疑是一项有趣的功能。至少,它允许您升级(甚至回滚)像 Weston 这样的组件,而不必等待 Microsoft 进行更改。