필자는 군대에 있는 관계로 커널 패닉
이 발생하면 무엇 때문에 패닉이 발생 했는지, 왜 발생했는지 알 도리가 없다. 심지어 리부팅도 불가능하므로 그냥 눈 뜨고 코 베이게 된다. 이것 때문에 컴퓨터를 키러 휴가를 써서 본가로 내려간 적이 한두번이 아니다. (뭐야 내 휴가 돌려줘요) 그런데! 어느 사이트 에서 아래의 글을 읽게 되었다:
이 글을 읽고 바로 커널 패닉이 발생했을 때, 이전의 정상적으로 실행 되었던 버전의 커널로 재부팅하는 방법을 찾아보게 되었다.
뭐가 되었든 일단 커널 패닉이 발생했을 때 자동으로 재부팅이 되야 얘기가 된다. 이건 어렵지 않게 가능했다:
sudo vi /etc/default/grub
...
GRUB_DEFAULT=saved # 기본적으로 추가되는 라인이지만,
# 이 라인이 반드시 있어야 한다. (이후에 자세히 설명)
GRUB_CMDLINE_LINUX="... panic=5" # 마지막에 `panic=5` 를 추가
/etc/default/grub
파일의 GRUB_CMDLINE_LINUX
옵션에 panic=5
를 추가하는 것으로, 커널 패닉이 발생했을 경우 5초 뒤 자동으로 리부팅 되도록 만들 수 있다.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Fedora 40 기준
sudo grubby --info=ALL
위 설정이 grub2
에 적용되려먼 설정 파일을 새로 써야 한다:
제대로 설정이 이뤄졌다면 다음과 같이 args
에 panic=5
가 추가된다.
grub2-reboot
sudo make modules_install install # 빌드한 커널 설치
sudo grubby --info=ALL # 설치된 커널의 index 확인
sudo grub2-set-default <index> # 패닉 발생 시 되돌아갈 커널,
# 그러니까 문제 없이 정상적으로 실행되는
# 커널의 index 를 등록한다.
sudo grub2-reboot <index> # 재부팅했을 때 실행 될 커널을 설정
이제 재부팅 시, 새롭게 빌드한 커널로 실행되어야 하고, 만일 패닉이 발생했다면 정상적으로 동작하는 커널로 되돌아갈 것이다. 마지막으로 설정한 내용을 확인해본다:
sudo grub2-editenv list # 그리고, 제대로 설정이 완료 되었는지 확인
여기에서 next_entry
가 다음 재부팅 시에 실행될 커널이고 saved_entry
가 재부팅 된 커널에서 패닉이 발생 되었을 때 실행 될 커널이 된다. 만약 커널이 발생해서 두 번의 재부팅이 발생하게 된다면 next_entry
는 다시 비워지므로 grub2-reboot
으로 재설정 해줘야 한다.
[사이트] http://coffeenix.net/board_view.php?cata_code=109&bd_code=1697
[사이트] https://docs.byteplus.com/en/docs/ecs/kernel-panic