You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译安装的GRUB 2.12默认加载grub.cfg路径配置问题

编译安装的GRUB 2.12默认加载grub.cfg路径配置问题

我来帮你梳理下GRUB默认加载grub.cfg的逻辑,以及怎么调整它指向你加密boot目录里的配置文件:

GRUB默认找grub.cfg的优先级逻辑

GRUB的EFI二进制文件(比如你提到的grubx64-signed.efi)默认会按以下顺序寻找grub.cfg:

  • 第一优先级是和EFI文件在同一目录下的grub.cfg——这本来应该是你期望的情况,但没生效的话,大概率是你复制文件时没同步更新GRUB内部的路径配置,或者最初编译安装时的参数不对。
  • 如果同目录找不到,会 fallback 到EFI系统分区下的/EFI/BOOT/grub.cfg,或者根据编译安装时嵌入的默认prefix路径去查找。

grub-install如何配置默认的grub.cfg路径

当你用grub-install安装GRUB时,它会把一个默认的prefix路径嵌入到生成的EFI二进制文件里,GRUB默认会加载$prefix/grub.cfg这个文件。

针对你的场景(Ubuntu 22.04,加密boot,GRUB 2.12源码编译),你需要重新执行grub-install,明确指定参数让它把prefix指向你加密boot的目录/boot/efi/EFI/ubuntu1/。假设你的EFI分区挂载在/boot/efi(通常是这样),可以用这条命令:

sudo grub-install --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI/ubuntu1 --target=x86_64-efi --modules="cryptodisk luks" --bootloader-id=ubuntu1

这里的几个关键参数:

  • --boot-directory指定GRUB相关文件(包括grub.cfg)的存放目录
  • --bootloader-id会在EFI分区下创建对应的标识目录,同时把正确的prefix嵌入到EFI二进制中
  • --modules提前加载加密磁盘相关模块,确保GRUB能识别加密boot分区

执行完这个命令后,再重新生成该目录下的grub.cfg,确保配置是针对加密boot的:

sudo grub-mkconfig -o /boot/efi/EFI/ubuntu1/grub.cfg

为什么当前会加载普通boot的grub.cfg?

因为你最初是在普通boot环境下执行的grub-install,这时候生成的EFI二进制里嵌入的prefix是指向普通boot的路径。后来你只是复制了文件,但没有更新EFI二进制内部的prefix配置,所以启动时GRUB还是会按照原来的旧路径去寻找普通boot里的grub.cfg。

验证方法

你可以在GRUB启动时按c进入命令行,执行echo $prefix,看看当前默认的prefix是什么——如果显示的是普通boot的路径,就说明之前的猜测是对的,重新执行上面的grub-install命令就能解决问题。

备注:内容来源于stack exchange,提问作者mr.anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 13:12:58