[Linux] CentOS 커널 패닉, 잘못된 설정 등으로 인한 부팅 실패 현상 해결하기

blog post 

 

리눅스 시스템을 운영하다 보면 예상치 못한 장애로 인해 부팅이 불가한 경우가 발생할 수 있습니다. 사실 장애 케이스도 워낙 많아서 모든 상황에 대해 다루기 어렵습니다만, 이번 포스트에서는 몇 가지 상황만 예로 들어보고 이를 싱글 모드를 활용하여 임시로 부팅할 수 있도록 조치하는 방법에 대해 알아보도록 하겠습니다.

 

 

 

장애 상황

 

 

아래는 CentOS8에서 잘못된 파티션 설정으로 인해 emergency 모드로 자동으로 넘어간 상태입니다. CentOS7이나 8버전의 경우, 기본적으로 부팅 과정에서 디스크 혹은 기타 잘못된 설정이 탐지된 경우, 자동으로 긴급 모드로 넘어가도록 설계되어 있습니다.

 

이 경우 비밀번호를 알고 있으면 쉽게 해결할 수 있습니다만, 모르는 경우에는 또 다른 문제가 되겠죠. (실제로 기업에서 시스템을 운영하는 과정에서 장기간 운영하던 장비를 재부팅 하는 경우, 비밀번호를 잊는 사례가 종종 있습니다)

 

긴급 모드에서 비밀번호를 잊었다...

 

또 다른 경우는 부팅 중 커널 패닉(혹은 커널 크래시) 상태가 되는 경우 입니다.

 

커널 패닉이 발생하는 원인은 정말 다양합니다. 잘못된 디스크 파티셔닝부터 시작해서, 시스템 옵션이나 커널을 잘못 설정하는 등, 단정짓기 어려운 다양한 문제로 인해 부팅에 실패할 때 발생하곤 합니다.

 

커널 패닉 발생의 예

 

CentOS의 경우 과거 6버전의 경우 selinux와 관련된 커널 패닉 버그도 있었죠.

 

 

 

조치 방법

 

 

이러한 장애가 발생하는 경우, 원인은 정확히 모르더라도 일단 운영자가 뭔가 조치할 수 있도록 시스템 터미널에 접근할 수 있어야 합니다. 이 때 싱글모드를 활용하면 유용합니다.

 

우선 장애가 발생하면 재부팅 합니다.

 

아래와 같이 커널 선택 창에서 우리가 주로 사용하는 커널을 선택 후 엔터가 아닌 'e' 를 클릭합니다.

 

 

 

기존 'ro' 와 'rhgb quiet' 를 찾아 각각 'rw', 'init=/bin/bash/' 로 변경합니다.

그럼 이제 싱글 모드의 bash 쉘 터미널로 넘어가는 것을 볼 수 있습니다.

 CentOS8의 경우, 다음과 같이 'chroot /sysroot' 명령을 통해서 root 파일을 마운트 해줘야 기존 시스템의 디렉토리에 접근할 수 있습니다.

CentOS8에서의 싱글모드

이제 우리가 이전에 작업했던 시스템의 모든 디렉토리에 접근할 수 있습니다. 

여기에서 비밀번호를 변경한다던가, 파티션을 수정한다던가, selinux를 disabled 한다던가 등의 조치를 취해주면 됩니다.

 

CentOS8의 경우, 작업 후 종료할 때에는 아래와 같이 exit reboot 해줍니다.

 

:/# exit
:/# reboot

 

만약 8버전 이하인 6,7인 경우, touch ./autorelabel 입력후 exec /sbin/init 해주면 됩니다.

 

bash-4.2# touch ./autorelabel
bash-4.2# exec /sbin/init

 

 

팁 - 부팅 과정에서 커널 패닉 강제로 발생시키기

 

 

혹시 테스트를 위해 커널 패닉을 강제로 발생시키고 싶을 경우, 아래와 같은 코드를 부팅 스크립트에 넣어주면 됩니다.

 

echo c > /proc/sysrq-trigger

 

TAGS.

Comments