uefi + grub 的顿悟

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
回复
头像
百草谷居士
帖子: 4020
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

uefi + grub 的顿悟

#1

帖子 百草谷居士 » 2025-05-02 20:56

在相当长的时间,我对于 efi 模式下 ubuntu 的启动有错误的理解。我过去认为 efi 分区下的 Boot/bootx64.efi 启动 ubuntu/grubx64.efi,然后它又启动 ubuntu 安装分区下的 grub,接着再去启动 vmlinuz。
但是我错了,其实是 efi 分区下的 ubuntu/grubx64.efi 直接启动了 ubuntu 分区下的 vmlinuz 。这中间有个配置文件的切换过程,一开始它读取的是 efi 分区下的 ubuntu/grub.cfg ,这个配置文件的末尾有一个 configfile 指令,切换到了 ubuntu 安装分区下的 /boot/grub/grub.cfg 文件(当然你也可以手工修改它)。
明白了这个道理,其实就意味着,可以在 efi 下的 ubuntu/grub.cfg 文件中进行更多设置,比如直接在这个地方定义多重引导菜单。
然而,efi 下的 ubuntu/grubx64.efi 是不完整的,缺失了许多模块,要在此使用 grub 配置的更多语法,需要把 ubuntu 系统的 /boot/grub/x86_64/ 文件夹复制到 efi 分区下的 ubuntu 文件夹下。
自此,就可以在这个 grub.cfg 文件中进行更多自定义配置。比如,我在此添加了启动 system rescue cd 的菜单项。
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
eagle5678
帖子: 1900
注册时间: 2006-07-08 14:07

Re: uefi + grub 的顿悟

#2

帖子 eagle5678 » 2025-05-04 16:22

高级
头像
百草谷居士
帖子: 4020
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: uefi + grub 的顿悟

#3

帖子 百草谷居士 » 2025-05-04 23:58

不少基于 debian(包括 ubuntu)的 live cd 中,都有一个 /boot/grub/loopback.cfg 的 grub 配置文件。通过跳转到这个配置文件,可以像从实体光盘启动那样,呈现出本身的 GRUB 菜单。这是依照 system rescue 官方指南中,跳转 loopback 配置文件的启动方法。

代码: 全选

menuentry "System Rescue CD"	{
	insmod part_gpt
	insmod btrfs
	search --no-floppy --fs-uuid --set=root 2b07112e-8764-46f1-96ae-1d5176134085
  	iso_path="/systemrescue.iso"
  	export iso_path
  	search --set=root --file $iso_path
  	# support booting recent GRUB versions on UEFI systems
  	rmmod tpm
  	loopback loop $iso_path
  	set root=(loop)
  	# the path below is on the SystemRescue ISO, not the hard drive
  	configfile /boot/grub/loopback.cfg
}
而下面则是,传统的,直接启动 vmlinuz 的引导方法。不过这种方法的好处是可以传递内核。下面是个启动 mint xfce 22.1 安装盘的 grub 菜单。

代码: 全选

menuentry "Mint Xfce 22.1 Live CD"	{
	insmod part_gpt
	insmod btrfs
	search --no-floppy --fs-uuid --set=root 1d5373bf-96ea-43f9-b0ce-fab3574d7f20
  	loopback loopmint /mint-xfce-221.iso
  	set root=(loopmint)
  	#configfile /boot/grub/loopback.cfg
	linux	/casper/vmlinuz  boot=casper username=mint hostname=mint locale=zh_CN.UTF-8 iso-scan/filename=/mint-xfce-221.iso quiet splash --
	initrd	/casper/initrd.lz
}
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
回复