Pop OS 20.04에서 기본 부팅 커널을 변경하는 방법

Pop OS 20.04에서 기본 부팅 커널을 변경하는 방법

나는 사용한다인기 있는 운영 체제 20.04최근 커널 업그레이드로 인해 몇 가지 문제가 발생하여 이전 커널 버전으로 다시 전환해야 했습니다. (보다 구체적으로 말하면 커널이 업그레이드되었으며 일부 이전 버전의 ElasticSearch 문제로 인해 v5.16되돌려야 했습니다 ).v5.15

아시다시피 Pop OS는 systemd-boot. 모든 것이 다시 잘 작동하고 있었습니다. 며칠 전까지만 해도 시스템이 커널 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 list및를 사용하면 sudo bootctl set-default5.15 커널을 기본 부팅 옵션으로 복원할 수 있습니다.


그 후에는 이전 ElasticSearch를 고수해야 하는 한 새 커널 패키지가 도착하지 않도록 해야 합니다. 패키지 관리자를 설정해야 합니다잡다~을 위한커널 메타패키지최신 커널 패키지를 종속성으로 사용하세요. 새 커널 이미지 패키지 설치를 트리거하는 것은 메타패키지의 업그레이드입니다.

데비안에서는 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 업데이트"(시작 부분만 알고 있는 경우 탭을 사용하여 전체 커널 버전을 자동 채울 수 있습니다)

이는 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/파일 이름에 버전이 있기 때문입니다. 해키지만 작동합니다.

관련 정보