부팅시 아래와 같은 메시지 출력과 함께 부팅 실패에 대한 원인과 대처 방법에 대해 알아보자.

Kernel panic - not syncing: Attempted to kill init!
Pid: 1, Comm: init Not tainted 2.6.32-431.5.1.el6.x86_64 #1
Call Trace:
[<ffffffff81527513>] ? panic+0xa7/0x16f
.
.
.
[<ffffffff8100b072>] ? system_call_fastpath+0x16/0x1b

initramfs  img 파일 안의 init 을 로딩하는데 문제가 발생하여 커널 패닉과 함께 부팅이 실패되는 현상이다.

 

해당 현상이 발생할 수 있는 원인은 대략 3가지가 있을 수 있다. - initramfs(dracut), selinux, filesystem

참조 : https://www.centos.org/forums/viewtopic.php?t=4161

1. wrong/incorrect/missing entries in the /etc/fstab file, requires reboot in the rescue mode in CentOS/Fedora/RHEL and might be painful in the virtualized environments if not having any attachable CD-ROM iso images of the CentOS/Fedora/RHEL OS for the VMs.

2. wrong/incorrect/missing entries in the /etc/grub.conf (sym link to /boot/grub/grub.conf), requires reboot in the rescue mode in CentOS/Fedora/RHEL as above. You can also remove the boot parameters "quiet" and "rhgb" from your grub.conf file to be able to troubleshoot the issue more when troubleshooting rebooting the system up. This of course you can do only when you have the local file systems being mounted in the rescue mode (google more for the rescue mode, being lazy writing the whole process herein).

3. Wrong/incorrect configuration in the LVM environment causing a dracut related issues while booting the OS. This you can troubleshoot more using the Fedora Wiki at: http://fedoraproject.org/wiki/How_to_debug_Dracut_problems

4. If you have tried already the grub boot parameter enforcing=0 and that didn't do the trick, stop troubleshooting the selinux, it's not the faulty part and try the above options. If the above options won't solve the issue, then keep trying, the issue is somewhere down there…

5. 추가적으로 드물지만 부팅 시 필요한 파일들이 포함된 파티션의 파일시스템 문제로 발생할 수 도 있다.
(배드섹터나 파일시스템 문제로 인한 부팅시 중요한 파일(init 등)엑세스 문제 등..)

 

아래 2가지 사례를 통해 재현과 원인 분석을 해보자.

 

사례 1)

RHEL 6.6 버전의 OS를 부팅하는 과정에서 아래과 같이 커널패닉이 발생 함.

해당 메시지는 init 로딩 실패로 인한 커널 패닉 발생이다. 어떠한 이유로 로딩이 실패 되었는지 확인하기 위해 커널 옵션 2가지를 제거 후 부팅해 보도록 하자. 위 상태에서 시스템의 전원을 강제로 내렸다가 올려서 재부팅을 한다.

우선 부팅시 발생하는 메시지를 디테일하게 보기 위해 커널 옵션의 quiet와 rhgb를 제거해서 어떠한 부분으로 인해 문제가 발생을 했는지 확인해 본다. (quiet를 제거하면 더 많은 메시지를 출력함, rhgb제거는 부팅 프로그레스바를 제거함)

제거 방법은 아래와 같다.

1) 부팅 시 커널이 표시되는 카운트다운 화면에서 아무 키나 누른다.
2) GRUB 메뉴에서 기동 OS를 위, 아래 방향키로 선택하여 키보드의 e키를 누른다. (서버에 커널 버전이 하나만 있을 경우 하나만 표시됨)
3) kernel 행을 선택하고 키보드의 e키를 누른다.
4) 좌 방향키를 이용하여 좌측으로 커서를 이동하여 quiet와 rhgb 옵션을 찾아 제거하고 엔터를 입력
5) b를 입력해서 부팅을 한다.

이제 아래와 같이 출력이 된다.

 

SELinux policy 로드에 실패 했으니, kernel command line에 selinux=0 커널 옵션을 추가하여 selinux를 disable 한 상태로 부팅하라는 메시가 확인된다.

전원을 내리고 리부팅 한뒤 아래 커널 옵션을 추가하고 부팅한다. (추가 방법은 위 quiet, rhgb 옵션 제거 방법과 동일)

selinux=0

정상적으로 부팅이 될 것이다.

부팅 후 selinux config 파일을 확인해 보니 아래와 같다.

[root@satellite ~]# cat /etc/selinux/config | grep -v ^#
SELINUX=Enforcing
SELINUXTYPE=disabled

SELINUXTYPE=disabled  --> 이 부분이 잘 못 되었다. SELINUX 설정의 Enforcing 부분을 disabled 로 변경하는 과정에서 SELINUXTYPE 설정 부분을 건드려서 문제가 발생을 한 것이다. 

[root@satellite ~]# cat /etc/selinux/config | grep -v ^#
SELINUX=disabled
SELINUXTYPE=targeted

위와 같이 변경 후 다시 리부팅을 하자 시스템이 정상적으로 부팅된다.

 

사례 2)

RHEL 6.5 (커널 2.6.32-431.5.1 x86_64) 서버에 오라클 RAC 볼륨 증설을 위해 스토리지로부터 LUN을 할당 받고 재부팅을 하자 아래와 같이 부팅 시 init 인식 실패와 함께 부팅 불가 현상 발생이 발생한 사례가 있었다.

root 가 포함된 lvm 볼륨을 찾지 못 한다는 메시지와 함께 부팅 중 패닉 발생

분석을 위해 RHEL 6.x DVD로 rescue 모드 부팅을 한다.

 

1) root 파일시스템 마운트

- OS Disk의 /  파티션 마운트

bash-4.1 # chroot /mnt/sysimage

2) initramfs 파일리스트 확인

- 부팅시 램디스크 이미지가 lvm.conf 설정을 참조하는지 확인한다.

sh-4.1# cd /boot

sh-4.1# zcat initramfs-2.6.32-431.5.1.el6.x86_64.img | cpio -itv | grep lvm.conf
-rw-r--r-- 1 root root 58555 Mar 13 13:55 etc/lvm/lvm.conf

--> 포함되어 있는 것이 확인된다.

3) initramfs 압축 해제

- 임시로 사용 initramfs 파일을 /tmp 디렉토리에 복사하고 압축 해제

sh-4.1# cd /tmp
sh-4.1# mkdir /initramfs
sh-4.1# cp /boot/initramfs-2.6.32-431.5.1.el6.x86_64.img /tmp/initramfs
sh-4.1# zcat initramfs-2.6.32-431.5.1.el6.x86_64.img | cpio -id

4) lvm.conf 내용을 확인하고 문제 되는 부분 수정

- initramfs를 압축 해제 후 lvm.conf를 확인해야 부팅 시 적용되는 램디스크의 lvm.conf 값을 확인할 수 있다.
(/etc/lvm/lvm.conf 에도 설정되어 있지만 dracut을 통해 램디스크인 initramfs 파일에 적용되었는지 여부는 알 수 없기 때문이다.)

sh-4.1# cat etc/lvm/lvm.conf | grep -v \# | grep filter     (*주의: /tmp/initramfs/etc/lvm/lvm.conf 경로임)
    filter = ["a|/dev/emcpower.*|", "a/sda[1-9]$/", "r/sd.*/"]

sh-4.1# vi /etc/lvm/lvm.conf     (*주의: /etc/lvm/lvm.conf 경로임)
    #filter = ["a|/dev/emcpower.*|", "a/sda[1-9]$/", "r/sd.*/"]
    filter = ["a|/dev/emcpower.*|", "a/sda[1-9]$/"]

확인 결과 lvm 인식시 emc 스토리지 패스 및 sda1, sda2 … sda9 파티션을 제외한 sdX 디스크는 모두  필터링 하도록 설정이 되어 있다.

LVM과 EMC 외장스토리지를 사용하는 환경에서 emcpower path tool이 설치되어 운영되는 시스템의 lvm 관련 정보 출력시 볼륨 정보가 duplication 되는 것을 방지하기 위해 sda(OS Disk) 외의 sd* 장치를 필터링 한것으로 보인다.

따라서 "r/sd.*/" 부분을 없애고 dracut을 진행하여 램디스크 재생성. (* 재 생성전에 기존 initramfs 파일을 백업하고 진행한다.)

5) dracut 수행

- 수정된 lvm.conf를 initramfs에 반영한다.

sh-4.1# cd /boot
sh-4.1# dracut -f -v initramfs-2.6.32-431.5.1.el6.x86_64.img 2.6.32-431.5.1-el6.x86_64
(DVD로 부팅된 상태이기 때문에 위와 같이 dracut을 실행해줘야 한다. 그냥 dracut -f -v 만 하면 DVD로 부팅된 커널을 참조해서 RAM Disk(initramfs)를 작성하게 됨)

또한, 만약 아래처럼 일치 되지 않게 dracut을 수행하고 부팅하게 되면
# dracut -f -v initramfs-2.6.32-431.5.1.el6.x86_64.img 2.6.32-504-el6.x86_64

modules.dep 모듈을 로드할 수 없어서 FATAL: Could not load /lib/modules 메시지가 발생하며  조금 후 Kernel Panic이 발생한다.

 

6) 리부팅 후 디스크 확인

- 부팅이 정상적으로 되고, OS 디스크의 디바이스명을 확인해 본다.

[root@RHEL65 ~]# df | grep '/boot'
/dev/sdad1                        495844   67941    402303  15% /boot

[root@RHEL65 ~]# pvscan 
  PV /dev/sdad2   VG vg_rhel65   lvm2 [15.51 GiB / 0    free]

 

7) 원인

LUN이 새롭게 추가되었고 재부팅 중 기존엔 sda 였던 OS Disk의 장치명이 sdad 으로 변경되면서 initramfs에 포함된 lvm.conf filter 설정의 remove 장치에 속하면서 문제가 발생을 한 것으로 판단된다.

 

Kernel panic - not syncing: Attempted to kill init!
태그:                                     

Kernel panic - not syncing: Attempted to kill init!”에 대한 2개의 생각

  • 2017년 4월 7일 2:57 오후
    고유주소

    제가 지금 이거때문에 죽겠습니다 도와주세요

    응답
    • 2017년 4월 10일 11:03 오전
      고유주소

      구체적으로 뭘 도와 달라는건지..?

      응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다