Linux

리눅스 부팅 과정

욕정의노예 2009. 6. 14. 01:00

1. 부팅과정 이해

1. Power On  
      ↓
2. ROM BIOS 에서 지정된 부트 드라이브로 부팅 시작
      ↓
3. 부트 드라이브의 첫번째 섹터인 부트섹터(MBR)를 읽어들임 ---- 여기까지 하드웨어적인 요소(?) 인듯(?) ㅋ
      ↓
4. 부트섹터의 부팅 프로그램인 GRUB 작동
      ↓
5. 커널 이미지 /boot/vmlinuz-2.6.XXXXXX) 적재
      ↓
6. 루트 파일시스템 마운트
      ↓
7. 시스템 초기화 프로그램 init 작동
      ↓
8. 프로프트 출현 ( 쉘 실행 )


2. 커널 이미지 (vmlinuz) 적재

커널 이미지라.... 뭘까??

이미지 파일이라고 하면... 음... iso 파일... 보통

스타크래프트.iso 파일을 씨디이미지 파일이라고 하죠

스타크래프트에는 실행파일과 설치파일 등등 여러 파일이 있지만

그런것들을 모아놓은것을 이미지 파일이라고 합니다.. 하나로


커널도 역시 그와 마찬가지로 커널에 관련된 여러 파일들이 있겠지만

그걸 압축(?)해서 모아둔 것을 이미지 파일이라고 합니다.

이 파일을 적재하면서 메모리에는 커널이 적재되겠죠...

커널이 적재되면 루트 파일 시스템과 쉘만 있다면 돌아가겠죠.. ㅋ


3. 루트 파일시스템 마운트

title Fedora Core (2.6.17-1.2157_FC5)
       root (hd0,0)
       kernel /boot/vmlinuz-2.6.17-1.2157_FC5 ro root=LABEL=/1 rhgb quiet
       initrd /boot/initrd-2.6.17-1.2157_FC5.img

자.. 이건... /boot/grub/grub.conf 파일입니다... 일부분이죠...

여기서 root (hd0,0) 라는 부분에 의해서 어디가 마운트 될지 설정합니다.

뭐 파일 시스템이 마운트 된다면... 이제 뭐... 다 됐네요..


4. init

[root@ant/boot/grub]# ps -ef | grep init
root         1     0  0 Sep10 ?        00:00:00 init [3]                       
root      9619  9534  0 00:04 pts/1    00:00:00 grep init

자 여기서 보면 현재프로세스 중에서 1번 PID를 가지는 프로그램은 init 입니다. 밑에 grep init 는

제가 방금 실행한 명령어구요 흠흠... 자 우선 루트 시스템이 마운트 되면 init 가 실행되어서

초기화가 진행됩니다. 파일시스템을 점검하고 서비스 프로그램들을 관리하며, 가상콘솔 접속관리를 하고

실행 레벨관리등등 전반적인 작업을 합니다.

이 init 가 참조하는 파일이 /etc/inittab 파일입니다.  


# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
      // 기본으로 설정된 실행레벨은 3번레벨

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit     // 부팅 과정중 실행되는 스크립트

l0:0:wait:/etc/rc.d/rc 0       // 지정된 레벨로 실행
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels      // 가상 콘솔 접속 설정 부분 필요없는 부분은 닫아두어도 좋음
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:once:/etc/X11/prefdm -nodaemon



뭐 ... 이런 파일인데 대략 다 아시리라 생각합니다....

이 블로그에 들어오는 사람들의 특성을 생각해서 자세한건 생략합니다...



5. 실행 레벨

실행레벨이란 ㅋㅋ 뭐 다 아시겠죠... 실행될 레벨입니다.

아!!! 이걸 왜 만든걸까... 모르겠군요 뭐... 자세히는 잘 모르지만 아무튼...

저희는 기본적으로 3번 혹은 5번을 사용하죠

자 /etc/rc[0-6].d 라는 디렉토리가 각각의 실행될 레벨입니다.

/etc/rc0.d 는 0번 레벨... /etc/rc3.d 는 3번 레벨... /etc/rc5.d 는 5번 레벨입니다... ㅋㅋ 쉽죠

그 디렉토리의 내용을 살펴 보자면


[root@ant/etc/rc3.d]# ls
K01yum                                  K50tux                 S04readahead_early
K02NetworkManager                K50xinetd            S05kudzu
K02NetworkManagerDispatcher  K56acpid            S06cpuspeed
K02avahi-dnsconfd                  K68rpcidmapd      S08iptables
K02cups-config-daemon           K69rpcgssd         S10network

.................

K35vncserver                          K94diskdump        S98haldaemon
K35winbind                             K95firstboot          S99local
K50netdump                            K99readahead

뭐 대략 이런 내용입니다... 흠....

자 여기서 자세히 파일 이름을 보고 있자면 공통점이 있군요!!!!

풋.... K 로 시작하거나 혹은 S 로 시작하거나... 음.. 그렇군요!!!!

여기서 S는 Start K는 Kill 의 약자라고 믿으..십시요.. 아마 맞을겁니다.. ㅋㅋㅋ

자 그럼 S05kudzu 라는 건 무엇일 까요???

3번 런레벨에서 실행이 될때 05번째로 실행되는 서비스이며 이름은 kudzu 이다.. 라는 뜻이죠

이 서비스는 하드웨어 설정을 하는 서비스 랍니다.. 풋... ㅇㅋ??

자 그렇다면 K95firstboot 라는건 무엇일까요???

3번 런레벨에서 종료가 될때 95번째로 종료시킬 서비스이며 이름은 firstboot 이다.. 라는 뜻입니다..

어렵지 않죠?? ㅎㅎㅎㅎㅎ

여기에 임의로 자기가 S99Lust_slave 라는 프로그램을 (내용은 차후 공부하시기 바랍니다..) 연결하거나

혹은 넣어둔다면 설정된 프로그램이 실행이 되겠죠 S 혹은 K 뒤에 같은 숫자가 여럿 있어도 상관없습니다.

저 같은 경우는 특별히 신경쓸 일이 아니라면

S99httpd S99mysqld S99dovecot 등등.. 이런식으로 만들어 버리죠

ㅎㅎㅎ

그리고는... 이제 우리에게 익숙한.. (로그인 후에..) 배쉬 쉘을 볼 수 있죠....


6. 글을 막 갈겨 쓴 후.....

자 여기까지 막 내용을 써내려왔습니다.

과연 사람들이 보고 쉽게 알아들을 수 있을지 모르겠지만...

물론 동영상 강의가 매주 수요일 있습니다. ㅋㅋㅋㅋ  자 쓸데없는 이야기는.. 그만 하고

본론으로 가서...


리눅스의 부팅과정 뭐 ... 사실 그렇게 중요하지 않죠...

이론이죠... 어떻게 본다면 뭐 중간중간 설정파일도 있고 뭐 기타등등 있을 수 있지만

일종의 이론인 듯합니다...

하지만!! 이론이라고 막상 내가 서버를 운영하고 컴퓨터를 사용하는데에 도움이 되지 않는다(?)고 해서

완전 모름~~~ 이라고 하면 안됩니다...

교수님들이나 그외에 사람들이 항상 하는 말 ... 이론이 중요하다는 말...

최근엔 느끼고 있답니다... 뭔가를 알아야만 아이디어가 나오고 현재 이상의 것을 할 수 있습니다..

이 글을 보고 있는 당신은 컴퓨터로 무언가를 만들거나 이루어야 할 사람이라고 생각합니다..


이론이라고 무시하지말고 잘 알아둡시다... ^^