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

리눅스부팅과정의 이해(전원ON부터 부팅완료까지의 과정이해)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스부팅과정의 이해(전원ON부터 부팅완료까지의 과정이해)







본 강의는 리눅스서버의 부팅과정이 어떻게 이루어지는가를 연구한 결과물에 대한 강좌이다.




























제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 박성수










리눅스부팅과정의 이해(전원ON부터 부팅완료까지의 과정이해)


리눅스를 부팅시킬때에 수많은 메시지들이 콘솔모니터를 지나갑니다. 우리는 흔히 "아! 부팅이 되는구나!!!"하고 그냥 부팅되는 그 순간들을 차마 따져보지 못한 채 무심코 흘려버리는 경우가 허다 했습니다. (물론, 그렇지 않은 분들도 많이 있겠죠. 필자의 경우, 처음에는 그러했었습니다. ) 하지만, 리눅스 콘솔로 뿌려지는 문자들 모두가 우리 서버관리자들에게는 소중한 정보를 주기위한 리눅스의 세심한 배려라는 것을 간과 해서는 안될 것입니다. 콘솔로 뿌려지는 모든 메시지들에는 그에 따른 이유가 있으며 친절하게도 리눅스는 자기의 주인에게 이런 메시지를 충실히 알리고 있는 것입니다. 시스템에 이상이 있다거나 비정상적일 경우에도 마찬가지입니다.


항상 그에 따른 메시지를 콘솔을 통해 알려주게 됩니다. 리눅스가 부팅이 되는 과정을 무심코 살펴보십시오. 어느것 하나 이유없는 문자들이 없습니다. 개인적인 견해로 필자는 이렇게 생각합니다. 부팅과정에서 콘솔로 뿌려지는 메시지들의 의미를 100% 이해한다면 리눅스의 80%는 이미 알아버린 것이라고 감히 말합니다. 모든 컴퓨터가 마찬가지겠지요.


필자는 부팅과정을 정확히 이해하는 것이 배우고자 하는 운영체제를 정복하는 지름길이 될 수 있음을 힘주어 강조합니다. 부팅과정을 정확히 이해해야하는 또다른 이유가 있습니다. 종종 리눅스는 "kernel panic"이나 "LILO에러"등으로 인해 정상적인 부팅이 되지않는 경우가 많습니다 이때 부팅프로세스를정확히 이해하고 있다면 정상 복구할 수 있는 내공이 몇십배는 증가됩니다. 여러분들의 내공을 키우려면 부팅과정을 정확히 이해하십시오.


이런 차원에서 필자는 여기 그 방법을 제공합니다.

부팅과정의 이해를 돕기위해 부팅 단계별로 설명을 했습니다.


부팅1단계. 리눅스서버의 전원이 들어옵니다.

부팅2단계. 메인보드에 있는 ROM-BIOS의 BIOS 프로그램이 실행 됩니다.

부팅3단계. ROM-BIOS에 의해 서버에 장착된 하드웨어가 인식됩니다. 이때 하드웨어(CPU, MEMORY등)의 물리적인 손상체크와 초기화가 병행하게 됩니다.

부팅4단계. 하드웨어의 체크 및 초기화가 끝나면 ROM-BIOS는 Boot Loader를 가지고 있는 부팅매체(DISK, CD-ROM, FLOOPY등)를 검색하게 됩니다.

부팅5단계. 검색된 부팅매체의 0번 섹터(대부분 MBR이라고 부름)에서 Boot Program을 읽어들여 메모리로 적재(로드, load)합니다.

이 Boot Program을 Boot Loader라고 하기도 하고 Boot Sector라고 부르기도합니다. 중요한 것은 이 Boot Program에 리눅스의 Boot Loader인 LILO(Linux Loader)가 들어 있다는 것입니다.


ROM-BIOS는 이 LILO를 메모리에 적재한 후에 모든 제어권을 LILO에 넘겨주고서 메모리에서 조용하 사라집니다. 이제부터는 LILO에 의해 서버의 모든 제어권이 이루어 집니다.


부팅6단계. LILO는 원하는 커널로 부팅을 하기 위해 다음과 같은 입력대기상태에 들어갑니다.

PIC2D2.gif

PIC2D3.gif

부팅7단계. 여기서 입력한 커널이미지로 LILO는 부팅을 시작하게됩니다.

만약 리눅스를 싱글유저모드(single user mode)로 부팅하려면 "linux single"이라고 하면 됩니다.

그리고 몇 개의 커널이 공존하는 서버라면 /etc/lilo.conf 파일에 다음의 예와 같 lilo설정이 되어있을 것입니다.

PIC2D4.gif

/etc/lilo.conf 파일에는 부팅가능한 LILO의 이미지들의 설정이 되어 있습니다. 아무런 입력이 없을 경우에는 default행에 설정되어 있는 이미지(여기서는 linux)로 부팅이 되고 만약 원하는 커널이미지로 부팅을 하려면 설정된 label이름(여기서는 linux, linux-up)을 입력하면 됩니다.


부팅8단계. LILO는 입력된 커널이미지를 메모리로 불러 들입니다.(적재, load)

부팅9단계. LILO에 의해 swapper라는 pid 0번인 프로세스가 실행이 됩니다.

부팅10단계. swapper라는 프로세스는 다시 pid 1인 init프로세스(/sbin/init)를 실행하게 됩니다. 즉, swapper가 init프로세스를 실행시키고 본연의 swapper로서의 기능을 수행하기 시작합니다.


부팅11단계. init 프로세스는 /etc/inittab 파일을 읽어들이게 됩니다.

/etc/inittab 파일의 예를 보면 다음과 같습니다.

PIC2D5.gif

여기서 한가지 주의깊게 보셔야하는 것이 있습니다.

즉 init 프로세스에 의해 읽혀지는 /etc/inittab파일의 내용중 아래와 같은 내용이 있다는 것을 보실수 있을 것입니다.

PIC2D6.gif

다시 설명 드리자면, /etc/inittab 파일의 실행되어야할 내용들 중 가장 먼저 실행이 되는 것은 /etc/rc.d/rc.sysinit 스크립트입니다.

위의 주석문처럼 rc.sysinit스크립트는 "시스템초기화"스크립트입니다

즉, 실행레벨과는 상관없이 시스템이 부팅이 되면 꼭 한번 실행이 되는 스크립트라고 이해 하시면 됩니다.


부팅12단계. init프로세스에 의해 rc.sysinit스크립트가 실행이 됩니다.

/etc/rc.d/rc.sysinit스크립트의 내용은 약 600행이 조금 넘습니다. 이 스크립트의 역할을 모두 설명할 수는 없지만 간략하게 설명해보면 다음과 같습니다.

- default path설정- /etc/sysconfig/network 파일의 실행- keymap loading- fsck 실행- /proc 파일시스템 mount- kernel module load- system clock 설정- system font load- /usr/sbin/netconfig 실행- /usr/sbin/timeconfig 실행- /usr/sbin/authconfig 실행- /usr/sbin/ntsysv 실행- utmp파일의 검사 및 생성- wtmp파일의 검사 및 생성- 기타 시스템 초기화에 필요한 작업들을 수행이 스크립트는 실행레벨과는 무관하게 부팅과 함께 일회만 실행이 되게됩니다.


부팅13단계. 실행레벨에 따라서 설정되어 있는 모든 프로세스들을 실행하게 됩니다.

보신 바와 같이 /etc/inittab파일에는 init가 현재의 실행레벨에서 실행되어야할 것에 대한 설정이 되어 있습니다.

PIC2D7.gif

예를 들면 다음과 같습니다.

부팅레벨이 0번이면
/etc/rc.d/rc0.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 1번이면
/etc/rc.d/rc1.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 2번이면
/etc/rc.d/rc2.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 3번이면
/etc/rc.d/rc3.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 4번이면
/etc/rc.d/rc4.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 5번이면
/etc/rc.d/rc5.d의 내용들을 순차적으로 실행시킵니다.
부팅레벨이 6번이면
/etc/rc.d/rc6.d의 내용들을 순차적으로 실행시킵니다.

이들 디렉토리에는 각 실행레벨에 따라 죽여야 할 프로세스들과 실행시켜야 할 프로세스들이 있습니다. 따라서 init 프로세스는 /etc/inittab 파일의 내용을 참조하여 실행레벨에 따라서 각 디렉토리의 프로세스들을 죽이거나 실행시키게 됩니다.

이런 이유로 하여 init프로세스는 모든 프로세스의 부모프로세스라고 하는 것입니다. 리눅스에서 실행되는 거의 모든 프로세스들은 init프로세스에 의해 실행(fork)되는 셈입니다.

6개의 실행레벨중 기본레벨인 3번레벨의 실행내용들을 간단히 살펴보면 다음과 같습니다

PIC2D8.gif

보는 바와같이 각 실행레벨마다 실행될 스크립트들은 모두 링크파일로 존재하여 실행 스크립트들은 모두 /etc/rc.d/init.d/ 디렉토리에 존재하고 있습니다. 이 링크에 의해 각 실행단계별로 필요한 프로세스들을 죽이기도 하고 실행시키기도 합니다.

K로 시작되는 스크립트는 해당스크립트를 종료하기위한 것이며, S로 시작되는 스크립트들은 실행을 하기위한 것입니다.

그리고 여기서 주의깊게 보셔야하는 것은 맨 마지막스크립트가 S99local 이라는 것입니다. 이 스크립트에 의해 /etc/rc.local 스크립트가 수행됩니다.



부팅14단계. /etc/rc.d/rc.local 스크립트수행

아래 예를 보시는 바와같이 이 스크립트의 역할은 로그인 전에 /etc/redhat-release 파일과 /etc/issue 파일의 초기화를 시킵니다.

참고로 /etc/issue파일은 초기화된 그대로 존재하는 것이 아니라 uname 에 의해 생성되는 내용대로 리부팅이 될 때마다 새로이 생성된다는 점입니다.

PIC2D9.gif

만약, 사용자들이 리눅스서버에 새로 설치한 툴이나 프로그램을 매번 부팅때마다 자동으로 실행되도록 하려면 이 파일의 맨 마지막에 원하는 실행명령을 넣어두시면 됩니다.

/etc/rc.d/rc.local파일의 주된 용도는 실제로 이런 용도임을 이해하시기 바랍니다.

/etc/motd, /etc/issue, /etc/issue.net, /etc/redhat-release 파일 참고

부팅15단계. /sbin/update가 실행이 됩니다.

/etc/inittab 파일의 내용중 실행레벨과는 무관하게 실행되는 것입니다.

update의 man page를 보면 다음과 같이 정의되어 있습니다.

PIC2DA.gif

즉, bdflush라는 데몬이 실행되어 버퍼를 청소하는 역할을 한다고 되어 있습니다.


부팅16단계. Ctrl+Alt+Del키의 실행설정

PIC2DB.gif

이 설정은 사용자기 Ctrl키와 Alt키 그리고 Delete키를 동시에 눌렀을 때 실행될 내용을 정의해 둔 것입니다. 즉 이 세키를 동시에 눌렀을 때에는 /sbin/shutdown이 실행되게 되어 있습니다.


부팅17단계. 로그인을 위해 /sbin/mingetty를 실행합니다.

PIC2DC.gif

/etc/inittab 파일의 맨 마지막부분에는 실행레벨이 2,3,4,5일 경우에 콘솔로 로그인하기위해 /sbin/mingetty를 실행하게됩니다.

이 설정으로 인하여 콘솔로그인창이 다음과 같이 나오게 됩니다.

PIC2DD.gif

이상과 같이 리눅스 부팅과정을 살펴 보았습니다.  중요한 것은 리눅스서버의 부팅이 어떤 순서에 의해 어떤 파일 및 스크립트들이 실행이 되고 이에 따라서 실행되는 프로세스들의 역할을 이해하는 것이 중요합니다.


관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  119 명