Skip to content

리눅스 전원부터 부팅이 되기까지의 과정이해

조회 수 57456 추천 수 0 2008.11.11 07:34:04



 

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

2. 메인보드에 있는 ROM-BIOS가 실행이 됩니다.

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

4. 하드웨어의 체크 및 초기화가 끝나면 ROM-BIOS는 부팅매체(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는 원하는 커널로 부팅을 하기위해 다음과 같은 입력대기상태에 들어갑니다.

 

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

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

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

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

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

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

10. swapper라는 프로세스는 다시 pid 1인 init프로세스(/sbin/init)를 실행하게 됩니다.

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

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

 

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

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

다시설명드리자면, /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가 현재의 실행레벨에서 실행되어야할 것에 대한 설정이 되어 있습니다.

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

부팅레벨이 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번레벨의 실행내용들을 간단히 살펴보면 다음과 같습니다

보는 바와같이 각 실행레벨마다 실행될 스크립트들은 모두 링크파일로 존재하여 실해 스크립트들은 모두 /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 에 의해 생성되는 내용대로 리부팅이 될 때마다 새로이 생성된다는 점입니다.

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

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

 

15. /sbin/update가 실행이 됩니다.

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

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

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

 

16. Ctrl+Alt+Del키의 실행설정

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

 

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

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

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

 

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

 


profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/702/80f/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
367 linux daemon (리눅스 데몬 설명) ADMINPLAY 2014-02-26 647764
366 대용량 HDD 파티셔닝(Mass storage Partitioning) (GPT 파... ADMINPLAY 2010-04-14 73476
365 FFMPEG를 가장쉽게 설치하는 방법(ffmpeg-php 등) ADMINPLAY 2010-05-03 66245
364 rrdtool 컴파일시 에러 configure: error: Please fix the... ADMINPLAY 2009-08-08 64600
363 커널 2.6으로 업그레이드!「A to Z」 ADMINPLAY 2009-08-08 64250
362 e2fsck - 파일 시스템 복구 및 검사. - fsck file ADMINPLAY 2010-09-12 60903
361 배치파일을 이용한 백업방법 l2zeo 2010-03-31 59533
360 Maskrading ADMIN 2008-11-11 58620
359 시스템 백업과 응급 복구 ADMINPLAY 2009-05-11 58580
» 리눅스 전원부터 부팅이 되기까지의 과정이해 ADMIN 2008-11-11 57456
357 리눅스 디렉토리 구조와 파티션 관리의 기본 ADMINPLAY 2009-05-22 57404
356 hdparm 세부옵션 ADMINPLAY 2012-01-16 54966
355 CentOS 설치 - VMware 상에서 CentOS 설치하기 file l2zeo 2010-02-24 52101
354 Red Hat Linux 9 ADMINPLAY 2009-09-24 51551
353 Dell OMSA 설치 및 이용방법 ADMINPLAY 2014-08-13 49636
352 2TB이상의 Disk를 사용한 Raid6 구성 ADMINPLAY 2015-08-08 46047
351 sulinux 1.0. 서버 패키지 리스트 ADMINPLAY 2011-04-30 45482
350 ORA-01031: insufficient privileges 오류 ADMINPLAY 2010-02-24 41013
349 [APM] 리눅스에서 Apache, PHP, MySQL 등 제거 방법 ADMINPLAY 2009-06-29 39388
348 AIX 필수 명령어 ADMINPLAY 2009-12-10 39118

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234