從 Dualboot 作為 WSL 執行現有作業系統
我有一個現有的帶有 Windows 11 和 Arch Linux 的 Dualboot-Setup,由 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
據我所知,目前還沒有一種方法可以從最初未被 WSL“初始化”的驅動器中實際引導WSL 實例。
不過,至少有兩種可能的解決方法。兩者都需要 Windows 11,或者至少需要 Windows 10 的開發人員/內部人員版本。
- 如果您只是想從不同的 WSL2 實例中訪問 Arch 分區上的文件,那麼應該相當簡單。您可以使用此處記錄的 Microsoft 說明安裝現有物理分區。
- 如果您真的想在 WSL2 下使用這些 Arch 分區,那麼這會稍微複雜一些,但通過將其設置為
chroot
在單獨的 WSL2 實例下訪問仍然可能是可行的。這有幾個巨大的警告:
WSL2 不直接支持 Systemd。有一些方法可以讓它執行,但它們是 hacky 的解決方法。
相關——由於 Arch 系統的許多啟動可能依賴於 Systemd,因此您需要通過其他方式自己啟動大部分必要的服務。
即使您確實執行了 Systemd,它也會做一些期望物理硬體可用的事情。例如,它會嘗試啟動 X/Wayland。對於 WSL,這需要由 WSLg 實例處理。如果這是您要走的路線,那麼您需要:
根據用於掛載分區磁碟的相同 WSL2 文件掛載必要的 Linux 分區。
創建一個最小的“引導”WSL2 實例。如果這是一個長期的解決方案,那麼我可能會選擇 Alpine 作為它的基礎發行版,因為它非常“精簡”,但從一些更“全功能”開始可能是最簡單的(在框)喜歡Ubuntu。過去,我曾將現有的 Ubuntu 發行版用於類似
chroot
的用途。為 chroot 創建一個目錄。
sudo mount --bind
(綁定掛載)將掛載的分區從它們的預設位置(通常/mnt/wsl
)移動到適當的位置(即 chroot 目錄本身用於 rootfs 分區,以及其中的主目錄,當然,用於/home
分區)。最棘手的部分是讓 chroot 可以使用所有 WSL 特殊安裝和套接字。我之前已經按照此處記錄的方式完成了此操作,對於 Arch 來說應該是類似的。也就是說,請確保記錄您所做的任何更改,以便在需要更改回使用它們進行雙啟動時可以“退出”。
/init
WSL 通常會通過其流程為您設置大部分內容,但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`的