我有一个 Windows EFI 分区和一个包含以下内容的 Linux 根分区/boot/
Partition 1 Windows
Partition 2 Windows EFI
Partition 3 Linux Root => /boot/
Partition 4 Linux Home
我尝试使用efibootmgr
并bcfg boot add fs
添加启动项来启动 Linux
为此我尝试了这个命令
efibootmgr --disk /dev/$myHardDrive --part $partition2 --create --label "$linuxName" --loader /vmlinuz-linux --unicode 'root=PARTUUID=$partition3UUID rw initrd=\initramfs-linux.img' --verbose
我也尝试过
bcfg boot add 0 fs1:\vmlinuz-linux "$linuxName"
bcfg boot -opt 0 fs1:\kernel-opts
。但没有 fs 包含 vmlinuz-linux 或 initramfs-linux.img 或 kernel-opts。因此 UEFI 自然会说bcfg: Invalid argument - 'fs1:\vmlinuz-linux'
bcfg boot dump -v
尺寸过大,无法在屏幕上正确打印和阅读
bcfg boot dump
输出 :
Option: 00. Variable: Boot0003
Desc - $linuxName
DevPath - HD(2,GPT,$anUUID,$anHexa,$anHexa2)/\VMLINUZ-LINUX
Optional- Y
Option: 01. Variable: Boot0000
Desc - Windows Boot Manager
DevPath - HD(2,GPT,$anUUID,$anHexa,$anHexa2)/\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
Optional- Y
Option: 02. Variable: Boot0001
Desc - Hard Drive
DevPath - BBS(HD,)
Optional- Y
对于efibootmgr -v
Boot0000* Windows Boot Manager HD(2,GPT,$anUUID,$anHexa,$anHexa2)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)WINDOWS........x...B.C.D.O.B.J.E.C.T.=.{$anUUIDWithDots}...t..............
Boot0003* $linuxName HD(2,GPT,$anUUID,$anHexa,$anHexa2)/File(\VMLINUZ-LINUX)r.o.o.t.=.P.A.R.T.U.U.I.D.=.$partition3UUIDWithDots .r.w. .i.n.i.t.r.d.=.\.i.n.i.t.r.a.m.f.s.-.l.i.n.u.x...i.m.g.
这个问题这里可能已经有答案了:
How to make UEFI bios start GRUB, not Windows? 5 answers
不,我的问题不同。我会进行修改来解释如何操作。
不是重复的,请参阅第二条评论
答案1
我成功访问了我的操作系统,它是“root=PARTUUID”,我使用了 UUID,所以我用 UUID 替换了 PARTUUID,现在没问题了,谢谢!
答案2
UEFI 只能从具有文件系统驱动程序的分区启动文件。(希望原因显而易见。)
大多数固件只理解 FAT 文件系统,因此你的efibootmgr
输入必须指向 EFI 系统分区(或另一个 FAT 分区,但没有意义拥有多个分区),并且必须将 vmlinuz-linux 和 initramfs-linux.img 复制到该分区。
(最简单的方法是将 Windows EFI 分区安装在 /boot 上。)