Windows

流行作業系統:systemd-boot 無法檢測到 Windows

  • May 26, 2021

我已經按照經典程序在雙啟動中安裝 Windows 和 Linux。首先我以 UEFI 模式安裝 Windows,然後使用可啟動的 PopOS 密鑰調整主 Windows 分區的大小;/boot/efi我在剩餘空間中創建了一個 Linux 分區以及一個 500MB 的分區。

我的問題是,systemd-boot似乎無法檢測到 Windows 引導載入程序。

當我顯示 systemd-boot 菜單時,它僅將 PopOS 列為可能的啟動選項,即使我可以從 BIOS 菜單啟動 Windows 也沒有問題。

當我執行時bootctl,我得到以下輸出:

System:
    Firmware: UEFI 2.70 (American Megatrends 5.14)
 Secure Boot: disabled
  Setup Mode: setup

Current Boot Loader:
     Product: systemd-boot 245.4-4ubuntu3.1pop0~1590695674~20.04~eaac747
    Features: ✓ Boot counting
              ✓ Menu timeout control
              ✓ One-shot menu timeout control
              ✓ Default entry control
              ✓ One-shot entry control
              ✓ Support for XBOOTLDR partition
              ✓ Support for passing random seed to OS
              ✓ Boot loader sets ESP partition information
         ESP: /dev/disk/by-partuuid/585919b8-7f1b-4f94-a0b1-6ff195d07515
        File: └─/EFI/SYSTEMD/SYSTEMD-BOOTX64.EFI

Random Seed:
Passed to OS: yes
System Token: set
      Exists: yes

Available Boot Loaders on ESP:
         ESP: /boot/efi (/dev/disk/by-partuuid/585919b8-7f1b-4f94-a0b1-6ff195d07515)
        File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 245.4-4ubuntu3.1pop0~1590695>
        File: └─/EFI/BOOT/BOOTX64.EFI (systemd-boot 245.4-4ubuntu3.1pop0~1590695674~20.04~e>

Boot Loaders Listed in EFI Variables:
       Title: Linux Boot Manager
          ID: 0x0003
      Status: active, boot-order
   Partition: /dev/disk/by-partuuid/585919b8-7f1b-4f94-a0b1-6ff195d07515
        File: └─/EFI/SYSTEMD/SYSTEMD-BOOTX64.EFI

       Title: Windows Boot Manager
          ID: 0x0000
      Status: active, boot-order
   Partition: /dev/disk/by-partuuid/42f0d8f0-13e0-41cf-bc36-ac80dccc54fd
        File: └─/EFI/MICROSOFT/BOOT/BOOTMGFW.EFI

       Title: UEFI OS
          ID: 0x0009
      Status: active, boot-order
   Partition: /dev/disk/by-partuuid/585919b8-7f1b-4f94-a0b1-6ff195d07515
        File: └─/EFI/BOOT/BOOTX64.EFI

Boot Loader Entries:
       $BOOT: /boot/efi (/dev/disk/by-partuuid/585919b8-7f1b-4f94-a0b1-6ff195d07515)

Default Boot Loader Entry:
       title: Pop!_OS
          id: Pop_OS-current.conf
      source: /boot/efi/loader/entries/Pop_OS-current.conf
       linux: /EFI/Pop_OS-3ce60b75-530a-4cad-9e80-5156a8e6bb56/vmlinuz.efi
      initrd: /EFI/Pop_OS-3ce60b75-530a-4cad-9e80-5156a8e6bb56/initrd.img
     options: root=UUID=3ce60b75-530a-4cad-9e80-5156a8e6bb56 ro quiet loglevel=0 systemd.sh>

注意Windows Boot Manager下面的條目Boot Loaders Listed in EFI Variables。似乎 systemd-boot 有點意識到我的 Windows 分區存在,它只是不會將其檢測為可以從中引導的東西。

(跑步bootctl install似乎並沒有改變任何東西)

我的/boot/efi/目錄如下所示:

/boot/efi/EFI
├── BOOT
│   └── BOOTX64.EFI
├── Linux
├── Pop_OS-3ce60b75-530a-4cad-9e80-5156a8e6bb56
│   ├── cmdline
│   ├── initrd.img
│   └── vmlinuz.efi
└── systemd
   └── systemd-bootx64.efi
/boot/efi/loader/entries/
└── Pop_OS-current.conf

因此,應該以某種方式填充 Windows 引導載入程序的目錄不是。

如何診斷此問題,並將 Windows 作為啟動選項添加到 systemd-boot?

試試這個方法只在多驅動系統上測試過

查找 Windows EFI 分區

lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT

創建路徑並掛載 Windows EFI 分區

sudo mkdir /mnt/win-efi
sudo mount /dev/sdb1 /mnt/win-efi

將 Windows EFI 的內容複製到 POP EFI

sudo cp -r /mnt/win-efi/EFI/Microsoft /boot/efi/EFI

將計時器添加到引導載入程序

sudo micro /boot/efi/loader/loader.conf

並向 loader.conf添加新行timeout 5或任意秒數

重啟

sudo reboot

它行不通

安裝程序在安裝作業系統時需要bootctl install使用正確的參數呼叫,安裝後您無法再更改它

pop os 配置錯誤,因此在安裝時它不會為 bootctl 提供分區路徑,並且 systemdboot 無法檢測到 windows 分區

您應該忘記 systemd 啟動並改用 grub

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