如何更改 Pop OS 20.04 的默认启动内核

如何更改 Pop OS 20.04 的默认启动内核

我用流行操作系统20.04最近内核升级,导致了一些问题,所以我不得不切换回以前的内核版本。 (更具体地说,内核已升级到,由于某些旧版本的 ElasticSearch 出现问题,v5.16我不得不恢复到)。v5.15

您可能知道,Pop OS 使用systemd-boot,几个月前我使用 systemd 启动菜单选择旧内核作为默认启动选项。一切又恢复正常,直到几天前我注意到系统是用内核 v5.16 启动的!我仔细检查了 systemd 启动菜单,它仍然设置为使用旧内核选项启动!我的猜测是旧的内核选项已升级并切换到 v5.16,这是不可取的!

不幸的是,与 相比grub,它似乎systemd-boot试图过度简化事情并且没有显示明确的内核版本可供选择!

所以我搜索了其他选项来更改默认启动内核,我发现的只是本文。所以我使用以下命令来更改我的默认内核选项:

me@pop-os:~$ sudo kernelstub -v -l -k /boot/vmlinuz-5.15.23-76051523-generic -i /boot/initrd.img-5.15.23-76051523-generic
kernelstub.Config    : INFO     Looking for configuration...
kernelstub           : INFO     System information: 

    OS:..................Pop!_OS 20.04
    Root partition:....../dev/sda3
    ESP Path:............/boot/efi
    ESP Partition:......./dev/sda1
    ESP Partition #:.....1
    NVRAM entry #:.......-1
    Boot Variable #:.....0000
    Kernel Boot Options:.quiet loglevel=0 systemd.show_status=false splash
    Kernel Image Path:.../boot/vmlinuz-5.15.23-76051523-generic
    Initrd Image Path:.../boot/initrd.img-5.15.23-76051523-generic
    Force-overwrite:.....False

kernelstub.Installer : INFO     Copying Kernel into ESP
kernelstub.Installer : INFO     Copying initrd.img into ESP
kernelstub.Installer : INFO     Setting up loader.conf configuration
kernelstub.Installer : INFO     Making entry file for Pop!_OS
kernelstub.Installer : INFO     Backing up old kernel
kernelstub.Installer : INFO     Making entry file for Pop!_OS

me@pop-os:~$ echo $?
0

从上面可以看到,命令成功运行,并显示退出代码0;但并不生效!当我仔细检查它的输出时,kernelstub它仍然和以前一样!

me@pop-os:~$ sudo kernelstub -p
kernelstub.Config    : INFO     Looking for configuration...
kernelstub           : INFO     System information: 

    OS:..................Pop!_OS 20.04
    Root partition:....../dev/sda3
    ESP Path:............/boot/efi
    ESP Partition:......./dev/sda1
    ESP Partition #:.....1
    NVRAM entry #:.......-1
    Boot Variable #:.....0000
    Kernel Boot Options:.quiet loglevel=0 systemd.show_status=false splash
    Kernel Image Path:.../boot/vmlinuz-5.17.5-76051705-generic
    Initrd Image Path:.../boot/initrd.img-5.17.5-76051705-generic
    Force-overwrite:.....False

kernelstub           : INFO     Configuration details: 

   ESP Location:................../boot/efi
   Management Mode:...............True
   Install Loader configuration:..True
   Configuration version:.........3

以下是我在系统上安装的内核:

me@pop-os:~$ dpkg --list | grep linux-image | grep ii
ii  linux-image-5.15.23-76051523-generic  Linux kernel image for version 5.15.23 on 64 bit x86 SMP
ii  linux-image-5.16.19-76051619-generic  Linux kernel image for version 5.16.19 on 64 bit x86 SMP
ii  linux-image-5.17.5-76051705-generic   Linux kernel image for version 5.17.5 on 64 bit x86 SMP
ii  linux-image-generic                   Generic Linux kernel image

更新:根据 @telcoM 的回答,以下是 ‍‍ 的输出bootctl list

me@pop-os:~$ sudo bootctl list
Boot Loader Entries:
        title: Pop!_OS (Pop_OS-current.conf)
           id: Pop_OS-current.conf
       source: /boot/efi/loader/entries/Pop_OS-current.conf
        linux: /EFI/Pop_OS-4574dd5b-40ad-462f-bfbe-22676dd09bdc/vmlinuz.efi
       initrd: /EFI/Pop_OS-4574dd5b-40ad-462f-bfbe-22676dd09bdc/initrd.img
      options: root=UUID=4574dd5b-40ad-462f-bfbe-22676dd09bdc ro quiet loglevel=0 systemd.show_status=false splash

        title: Pop!_OS (Pop_OS-oldkern.conf) (default)
           id: Pop_OS-oldkern.conf
       source: /boot/efi/loader/entries/Pop_OS-oldkern.conf
        linux: /EFI/Pop_OS-4574dd5b-40ad-462f-bfbe-22676dd09bdc/vmlinuz-previous.efi
       initrd: /EFI/Pop_OS-4574dd5b-40ad-462f-bfbe-22676dd09bdc/initrd.img-previous
      options: root=UUID=4574dd5b-40ad-462f-bfbe-22676dd09bdc ro quiet loglevel=0 systemd.show_status=false splash

        title: Pop!_OS recovery
           id: Recovery-9D1B-C521.conf
       source: /boot/efi/loader/entries/Recovery-9D1B-C521.conf
        linux: /EFI/Recovery-9D1B-C521/vmlinuz.efi
       initrd: /EFI/Recovery-9D1B-C521/initrd.gz
      options: boot=casper hostname=recovery userfullname=Recovery username=recovery live-media-path=/casper-9D1B-C521 live-media=>

        title: Reboot Into Firmware Interface
           id: auto-reboot-to-firmware-setup
       source: /sys/firmware/efi/efivars/LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f

如您所见,默认启动内核设置为该old-kernel选项;但没有指定明确的内核版本,我无法弄清楚旧的和当前的内核是什么版本。但根据我看到的行为,我可以猜测old = 5.16并且current = 5.17

我怎样才能解决这个问题?我想将默认启动内核设置为 v5.15 并且不再更改。

答案1

首先,您的系统现已更新至内核 5。17 号.5,而 5.16.19 现在可能是old-kernel.请显示 的输出sudo bootctl list

我自己不使用Pop OS,但据我了解systemd-boot,设置默认启动项的命令可能是bootctl set-default,查看可用启动项的命令是bootctl list

假设我理解正确,kernelstub命令只是管理每个内核的详细信息,如果您不指定确切的内核,则默认在最新的内核上运行。

由于您的kernelstub -v -l ...命令显然有效,现在应该有 Pop OS 的第三个条目bootctl list,其中 5.15 内核首先在 5.16 中被推入插槽old-kernel,然后在 5.17 的引入中完全从列表中删除(?)。所以您的方向是正确的,但只需要采取更多步骤。

通过使用sudo bootctl listsudo bootctl set-default您应该能够将 5.15 内核恢复为默认启动选项。


之后,只要您需要坚持使用旧的 ElasticSearch,您就需要阻止新内核包的到来。您应该设置一个包管理器抓住对于内核元包具有最新的内核包作为依赖项。正是元包的升级触发了新内核镜像包的安装。

在 Debian 中,这将是linux-image-amd64,最高级别linux-image-generic将是虚拟包。看来 Pop OS 构建者已经简化了结构,在您的情况下,元包似乎是linux-image-generic相反的。

您也可以使用 GUI 包管理器来设置保留,但在命令行上它将是:

sudo apt-mark hold linux-image-generic

或者

echo "linux-image-generic hold" | sudo dpkg --set-selections 

要查看现有的包保留:

dpkg --get-selections | grep "\<hold$"

或者

apt-mark showhold

最终,您可能会升级 ElasticSearch 或以其他方式摆脱与 5.15 内核保持一致的要求。此时,您需要删除保留以允许再次更新内核:

sudo apt-mark unhold linux-image-generic

或者

echo "linux-image-generic install" | sudo dpkg --set-selections

答案2

您的命令可能kernelstub工作正常,但您仍然引导到错误的内核。我最近遇到了类似的问题,并注意到两件事:

  1. kernelstub -p即使正确配置了引导到不同的内核,输出也不会更改以显示不同的内核。
  2. Kernelstub 只会更改“当前”启动选项。

因此,该命令可能正在工作,但是,当您重新启动时,默认选项“old-kernel”意味着您没有使用您设置的内核。如果您运行问题中的命令,然后重新启动并选择“当前”选项,您应该使用您选择的内核启动。您可以通过运行uname -r检查当前使用的内核版本来确认这一点。

答案3

我也遇到过类似的问题,我弄乱了 Pop!_OS 22.04 上的内核版本,不得不在版本之间来回切换才能找到最好的版本。

要将我的内核版本设置为 6.6.10,我使用了

# update-initramfs -u -k 6.6.10-76060610-generic

应该使用内核版本 6.6.10-...“更新现有的 initramfs”(如果您只知道它的开头,您可以使用 tab 自动填充完整的内核版本)

这修复了kernelstub -p显示并在启动时使用所需的内核(6.6.10)。重启后:

$ uname -r
6.6.10-76060610-generic

$ sudo kernelstub -p
...
    Kernel Boot Options:.quiet loglevel=0 systemd.show_status=false splash systemd.unified_cgroup_hierarchy=0
    Kernel Image Path:.../boot/vmlinuz-6.6.10-76060610-generic
    Initrd Image Path:.../boot/initrd.img-6.6.10-76060610-generic
    Force-overwrite:.....False
...

至于检查“当前”和“旧”配置使用的内核版本,我比较了目录/boot/efi/EFI/Pop...//boot/目录中内核映像的校验和,因为 中的内核映像的/boot/文件名中包含版本。哈基,但它有效。

相关内容