我有一个现有的 Windows 11 和 Arch Linux 双重启动设置,由 grub 管理。
是否可以在 Windows 中将我的 Arch 系统用作 WSL?
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
|
|-nvme0n1p1
| vfat FAT32 73A8-FF43 451.3M 12% /boot
|-nvme0n1p2
| swap 1 23fe1eb0-971a-455f-bb80-301c0eb7eed5 [SWAP]
|-nvme0n1p3
| ext4 1.0 702789b8-6895-4117-98f3-56908ea027d0 180.4G 3% /
`-nvme0n1p4
ext4 1.0 9ac9ebb5-c604-4d89-875d-89590ff43db6 672G 0% /home
nvme1n1
|
|-nvme1n1p1
| vfat FAT32 SYSTEM
| BABE-8522
|-nvme1n1p2
|
|-nvme1n1p3
| ntfs Windows
| EC0AC1070AC0CFAE 402.8G 15% /windows
`-nvme1n1p4
ntfs WinRE_DRV
0EFEC19BFEC17C09
答案1
据我所知,目前还没有办法真正引导程序最初未由 WSL“初始化”的驱动器上的 WSL 实例。
不过,至少有两种可能的解决方法。两者都需要 Windows 11,或者至少是 Windows 10 的开发人员/内部版本。
如果您只是想访问文件从不同的 WSL2 实例内部访问您的 Arch 分区,那么应该相当简单。您可以使用以下命令挂载现有的物理分区此处记录的 Microsoft 说明。
如果你真的想使用WSL2 下的 Arch 分区,那么情况会复杂一些,但通过将其设置为
chroot
在单独的 WSL2 实例下进行访问,仍然可能实现。这附带了几个巨大的注意事项:
- WSL2 不直接支持 Systemd。有很多方法可以让它运行,但它们都是一些老套的解决方法。
- 相关——由于 Arch 系统的大部分启动可能都依赖于 Systemd,因此您需要通过其他方式自行启动大部分必要的服务。
- 即使您确实运行了 Systemd,它也会执行一些需要物理硬件可用的操作。例如,它会尝试启动 X/Wayland。对于 WSL,这需要由 WSLg 实例处理。
如果这是您想要采取的路线,那么您需要:
挂载必要的Linux分区按照用于安装分区磁盘的相同 WSL2 文档。
创建一个最小的“引导”WSL2 实例。如果这是一个长期解决方案,那么我可能会选择 Alpine 作为基本发行版,因为它是如此“精简”,但从一些更“功能齐全”的开始可能是最简单的(在盒)就像 Ubuntu 一样。我
chroot
过去曾使用现有的 Ubuntu 发行版进行类似的操作。为 chroot 创建一个目录。
sudo mount --bind
(绑定挂载)已挂载的分区从其默认位置(通常/mnt/wsl
)到适当的位置(即 rootfs 分区的 chroot 目录本身,当然还有该/home
分区的主目录)。最棘手的部分是使所有 WSL 特殊安装座和套接字可供 chroot 使用。我之前已经按照记录完成了此操作这里,对于 Arch 来说应该是类似的。也就是说,请确保记录您所做的任何更改,以便在需要时可以“取消它们”以重新使用它们进行双引导。
WSL 通常会通过其流程为您设置大部分内容
/init
,但在 a 中chroot
您需要手动完成。涉及的目录、文件和套接字至少有:/mnt/wsl
:包括resolv.conf
WSL 生成的用于 Windows 网络的/etc/resolv.conf
: 需要符号链接到生成的版本。/mnt/wslg
:用于与 WSLg Weston 发行版通信以运行图形应用程序mnt/wslg/.X11-unix/
(X 插座)/run/WSL
:用于与 Windows 的互操作/dev
/proc
/dev/pts
/sys
/binfmt_misc
:用于运行 Windows.exe
的