我遵循经典过程在双启动中安装 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。
希望这可以帮助别人。