나는 사용한다인기 있는 운영 체제 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-default
5.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
제대로 작동할 수도 있지만 여전히 잘못된 커널로 부팅하고 있습니다. 최근에 비슷한 문제가 발생하여 두 가지 사실을 발견했습니다.
kernelstub -p
다른 커널로의 부팅이 올바르게 구성된 경우에도 출력은 다른 커널을 표시하도록 변경되지 않습니다.- 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/
파일 이름에 버전이 있기 때문입니다. 해키지만 작동합니다.