Pop OS:systemd-boot 无法检测到 Windows

Pop OS:systemd-boot 无法检测到 Windows

我遵循经典过程在双启动中安装 Windows 和 Linux。首先,我以 UEFI 模式安装 Windows,然后使用可启动的 PopOS 密钥来调整主 Windows 分区的大小;我创建了一个Linux分区,并/boot/efi在剩余空间中创建了一个500MB的分区。

我的问题是,systemd-boot似乎无法检测到 Windows 引导加载程序。

当我显示 systemd 启动菜单时,它仅将 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 Bootloader 填充的目录不知何故却没有填充。

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

答案1

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

查找 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

答案2

这是行不通的

安装程序在安装操作系统时需要调用bootctl install正确的参数,安装后您无法再更改它

pop os 配置错误,因此在安装时它不会向 bootctl 提供分区路径,并且 systemdboot 无法检测到 Windows 分区

你应该忘记 systemd boot 并使用 grub 代替

答案3

安装 rEFInd

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

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

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

答案4

不知道uefi模式下能不能用。我在 2010 年笔记本电脑上安装传统模式时也遇到了同样的问题。我通过安装 os-prober 解决了。然后我输入“sudo os-prober”,它会返回已安装的 Windows 10。

之后我输入“sudo update-grub”

终于找到了 Windows 10。

希望这可以帮助别人。

相关内容