我在 Gentoo Linux 系统上运行 GRUB 2.00。
我手动编译自己的内核,然后将它们安装/boot
在make install
.我/boot
现在有以下内核:
# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third
运行grub2-mkconfig
结果如下:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done
如果我现在阅读生成的/boot/grub2/grub.cfg
文件,我会注意到已创建以下条目:
- 启动的主要默认条目
vmlinuz-3.7.4-gentoo-third
- 包含所有其他条目(包括恢复条目)的子菜单,顺序与命令
grub2-mkconfig
相同
问题是在启动时我想默认加载内核的第五个版本 ( vmlinuz-3.7.4-gentoo-5
),而不是第三个版本 ( vmlinuz-3.7.4-gentoo-third
)。我也不想访问子菜单来选择要加载的正确内核。
我怎样才能改变这种行为?我如何告诉 GRUB 我想默认运行内核的第五个版本而不是旧的第三个版本?一般来说,如何更改默认输入行以匹配我想要的内核,而不是 GRUB 选择的看似随机的内核?
我还尝试将以下几行放入/etc/default/grub
:
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
这并不能按照我想要的方式解决问题。但至少 GRUB 似乎会记住我启动的最新内核并自动从子菜单中选择它。只是我不喜欢访问子菜单。
答案1
要选择子菜单“高级选项”下的菜单项,请设置 GRUB_DEFAULT="1>3"。您现在可以运行 grub2-mkconfig 来生成 grub 配置文件。下次重新启动时,vmlinuz-3.7.4-gentoo-5 应该会启动。
笔记:这不会更改 grub 菜单中的默认条目,即默认条目仍将指示与您现在相同的条目。但默认启动的映像将是“高级选项”下的第四个映像。要使 vmlinuz-3.7.4-gentoo-5 作为 grub 菜单中的默认条目,镜像的顺序应该是这样的:运行 grub2-mkconfig 时 vmlinuz-3.7.4-gentoo-5 应该是第一个镜像。
答案2
如果你有一个子菜单在 grub.cfg 中,您应该使用如下两位数字:
grub-reboot '1>3'
这第一的是菜单索引,并且第二是子菜单索引。
例如,要从配置中启动最后一个条目,如下所示:
grep menu /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
你应该使用:
grub-reboot '1>5'
并重新启动。
答案3
使用centos7(或RHEL7)和grub2:
grub 使用 grubenv 中的“saved_entry”条目作为默认引导,来自 /boot/grub2/grub.cfg 的片段:
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
检查“saved_entry”现在是什么我的构建:
grub2-editenv list
saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)
将其更改为我的调试版本:
grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'
答案4
尝试
mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup
这会将所有未使用的内核移动到备份目录,现在:
grub2-mkconfig -o /boot/grub/grub.cfg
这只会r5
为您的菜单增加选择。执行此操作后,请阅读此内容
这链接,然后重命名备份目录中的所有内核,如果您坚持保留它们,则可以使用除 vmlinuz 之外的其他内容