从 Dualboot 作为 WSL 运行现有操作系统

从 Dualboot 作为 WSL 运行现有操作系统

我有一个现有的 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 的开发人员/内部版本。

  1. 如果您只是想访问文件从不同的 WSL2 实例内部访问您的 Arch 分区,那么应该相当简单。您可以使用以下命令挂载现有的物理分区此处记录的 Microsoft 说明

  2. 如果你真的想使用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.confWSL 生成的用于 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

相关内容