노무현 대통령 배너


2007. 6. 20. 18:06

솔라리스 부팅 과정 - 2

솔라리스의 부팅

2.1. 솔라리스 부팅의 개요

솔라리스는 다음과 같은 네 단계를 거쳐 부팅이 수행된다. 일단 BIOS 단계에서 시스템의 하드웨어적인 이상유무를 판단하고, MBR을 읽어 들이고, 커널을 인식시킨 후에 init 프로세서를 통해 부팅을 마무리 하게 된다. 그럼 각 과정에 대해 조금 더 깊이 들어가 보자.

2.2. BIOS 단계

시스템의 전원을 켰을 때 BIOS 는 시스템에 H/W와 메모리를 검사하기 위해 Self-test를 실시한다. 에러가 발견되지 않았을 경우, BIOS는 첫번째 부트 섹터(MBR)에 저장된 mboot를 메모리에 적재하고 수행한다.

2.3. boot program 단계

mboot는 활성화(active)된 파티션을 찾아서, pboot를 메모리에 적재하고 수행시킨다. 그리고 pboot는 디스크 안에 있는 secondary boot program을 메모리에 적재하기 위한 primary boot proram인 bootblk을 메모리에 적재한다. 기본적으로 파란 화면에서 10초간 기다리도록 설정되어 있는데, 부팅 가능한 파티션이 여러 개라면 이 화면에서 선택하여 부팅을 할 수 있다. Bootblk는 secondary boot program 인 boot.bin 이나 ufsboot 를 찾아 수행하는데, boot.bin 이나 ufsboot는 /etc/bootrc 스크립트를 수행하기 위해 command interpreter를 시작한다.

2.4. 커널 인식 단계

core kernel 이 메모리에 올라온 이후 자신의 데이터 구조를 초기화하고, 모듈들을 메모리에 적재한다. 필요한 모듈을 불러온 이후에 커널은 /sbin/init 프로그램을 수행한다.

2.5. init 단계

커널에서 init 를 호출한 이후부터는 init 프로세스가 /etc/inittab 파일의 내용을 바탕으로 마지막 부팅 작업을 하기 시작한다.
각 run level 별로 수행되는 디렉토리와 파일을 알아보고, 특히 우리가 일반적으로 사용하는 run level 3 이 수행되는 경우에 대해서 심층있게 알아보도록 하자.
/etc/ 디렉토리 아래에는 다음과 같은 파일들이 존재하는데 그림으로 알아보도록 하자.

run level 들이 명시되어 있는 파일인 /etc/inittab 파일을 조금만 살펴 보도록 하자.

sS:s:wait:/sbin/rcS                     >/dev/msglog 2<>/dev/msglogs0:0:wait:/sbin/rc0                     >/dev/msglog 2<>/dev/msglogs1:1:respawn:/sbin/rc1                  >/dev/msglog 2<>/dev/msglogs2:23:wait:/sbin/rc2                    >/dev/msglog 2<>/dev/msglogs3:3:wait:/sbin/rc3                     >/dev/msglog 2<>/dev/msglogs5:5:wait:/sbin/rc5                     >/dev/msglog 2<>/dev/msglogs6:6:wait:/sbin/rc6                     >/dev/msglog 2<>/dev/msglog

위의 내용은 /etc/inittab 파일의 중간 부분을 발췌한 것이다. 눈치가 빠른 사람은 금방 알아챘겠지만, s3로 시작하는 부분이 run level 3일 경우에 관련된 부분이다. 따라서 run level 3일 경우에 /sbin/rc3를 실행하게 된다.
물론 inittab 파일 안에 보면 전후에 실행되는 default 필드들이 있으나 여기서는 생략하도록 하겠다.

그럼 /sbin/rc3 파일을 살펴보도록 하자.

if [ -d /etc/rc3.d ]; then        for f in /etc/rc3.d/K*; do                if [ -s $f ]; then                        case $f in                                *.sh)   .        $f ;;                                *)      /sbin/sh $f stop ;;                        esac                fi        done        for f in /etc/rc3.d/S*; do                if [ -s $f ]; then                        case $f in                                *.sh)   .        $f ;;                                *)      /sbin/sh $f start ;;                        esac                fi        donefi

위의 파일 역시 중간 부분을 발췌하였다. 이 부분은 /etc/rc3.d 디렉토리의 여러 데몬들을 구동시키는 스크립트인데, 보는 바와 같이 /etc/rc3.d 디렉토리의 파일들 중에 S로 시작하는 파일에는 start 인수를 넘겨서 시작하도록 하고, K로 시작하는 파일들은 stop 인수를 넘긴다. 한번 자신의 /etc/rc3.d 디렉토리를 살펴보고 파일명을 살펴보도록 하자.

2.6. run level 바꾸기

run level 을 바꾸는 방법에는 여러가지가 있다. 그 중에 유용하게 쓰이는 init 명령을 살펴보도록 하자.
지금 우리가 디스크에 문제가 생겨서, single-user mode 로 부팅을 했다고 가정하자. 문제를 해결하고 원래대로 부팅을 하고 싶은데 우리는 reboot 작업을 거쳐야 할까? 물론 아니다. 다음과 같이 명령을 내리면 된다.

# init 3

위의 명령으로 run level 3로 들어가게 할 수 있다.
숫자 부분에 올 수 있는 인수로는 0, 1, 2, 3, 4, 5, 6, s 가 있다.

'Unix, Solaris' 카테고리의 다른 글

사용자 계정관리  (0) 2007.06.20
디스크 관리-1  (0) 2007.06.20
솔라리스 부팅과정 - 1  (0) 2007.06.20
솔라리스 명령어-3  (0) 2007.06.20
솔라리스 명령어-2  (0) 2007.06.20