Hei*_*eit 8 linux grub boot debian grub2
我有一个5.10.0-11-cloud-amd64内核并且已经5.10.0-12-amd64在 Debian 上安装了内核11.2。我想 5.10.0-12-amd64暂时设置为默认内核。我是 Grub 新手,如何将默认内核设置为5.10.0-12-amd64?我的/lib/modules:
5.10.0-10-cloud-amd64 5.10.0-11-cloud-amd64 5.10.0-12-cloud-amd64
5.10.0-11-amd64 5.10.0-12-amd64
Run Code Online (Sandbox Code Playgroud)
我的/boot/只有grub文件夹,没有grub2文件夹。命令grep -e "menuentry " -e submenu -e linux /boot/grub/grub.cfg产量:
### BEGIN /etc/grub.d/10_linux ###
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-12-cloud-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
menuentry 'Debian GNU/Linux, with Linux 5.10.0-12-cloud-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-12-cloud-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-12-cloud-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-12-cloud-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-12-cloud-amd64-recovery-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-12-cloud-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro single console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-12-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-12-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-12-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-12-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-12-amd64-recovery-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-12-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro single console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-11-cloud-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-11-cloud-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-11-cloud-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-11-cloud-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-11-cloud-amd64-recovery-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-11-cloud-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro single console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-11-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-11-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-11-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
menuentry 'Debian GNU/Linux, with Linux 5.10.0-11-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-11-amd64-recovery-ccb4ba21-fd62-42c9-b8eb-75a437b1747d' {
linux /boot/vmlinuz-5.10.0-11-amd64 root=UUID=ccb4ba21-fd62-42c9-b8eb-75a437b1747d ro single console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
Run Code Online (Sandbox Code Playgroud)
感谢 telcoM 提供上述命令
tel*_*coM 13
首先,检查/etc/default/grub. GRUB_DEFAULT=里面应该有一个变量。如果设置为GRUB_DEFAULT=0或未设置,默认情况下将启动启动菜单中的第一个条目(条目#0)。如果它设置为除 以外的任何值 GRUB_DEFAULT=saved,则可靠地更改默认值的唯一方法是进行编辑GRUB_DEFAULT=,/etc/default/grub然后以 root 身份运行update-grub(或grub-mkconfig > /boot/grub/grub.cfg)。
如果设置为 GRUB_DEFAULT=saved,则两个命令 、grub-reboot和grub-set-default将可用。前者会将内核设置为仅引导一次,然后返回到之前的默认值。后者将切换 GRUB 默认条目,直到您通过使用grub-set-default或在 GRUB 引导菜单中选择其他内容再次更改它。
最简单的默认设置形式仅指定菜单条目编号(从顶部的条目 #0 开始)。但现代 GRUB 菜单通常构造为在第一个位置包含最新的内核,然后在第二个位置包含所有其他内核的子菜单,以及该子菜单之后的任何其他操作系统和其他自定义条目。
要以有用的方式查看 GRUB 菜单,请运行grep -e "menuentry " -e submenu -e linux /boot/grub/grub.cfg。(需要后面的空格menuentry来过滤掉一些错误的点击。)您将看到许多相当长的menuentry和submenu行,其顺序与真实菜单的顺序完全相同。此外,子菜单的条目将缩进,而主菜单条目则不会。这将允许您查看当前活动 GRUB 菜单的结构,而无需重新启动系统。
最上面的菜单项的标题通常只是“Debian GNU/Linux”,没有内核版本号,但我上面给出的命令也会列出linux /boot/vmlinuz-<kernel version number> ...作为第一个菜单项块一部分的命令,这将显示确切的命令将由最顶层条目引导的内核版本。
如果您需要选择子菜单内的菜单项(即其menuentry行缩进),则默认项规范应该是该行的标识符submenu、一个>字符,然后是您想要的实际菜单项的标识符。菜单项标识符可以是菜单项编号(每个菜单中从 0 开始)、标识符字符串($menuentry_id_option每个menuentry或submenu行后面的引号字符串)或每个菜单项和子菜单的可见标题。
Linux 内核的标识符字符串似乎采用gnulinux-simple-<Linux root filesystem UUID>第一个条目以及gnulinux-<kernel version>-advanced-<Linux root filesystem UUID>“高级选项...”子菜单中的条目的形式。
美式英语配置的 Debian 11 中可见的菜单项标题为第一项为“Debian GNU/Linux”,子菜单为“Advanced options for Debian GNU/Linux”,非子菜单为“Debian GNU/Linux, with Linux”。 - 子菜单中的恢复模式条目。
因此,假设您的 GRUB 菜单没有其他操作系统使问题变得复杂,您可以将内核设置5.10.0-12-amd64为默认值,直到您通过编辑以下GRUB_DEFAULT=行将其更改回来/etc/default/grub:
GRUB_DEFAULT="1>Debian GNU/Linux, with Linux 5.10.0-12-amd64"
Run Code Online (Sandbox Code Playgroud)
并update-grub以 root 身份运行。
如果您想要更大的灵活性,您可以设置GRUB_DEFAULT=saved、运行update-grub,然后运行grub-set-default "1>Debian GNU/Linux, with Linux 5.10.0-12-amd64"以更改默认值,直到将其更改回来,或者运行grub-reboot "1>Debian GNU/Linux, with Linux 5.10.0-12-amd64"以仅更改一次启动的默认值。
该1>前缀来自于首先选择子菜单条目的要求,并且它始终是主 GRUB 菜单中的第二个条目(即菜单项#1)。
如果您使用grub-set-default,您可以通过使用 ,根据简单的字母数字排序返回当前“最新”的任何内核grub-set-default 0。
请记住,每个菜单级别中的第一个条目编号为#0。对于菜单项,您可以将menuentry 'Debian GNU/Linux, with Linux 5.10.0-12-amd64'带有菜单项编号的行指定为:
GRUB_DEFAULT="1>2"
Run Code Online (Sandbox Code Playgroud)
即第二个条目(条目#1)打开子菜单,然后选择子菜单的第三个条目(条目#2)。
或者菜单标题为:
GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 5.10.0-12-amd64"
Run Code Online (Sandbox Code Playgroud)
或者使用菜单 ID 字符串:
GRUB_DEFAULT="gnulinux-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d>gnulinux-5.10.0-12-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d"
Run Code Online (Sandbox Code Playgroud)
或者使用上述方法的任意组合。
使用菜单标题或 ID 字符串的优点是,即使您安装和删除内核软件包,只要所选内核仍然可用,它们也会继续引用相同的内核。使用菜单项编号需要您在每次内核更新后检查(并在必要时调整)设置,因此如果与任何类型的自动更新一起使用,可能会导致令人讨厌的意外。