Windows-Subsystem-for-Linux

從 Dualboot 作為 WSL 執行現有作業系統

  • December 27, 2021

我有一個現有的帶有 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 的開發人員/內部人員版本。

  1. 如果您只是想從不同的 WSL2 實例中訪問 Arch 分區上的文件,那麼應該相當簡單。您可以使用此處記錄的 Microsoft 說明安裝現有物理分區。
  2. 如果您真的想在 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 來說應該是類似的。也就是說,請確保記錄您所做的任何更改,以便在需要更改回使用它們進行雙啟動時可以“退出”。

/initWSL 通常會通過其流程為您設置大部分內容,但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`的

引用自:https://unix.stackexchange.com/questions/683650