강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

시스템 부팅에 관한 모든것

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

공개SW리뷰 4편


제목 : 시스템 부팅에 관한 모든것





ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 서버관리팀


ㅇ SULINUX  홈페이지 : www.sulinux.net

ㅇ 리눅스포털 홈페이지 : www.superuser.co.kr




























시스템 부팅화면 익히기


이번 장에서는 SULinux의 로긴 화면이 나올 때까지 어떠한 부팅 과정으로 진행되는지를 살펴보도록 하겠다. 이는 SULinux 시스템이 어떻게 부팅이 되는지에 대해 개괄적 이해와 더불어 좀더 친숙한 리눅스를 만나기 위해서이다.


1. 부트로더 부팅 화면(GRUB )


부트로더란 시스템 부팅시 여러개의 운영체제중 하나의 운영체제를 선택하여 부팅 할수 있도록 도와주는 도구이다. 예를 들면 현재 시스템에 윈도우와 리눅스가 같이 설치되어 있다면, 시스템에 전원을 넣고 부팅할 경우 제일 먼저 부트로더 화면에서 윈도우와 리눅스 중 어떤 OS로 부팅 할 것인가를 선택하도록 도와주는 역할을 한다.


PIC416.gif

[그림] SULinux의 부터로드


SULinux가 설치된 시스템에 전원을 넣어면 제일 먼저 부트로더라는 GRUB 화면을 보게 된다. SULinux의 부터로드는 화면이 나타난후 5초동안 아무런 키보드 입력이 없으면 다른 운영체게가 설치되어 있더라도 다른 OS를 선택할 수 있는 멀티부팅 메뉴가 나오질 않고 곧바로 SULinux로 부팅이 이뤄집니다. 따라서 멀티부팅 메뉴을 보고 싶다면 자판의 아무런 키를 한번만 눌러보면 멀티부팅 메뉴를 만날 수 있게 될 것이다.

2. 부터로더 부팅 메뉴 화면


PIC417.gif

[그림] 멀티부트 메뉴


위 그림 “SULinux의 부터로드”와 “멀티부트 메뉴”는 부트로드 화면이면, 부트로드를 위한 여러가지 도구중 GRUB라 불리는 부트로드 도구이다.


위 그림 “SULinux의 부터로드” 화면에서 부팅하고자 하는 운영체제를 방향키로 선택하여 Enter키를 치며 해당 운영체제로 부팅이 이뤄집니다. 하지만 그림 “멀티부트 메뉴”은 단일 OS만 설치 되어있기 때문에 다른 OS로의 부팅이 불가능하다. 만약 SULinux의 커널 업데이트를 진행한다면 위의 메뉴에는 커널 버전별 선택 메뉴가 생겨 다른 커널로도 부팅이 가능하게 될 것이다.


GRUB의 멀티부트메뉴에서 운영체제를 선택한 후 키보드의 ‘e’ 버튼을 누르면 부팅 정보를 수정할 수도 있다. 그럼 GRUB에 관해 더 자세히 살펴보도록 하겠다. (GRUB이란 GRand Unified Boot-loader의 약자로 lilo와 같은 부트 매니저 도구이다.)


1. GRUB 부트 화면


기본적으로 GRUB 부트 화면은 위 그림 “SULinux의 부터로드”와 같이 제공되며, 아무키나 한번 입력 후에는 그림“멀티부트 메뉴”와 같이 멀티부트 메뉴를 볼수 있다. 멀티부트 메뉴에서는 키보드의 상/하 방향키로 부팅하고자하는 메뉴를 선택한 후 [RETURN]키를 입력하여 부팅하고자하는 OS로 부팅을 진행할 수 있다. 또한 GRUB은 여러 형태의 모드를 제공한다.

2. GRUB의 모드


GRUB의 멀티부트 메뉴 화면에서 [a], [c], [e] 키를 누르면 각각의 모드로 진입 할 수 있다. 각 모드에 관해 더 자세히 살펴보도록 하자


[a]를 입력한 모드는 kernel의 파라미터를 추가할 수 있게 하는 모드이다. 예를 들면 kernel /boot/vmlinuz-2.6.9-36 ro root=LABEL=/ 라는 부분이 있을 경우 [a]키를 누르면 ro root=LABEL=/ 이후 부분을 편집할 수 있게 된다. 이는 시스템에 장애가 발생하여 단일 사용자 모드(single)로 들어가야 할 경우가 발생할때 커널 파라미터 맨 뒤에 single이라고 입력하고 단일 사용자 모드로 진입 할 수가 있다.


[e]모드는 멀티부트 메뉴의 리스트 항목을 직접 편집 할 수 있도록 도와 준다. 간혹 [a]키를 눌러 단일 사용자 모드(single) 진입할 경우 커널패닉 현상이 발생할 수 있다. 이와 같은 경우 [e]모드에서 vmlinuz-2.6.9-36라는 뒤에 single 이라고 추가하고 부팅하면 단일 사용자 모드(single)로 안전하게 진입할 수 있게 된다.


편집모드에서 지원하는 키

e : 해당 라인을 편집한다.       d : 해당 라인을 삭제한다.

o : 명령 라인을 추가한다.       b : 부팅을 시작한다.


[단일 사용자 모드(single) 접근방법]


멀티부트메뉴에서 'e'를 입력하면 전체 내용을 볼수 있다. 키보드의 방향키로 아래의 내용이 나오는 부분으로 이동한다.

'kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773' 이렇게 적혀있는 라인에서 키보드의 'e'를 입력하면 해당 줄의 수정이 가능하게 되며, 줄의 맨끝에 'single'이라는 값을 추가 입력한 뒤에 엔터하자 그럼 'kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773 single' 이라고 되겠죠? 이상태에서 키보드의 'b'를 입력하면 단일 사용자 모드로 부팅이 된다.


[e]모드에서 메뉴를 편집한다고 해서 다음번 부팅시에도 적용되는 것이 아니라 현재부팅시에만 일시적으로 적용받는 것이며, 또한 편집이 잘못 되었을 경우에 [ESC]키를 눌러 원래값으로 초기화되게 되어 있다.


[c]모드는 상호대화식 모드이다. grub 설정이 잘못 되어 있는 경우 직접 부팅관련 명령어를 입력하며 부팅할 수 있도록 도와준다. 명령어는 Bash shell과 유사한 명령행 자동완성기능을 사용할 수 있으며  또한 [ESC]키를사용하여 실행한 명령어를 취소 있도록 설계되어 있다. 이는 전문가가 아니면 사용이 힘든 부분이므로 주의를 요한다.


사용 예 SULinux로 부팅하기

   grub> help

   grub> cat /grub/grub.conf

   grub> root (hd0,0)

   Filesystem type is ext2fs, partition type 0x83

   grub> kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773

   [Linux-bzImage, setup=0x1400, size=0x11154a]

   grub> initrd /initrd-2.6.9-34.EL.img

   [Linux-initrd @ 0xffcb000, 0x20096 bytes]

   grub> boot



3. 정상 부팅후 GRUB 설정


grub의 환경설정을 담고 있는 파일은 /boot/grub/grub.conf 이다. 대부분의 시스템 환경설정 파일들은 /etc 라는 디렉토리에 위치해 있지만  grub는 boot에 관련 되는 부분이므로 /boot/grub라는 디렉토리에 존재하게 된다.


기본 구성의 예


default=1

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title SULinux (2.6.9-34.EL)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773

        initrd /initrd-2.6.9-34.EL.img


설명


① default=1

기본값으로 부팅되도록 설정하는 부분이다. grub 선택화면에서 특별히 선택하지 않으면 여기에 설정되어진 값에 해당하는 운영체제를 로딩한다. 현재 설정인 1값은 아래 항목중에서 제일 먼저 설정되어 있는 운영체제를 말한다.


② timeout=5

grub 부트화면에서의 대기시간이다. 단위는 초이다. 현재 설정은 5초간 선택이 없으면 default에 설정된 값으로 부팅된다.


③ splashimage=(hd0,0)/grub/splash.xpm.gz

부트 화면의 배경이미지를 지정하는 부분이다. xpm형태의 그림이미지를 압축한 xpm.gz파일을 사용한다. (hd0,0)의 뜻은 /dev/hda1라는 뜻이다.


※ 참고. 리눅스 디바이스 와 grub 디바이스와의 관계

1. 기본관계

  /dev/fd0 : (fd0)

  /dev/hda : (hd0) 설명 : SCSI 하드디스크인 경우에 첫번째 물리적인

              디스크도 이 값에 해당한다.

  /dev/hdb : (hd1)

 

2. 사용예

  /dev/hda1 : (hd0,0)

  /dev/hda4 : (hd0,3)


④ title SULinux (2.6.9-34.EL)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773

        initrd /initrd-2.6.9-34.EL.img

-. title SULinux (2.6.9-34.EL) : 부트_엔트리_설명

-. root (hd0,0) : root (하드디스크 디바이스명, 부트 파티션명)

-. kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773 : kernel /커널이미지경로 ro root=루트 디바이스명 vga=지원하는 그래픽해상도

-. initrd /initrd-2.6.9-34.EL.img : initrd /초기화에 필요한 이미지 경로(초기화 Ram Disk Loader)


windowns가 설치되어 있을 경우

만약 windowns와 같이 설치된 시스템이라면 아래와 유사한 설정이 추가 되어 있을 것 이다.


title Windowns

        rootnoverify (hd0,1)

        chainloader +1


-. title Windowns : 부트_엔트리_설명

-. rootnoverify (hd0,1) : rootnoverify (윈도우가 설치되어 있는 하드디스크 디바이스명, 파티션명)

-. chainloader +1 : 윈도우 운영체제는 chains-load에 의해서 부팅되는데 이것에 관한 설정이다.


4. GRUB 비밀번호 설정하기


GRUB를 통해 누군가 단일 사용자모드로 진입한다면 시스템에 아주 치명적일 수 있다. 따라서 GRUB에 비밀번호를 걸어두면다면 리부팅후 아무나 시스템에 접근하는 것을 막을수 있다. 원격지 서버로 사용할 경우 특히 주의를 요하는 설정이다.

리부팅후 grub에서 비밀번호를 물어보는 단계를 달리 설정할수 있다. 이는 비밀번호에 관련 설정 명령어의 위치가 설정 파일(grub.conf)내 어떤 곳에 존재하는가에 따라 달라집니다.

부팅후 무조건 grub화면에서 비밀번호를 물어보게 할 수도 있으며, 단일 사용자 모드 진입시에만 비밀번호를 물어볼수 있게도 할 수 있다.


그럼 지금부터 직접 설정해보도록 하겠다. 먼저 root 계정으로 로긴후 grub라는 명령을 내리며, 다음과 같이 grub 프롬프트가 나타난다.


grub>


이렇게 프롬프트가 변경되면 md5crypt 라는 명령어로 비밀번호를 입력하여 특수한 문자의 비밀번호를 만들어냅니다.


grub> md5crypt

Password: ********

Encrypted: $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0


위의 예제와 같이 생성된 비밀번호를 복사하여 /boot/grub/grub.conf 파일에 적당한 위치에 아래와 같은 명령어로 삽입한다.


password --md5 $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0


삽입시 주의할 점은 앞에서도 설명드린것 처럼 삽입위치에 따라 비밀번호를 물어보는 시기가 달라지므로 원격서버를 관리하시는 관리분께서는 반드시 주의하면 된다.


부팅시 무조건 패스워드를 입력하고 부팅하려는 경우의 설정의 예는 아래와 같다.


default=1

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title SULinux (2.6.9-34.EL)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773

        initrd /initrd-2.6.9-34.EL.img

        password --md5 $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0


단일 사용자 모드 진입시 비밀번호를 입력하고 부팅하려는 경우의 설정의 예는 아래와 같다.


default=1

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

password --md5 $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0

hiddenmenu

title SULinux (2.6.9-34.EL)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-34.EL ro root=LABEL=/ vga=773

        initrd /initrd-2.6.9-34.EL.img

3. 커널 부팅 메시지


PIC418.gif

[그림 ] 커널 부팅 과정


리눅스 부팅이 이뤄질 때 제일 먼저 작동하는 것이 커널(Kernel)이며, 이 커널에 의해서 리눅스 시스템의 모든 것이 동작된다. 커널에 의해서 하드웨어거 인식되어 작동하게 되는데, SULinux는 커널 2.6을 기반으로 동작하며, SULinux의 커널 부팅의 특징은 맨위 상단에 펭퀸이 앉아있다는것이다. 이는 CPU의 개수를 보여주는 것으로 CPU의 개수에 따라 펭퀸의 개수도 달라집니다.

4. 시스템 초기화 과정


PIC419.gif

[그림 ] 서비스 부팅 과정


위 그림은 init라는 프로그램에 의해서 여러 종류의 서비스가 활성화되고 있는 과정이다. 이러한 과정을 시스템 초기화 과정이라고 부릅니다. 시스템 초기화는 각 실행단계(runlevel)에 따라 하드웨어와 시스템 그리고 네트워크 서비스 등을 활성화한다.


활성화시 성공일 경우는 [OK]라는 표시를 하고 실패할 경우[Fault]라고 표시해서 보여준다.

4-1. 런레벨과 시스템 부팅


런레벨


런레벨과 시스템이 구동되는 구조에 관하여 설명을 한다. 유닉스 계열 운영체제에는 런 레벨이라는 시스템 동작 모드가 있다. 일반적으로 리눅스는 7개의 런레벨이 있다. 각 단계별 동작에 관해 알아보겠습니다.


런레벨

설    명

런레벨 0

시스템 정지 상태인 런레벨 이다. 시스템을 종료할 때 init 프로세스에게 런 레벨0으로 전환한다는 사실을 알리고 안전하게 정지하기 위한 처리가 진행된다.

런레벨 1

싱글 사용자 모드이다. 관리자 한 사람만 사용하는 모드이다. 시스템 관리와 같은 특별한 상황에서 사용한다. 또한, 부트 커널 파라미터에 single을 지정하고 싱글 사용자 모드로 구동하는 것도 가능한다. 로그인 프로세스가 없기 때문에 root패스워드를 잊은 경우에도 사용된다.

런레벨 2

런레벨 3

텍스트 로그인 멀티 사용자 모드이다. 로그인 프로세스를 거쳐 멀티 사용자 상태로 사용한다. SULinux에서는 기본 런레벨3으로 부팅된다. (단, 런 레벨 2는 네트워크 관련 서비스가 지원되지 않는다.)

런레벨 4

배포판마다 다른 설정이 되어 있다. 특별히 사용하지 않는 경우가 많습니다.

런레벨 5

그래픽 로그인 멀티 사용자 모드이다. X Window System으로 로그인하는 것 외에는 런 레벨 3과 같다.

런레벨 6

시스템의 리부팅시키도록 정의된 런 레벨 이다. 런 레벨 0과 같이 안전하게 리부트하기 위한 처리가 진행된다.


런레벨 설정 파일은 /etc/inittab이고 파일내부의 "id:3:initdefault:" 라고 설정되어있는 부분의 3이 런레벨 3으로 부팅하도록 설정한것이다.


id:3:initdefault: 설정의 형식은 id:런레벨:action:process 이다.


커널 부트의 마지막 단계에서 /sbin/init이 실행된다. init은 제어 파일 /etc/inittab에서 디폴트 런레벨을 점검하고 필요한 프로세스를 모두 실행한다. init은 지정된 모든 프로세스를 실행한 후에 대기모드로 빠져 대기상태로 데몬이 실행 되어있게 된다.(init의 PID(Process ID)는 1이다)

시스템 구동시 모든 런레벨에서 실행되는 파일은 모두 셸스크립트라는 간단한 프로그램이다. 이 셀스크립트는 경로 설정이나 네트워크 환경 점검, 파일 시스템 점검, 스왑 파일 시스템 활성화, 필요한 모듈 로드, 필요한 파일 시스템 마운트 등에 대한 사항이 설정되어 있고, 해당 설정내용에 따라 실행되게 된다.


/etc/inittab 파일내용의 간략한 설명

si::sysinit:/etc/rc.d/rc.sysinit

init 프로세스가 가장 먼저 실행시키는 명령이다.

시스템초기화시 단 한번 실행되는 초기화 스크립트이다.

 

l3:3:wait:/etc/rc.d/rc 3

각 런레벨 별로 지정된 시작 스크립트를 나타냅니다.

각 실행레벨에 대해서 어떠한 명령을 수행할 것인지를 지정하는 것이다. 각 런레벨별로 지정된 스크립트는 그 실행이 종료될 때까지는 init프로세스가 진행하지 않고, 대기하라는 의미의 wait키워드가 지정되어 있다.

 

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

ctrl+alt+del키를 누를 때 실행하는 명령이다. 현재 설정은 3초후에 재부팅하게 되어있다.

 

3:2345:respawn:/sbin/mingetty tty3

가상 콘솔에 대한 설정부분으로 1번부터 6번까지 6개의 가상콘솔이 기본으로 설정되어 있다. 1번콘솔은 실행레벨이 12345에서 실행되도록 하고, 나머지 콘솔은 2345에서 실행되도록 설정이 되어있다.


런레벨 3인 경우에 대해 확인한다.

/etc/rc.d/rc3.d/ 디렉토리 아래에는 다음과 같은 파일이 있다.


PIC41A.gif

[그림] /etc/rc.d/rc3.d의 모습


/etc/rc.d/rc3.d 디렉토리에 있는 파일은 모두 /etc/rc.d/init.d/ 디렉토리 아래에 있는 각 스크립트의 심볼릭 링크이다. 다른 런레벨 디렉토리 아래의 각 파일도 동일한다. 즉 실제 존재하는 파일은 /etc/rc.d/init.d/ 디렉토리 아래의 파일이다.


S로 시작되는 파일 중 두자릿수의 숫자가 작은 순서부터 서비스가 시작된다. K로 시작되는 파일은 시스템이 종료될때 먼저 종료되는 서비스들이다. 그리고 여기에 존재하지 않는 서비스는 부팅시 동작되지 않는다.


4-2. 시스템 구동시 서비스 시작하기


실행 스크립트를 이용해서 서비스를 실행하면 시스템을 재시작하거나 런 레벨을 전환하면 원래 설정으로 돌아옵니다. 원래 설정을 변경하여 시스템을 구동하거나 런레벨을 전환하더라도 서비스를 유효하게 하는 chkconfig 명령어 및 ntsysv를 설명한다. 이 명령어들은 root권한으로만 실행 가능하다.


chkconfig 사용법


chkconfig [옵션] [서비스명]


옵션명

--list [서비스명]

설 명

 지정한 서비스 설정 상태를 표시. 서비스 이름을 지정하지 않으면 모든 서비스 설정 상태를 확인 할 수 있다.

예 제

# chkconfig --list portmap

옵션명

--add [서비스명]

설 명

 지정한 서비스를 유효하게 한다. 런레벨은 실행 스크립트 안의 정의에 따른다.

예 제

# chkconfig --add mysqld

옵션명

--del [서비스명]

설 명

 지정한 서비스에 대한 /etc/rcn.d 디렉토리 아래의 심볼릭 링크를 삭제한다. 즉 구동 시나 런레벨 전환시에 시작되지 않는다.

예 제

 

옵션명

--level [런레벨] 서비스명 [on|off]

설 명

 [런레벨]로 실행 또는 [런레벨]로 전환할 때, 지정한 서비스를 실행(on), 정지(off) 여부를 설정한다.

예 제

# chkconfig --level 5 portmap on


ntsysv 사용법


root 계정으로 ntsysv를 실행한다. 그럼 다음과 같은 화면을 보실 수 있다.


PIC41B.gif

[그림] ntsysv 실행화면

5. 로그인 화면


PIC41C.gif


콘솔 로그인 화면이 나오면 시스템이 완전히 부팅이 되어 사용자와 대화를 할 준비를 하게 된다. 콘솔에서 로그인하는 과정을 알아보기 전에 로그인 화면에 있는 메시지에 대해서 알아보자.


SULinux release 1.0 (Server)" 메시지는 현재 설치되어 있는 리눅스 시스템이 SULinux 1.0 서버버전의 배포판으로 설치되었다는 것을 말해주는 것이다.


Kernel 2.6.9-22.0.2.EL on an i686"은 SULinux의 커널 버전이 2.6.9-22.0.2.EL 버전이라는 것을 의미하고, i686은 SULinux가 설치된 시스템의 CPU 종류를 나타내는 것으로 아키텍처에 따라 i386, i486, i586, i686 등으로 표시될 수 있다.


localhost"는 여러분의 리눅스 컴퓨터 이름을 의미하는 것으로, 리눅스 설치 과정 중 TCP/IP 네트워크 설정에서 호스트 이름을 지정하지 않았다면 기본 호스트 이름인 localhost로 나타나며, 호스트 이름을 설정하였다면 지정한 호스트 이름으로 나타납니다. 컴퓨터 이름을 변경(호스트 네임 변경)하는 것에 대해서는 잠시 후에 살펴 볼 프롬프트 구조에서 알아보겠습니다.


SULinux의 부팅은 지금까지 살펴본 과정대로 진행되며, SULinux 시스템을 사용할 수 있도록 로그인 화면이 나오는데 이는 리눅스가 다중 사용자 환경이라는 특성으로 로그인이 요구되는 것이다. 로그인에 관한 것도 잠시후 자세히 살펴보도록 하자.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,031 명
  • 현재 강좌수 :  35,769 개
  • 현재 접속자 :  85 명