2009년 5월 14일 목요일

한 번만 다른 커널로 부팅하고 부팅이 안되면 자동으로 원래 커널로 부팅

정상적으로 운영중인 서버에서 다른 커널로 부팅이 필요한 경우가 종종 있습니다.
특히, 커널 컴파일 후에는 리부팅이 반드시 필요하죠.
이 때, 특히 SATA 방식의 HDD 때문에 SATA 모듈이 올라오지 않아 커널 패닉으로 인해 부팅이 안되는 경우가 있습니다.
물론, 리부팅 후에 커널 패닉이 뜨더라도 다시 리부팅을 요청하면 되긴 합니다만...^^;;;
저 같은 경우에는 서버실에 서버를 올려놓고 OP 룸에서 이런저런 작업을 하다 커널 패닉이 뜨면 여간 귀찮을 수가 없습니다. ;;;
지문 찍고, 엘리베이터 타고 올라가서 윙윙 거리는 소음과 함께 콘솔을 붙여서 작업을 해야하기 때문이죠.

이럴 때 드는 생각은...

" 한 번만 다른 커널로 부팅하고 부팅이 안되면 자동으로 원래 커널로 부팅을 하게 할 수는 없을까? "

입니다.
위의 바램처럼 알아서 샤라락~ 되게 할 수 있습니다.

먼저 아래는 일반적인 grub.conf 의 설정입니다.

[root@localhost ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hda3
#          initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.26.5)
        root (hd0,0)
        kernel /vmlinuz-2.6.26.5 ro root=LABEL=/
        initrd /initrd-2.6.26.5.img
title CentOS (2.6.18-53.1.19.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.1.19.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-53.1.19.el5.img
title CentOS (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-53.el5.img

위에서 1번에 해당하는 2.6.19-53.1.19.el5 가 현재 운영중인... OS 설치시에 설정된 커널이고, 테스트를 위해 컴파일을 한 커널은 0 번인 2.6.26.5 입니다.

이제 한 번만 ! 테스트를 위한 커널인 2.6.26.5 커널로 부팅하도록 설정해 보겠습니다.

[root@localhost ~]# echo "savedefault --default=0 --once" | grub --batch

위의 커맨드를 입력하면 grub.conf 에서 0번에 설정된 2.6.26.5 커널로 한 번만! 부팅이 되도록 설정이 됩니다.

그 후에 grub.conf 를 아래와 같이 수정해 주면, 커널 패닉이 일어났을 경우 리부팅이 됩니다.

[root@localhost ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hda3
#          initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.26.5)
        root (hd0,0)
        kernel /vmlinuz-2.6.26.5 ro root=LABEL=/ panic=5
        initrd /initrd-2.6.26.5.img
title CentOS (2.6.18-53.1.19.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.1.19.el5 ro root=LABEL=/ panic=5
        initrd /initrd-2.6.18-53.1.19.el5.img
title CentOS (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ panic=5
        initrd /initrd-2.6.18-53.el5.img
[root@localhost ~]#

달라진게 보이시나요 ?
네 맞습니다. panic=5 라는 문구가 추가가 되었습니다.
이 panic=5 라는 문구는 커널 패닉시에 5초를 기다렸다가 리부팅을 하라는 문구입니다.

수정이 완료되었으면 리부팅을 합니다.

그러면...

1. 정상적으로 부팅이 되었을 경우
- 테스트를 위한 커널이 정상적으로 잘 부팅이 되었으므로, 나머지 작업을 하시면 됩니다.
default 커널로 사용을 하고자 하신다면 grub.conf 를 수정하시면 되겠죠 ?

2. 커널 패닉이 났을 경우...
- 5초 설정을 해두었으므로, 커널 패닉이 난 후 5초 뒤에 다시 리부팅을 시도하게 됩니다.
두 번째 부팅을 할 때에는 grub.conf 에 설정된 것처럼 1번 커널인 2.6.18-53.1.19.el5 로 부팅을 시도하게 되고 해당 커널은 지금까지 아주 잘~ 사용해왔던 커널이므로 아주 특별한 상황이 아닌이상 정상적으로 부팅이 잘 될 것입니다.
원래 커널로 다시 부팅이 되었다면 무엇 때문에 커널 패닉이 났는지 원인을 파악하고 다시 설정하셔야 겠죠 ?

어려운 내용은 아닌데 글로 적으려니 글이 상당히 길어지네요.

저에게만 유용한 팁이 아니길 기대합니다 ^^;;;

행복한 하루 되세요~

댓글 없음:

댓글 쓰기