问题描述
安装了centos8系统之后,我想搜索/boot/grub2/grub.cfg中menentry系统启动菜单项的配置。 结果什么也没有找到搜索linux也是一无所获。
结果让人很郁闷,grub中启动菜单项中必要的几个元素
tiltle,linux,initrd 和root都没有。折腾了几天也没有发现什么。
罪魁祸首
静下心来,撸起grub.cfg一行一行的看 发现了如下描述:
大概的意思就是 blsgcfg 模块会解析/boot/loader/entries/下文件来生成启动菜单项(第一次进入/boot/ 发现有个loader文件夹还很奇怪)
接下就很明朗了我们进入/boot/loader/entries/下看下这个目录下面有什么,前面一堆看不懂的应该是id什么的后面字符很明显是内核版本的和救援的意思对应上开机启动项了
看下里面具体内容这个不就是我们一直想找的东西吗 ,尝试修改一下title重启机器发现启动标题果然变了,自此真相大白
结论
centos8系统中使用blsgcfg来解析文件生成菜单项。菜单项配置文件在/boot/loader/entries/ 每一个文件表示一个启动项
启动项命名官网建议包括机器ID(/etc/machine-id或缺少的OS的D-Bus机器ID /etc/machine-id),内核版本(由返回uname -r)和OS标识符(的ID字段/etc/os-release)来保证id的唯一性。
几个常用内容
- title:启动菜单标题 可以随意自定义
- version 版本信息 菜单项的顺序由这个确定
- linux 内核文件
- initrd 临时根文件系统
- options 内核参数
- id 系统的唯一标识 可以用来指定那个系统
多说一句
自定义菜单项后可以使用 grub2-set-default id 来启动指定系统了。本质上市修改了 /boot/grub2/grubenv中的saved_entry字段
反思
目前软件不管怎么变,但是底层原理是想通的。这个问题困惑了我许久主要原因:没有静下来心来认真看下grub.cfg文件