uefi + grub 的顿悟
发表于 : 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 的菜单项。
但是我错了,其实是 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 的菜单项。