流行操作系统:systemd-boot 无法检测到 Windows

Nar*_*aos 7 dual-boot windows uefi systemd-boot pop-os

我已经按照经典程序在双启动中安装 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>
Run Code Online (Sandbox Code Playgroud)

注意 下的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
Run Code Online (Sandbox Code Playgroud)
/boot/efi/loader/entries/
??? Pop_OS-current.conf
Run Code Online (Sandbox Code Playgroud)

所以应该用 Windows 引导加载程序填充的目录以某种方式没有。

如何诊断此问题,并将 Windows 添加为 systemd-boot 的启动选项?

小智 16

尝试 此方法仅在多驱动器系统上进行过测试

查找 Windows EFI 分区

lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT
Run Code Online (Sandbox Code Playgroud)

创建路径并挂载 Windows EFI 分区

sudo mkdir /mnt/win-efi
sudo mount /dev/sdb1 /mnt/win-efi
Run Code Online (Sandbox Code Playgroud)

将 Windows EFI 的内容复制到 POP EFI

sudo cp -r /mnt/win-efi/EFI/Microsoft /boot/efi/EFI
Run Code Online (Sandbox Code Playgroud)

将计时器添加到引导加载程序

sudo micro /boot/efi/loader/loader.conf
Run Code Online (Sandbox Code Playgroud)

并向 loader.conf 添加新行timeout 5或任意秒数

重启

sudo reboot
Run Code Online (Sandbox Code Playgroud)


Nar*_*aos 0

安装 rEFInd

经过进一步的研究,我发现这个 reddit 帖子来自有相同问题的人。此线程和其他线程中的多张海报建议rEFInd改为安装。

rEFInd 安装起来非常简单,并立即检测到我的 Windows 分区。

我遵循了这些 Youtube 教程,我推荐这些教程: