2010년 1월 29일 금요일

GRUB의 fallback 기능 활용하기

원격으로 리눅스 서버의 커널을 업그레이드 할 경우 망설여지게 마련이다.
혹시라도 새 커널이 제대로 올라오지 않을경우 서버가 있는곳까지 가야하기 때문이다.
서버가 있는곳이 멀다면 낭패다.
lilo의 경우 lilo -R newkernel 로 안전하게 새로운 커널로 부팅해볼 수 있다.
하 지만 최근 추세는 lilo는 거의 사용하지 않고 GRUB을 많이 사용한다.
GRUB의 경우 fallback이라는 기능을 이용해서 새로운 커널로 테스트 부팅 할 수 있다.
여기서부터는 아래 사이트의 내용을 바탕으로 쓴 글이다.
http://www.gnu.org/software/grub/manual/html_node/Booting-fallback-systems.html
A, B, C 3개의 커널이 있다고 하자. A는 디폴트 커널이고 B는 안전하게 부팅 가능한 백업 커널이고 C는 B가 손상됐을 경우에 대비한 백업 커널이라 하자.
fallback 기능을 이용하기 위해서는 GRUB의 설정 파일을 다음과 같이 수정해야 한다.

default saved        # 이 부분이 중요!!!
timeout 10
fallback 1 2         # 이 부분이 중요!!!
   
title A
root (hd0,0)
kernel /kernel
savedefault fallback  # 이 부분이 중요!!!
title B
root (hd1,0)
kernel /kernel
savedefault fallback  # 이 부분이 중요!!!
title C
root (hd2,0)
kernel /kernel
savedefault

기존 설정과 다른 부분이 'default saved', 'fallback 1 2', 'savedefault fallback' 이렇게 3가지다.
default saved
보통 시스템이라면 default 부분이 숫자로 되어 있을것이다. 여기서는 saved로 바뀌었다. saved로 바뀌었을 경우 디폴트 부팅은
/boot/grub/default 라는 텍스트 파일에 기록된 숫자에 의해 결정된다.
fallback 1 2
처음 fallback은 1(B 커널) 다음 fallback은 2(C 커널)가 된다.
savedefault fallback
fallback에 설정된 커널로 디폴트 커널을 저장한다.
모든 설정이 완료 되었으면 grub-set-default 0 으로 디폴트 커널을 A으로 만들어 주자.
이제 재부팅을 하면 GRUB은 A 커널로 부팅을 시도한다. A 커널로 부팅을 시도하면 GRUB은 다음 부트 엔트리를 1(B 커널)로 설정한다.
GRUB이 A 커널을 읽어들이지 못할 경우 에러를 내면서 즉시 B 커널로 부팅을 시도한다.
만 약 A 커널로 부팅중 커널 패닉이 날 경우에는 2가지 방법이 있다. 하드웨어적으로 리셋을 시켜 주거나 GRUB 설정 파일에 panic=15
(15는 패닉이 났을 경우 15초 후에 재부팅을 한다는 말이다. 숫자는 자신에 원하는대로 바꿔주자)를 추가해준다. 이제 A 커널에서 커널패닉이
나면 15추 후에 재부팅된다는 메시지가 나오고 15초 후에 재부팅이 되면서 B커널로 부팅을 시도하게 된다.

title A
root (hd0,0)
kernel /kernel panic=15
savedefault fallback

A커널로 부팅하지 못해 B커널로 부팅을 했다고 하자. 이 경우 GRUB은 다음 부트 엔트리를 2(C 커널)로 설정한다. 앞에서와 마찬가지로
B 커널을 읽어들이지 못하면 C 커널로 부팅을 시도하게 된다.
A 커널의 문제를 바로잡았다면 grub-set-default 0으로 A 커널로 부팅되도록 한다.

앞에서 살펴본대로 fallback과 savedefault fallback에 의해서 GRUB은 항상 다음 부트 엔트리를 기록한다. 따라서 정상적으로 부팅이
되었다고 하더라도 다음 부팅은 fallback에 설정된 다른 커널로 시도하게 된다. 이제 A 커널에 문제가 없어서 항상 A 커널로 부팅을 원한다면
rc.local 파일에 grub-set-default 0을 추가해 준다.

CentOS일 경우 아래에서 처럼 직접 grub로 들어가서 default로 부팅 할 커널 인덱스를 넣는다. 뒤에 once옵션을 주어 한번만 부팅을 시도해본다, 만약 부팅에 문제 없으면 grub.conf에서 직접 default값을 1로 바꿔주면 되겠다.

# grub
grub> savedefault --default=1 --once
grub> quit

출처: http://www.gnu.org/software/grub/manual/html_node/Booting-fallback-systems.html

댓글 없음:

댓글 쓰기