如何在 Debian 中设置默认内核?

如何在 Debian 中设置默认内核?

我有一个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

我的/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 ###

感谢 telcoM 提供上述命令

答案1

首先,检查/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-rebootgrub-set-default可以使用了。前者将设置内核启动仅适用于一次启动然后将返回到之前的默认值。后者将切换 GRUB 默认条目,直到您通过使用grub-set-default或在 GRUB 引导菜单中选择其他内容再次更改它。

最简单的默认设置形式仅指定菜单条目编号(从顶部的条目 #0 开始)。但是现代 GRUB 菜单通常被构造为将最新的内核放在第一个位置,然后所有其他内核的子菜单在第二个位置,以及该子菜单之后的任何其他操作系统和其他自定义条目。

要以有用的方式查看 GRUB 菜单,请运行grep -e "menuentry " -e submenu -e linux /boot/grub/grub.cfg。 (后面的空格menuentry是用来过滤掉一些错误的命中的。)你会看到一些相当长的menuentrysubmenu行,与真实菜单完全相同的顺序。此外,子菜单的条目将缩进,而主菜单条目则不会。这将允许您查看当前活动 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"

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"

即第二个条目(条目#1)打开子菜单,然后选择子菜单的第三个条目(条目#2)。

或者菜单标题为:

GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 5.10.0-12-amd64"

或者使用菜单 ID 字符串:

GRUB_DEFAULT="gnulinux-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d>gnulinux-5.10.0-12-amd64-advanced-ccb4ba21-fd62-42c9-b8eb-75a437b1747d"

或者使用上述方法的任意组合。

使用菜单标题或 ID 字符串的优点是,即使您安装和删除内核软件包,只要所选内核仍然可用,它们也会继续引用相同的内核。使用菜单项编号需要您在每次内核更新后检查(并在必要时调整)设置,因此如果与任何类型的自动更新一起使用,可能会导致令人讨厌的意外。

答案2

云镜像的构建并不支持云环境中不必要的功能。

大多数硬件驱动程序被禁用,x32 ABI 支持被禁用,微代码更新和机器检查异常也是如此。

您选择的内核将取决于您为实例提供的实用程序。

相关内容