从 UEFI 启动到 Linux

从 UEFI 启动到 Linux

我有一个 Windows EFI 分区和一个包含以下内容的 Linux 根分区/boot/


Partition 1 Windows

Partition 2 Windows EFI

Partition 3 Linux Root => /boot/

Partition 4 Linux Home

我尝试使用efibootmgrbcfg 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 上。)

相关内容