1. power on

 

2. BIOS가 시스템 이상 여부 테스트

 

3. 부팅할 드라이브 선택 :부트로더

아주 예전에는 LILO(LInux LOader)를 사용했지만 21세기에 들어오며 grub를 사용한다. 부트로더는 주로 MBR(Master Boot Record)에 설치되어 여러 개의 커널로 부팅이 가능한 경우, 커널들이 어디에 위치하고 있는지에 관한 정보를 파악하고 있다가 사용자로 하여금 사용할 운영체제를 선택하게 하고 선택된 운영체제에 맞는 커널을 불러온다.

4. 선택된 드라이브의 MBR 읽어들임

 

5. MBR이 파티션 테이블을 읽어 부팅할 파티션을 알아냄

 

6. 커널 압축 해제

부트로더는 클럭을 초기화하고 커널을 메모리에 적재한다. 제어권이 커널에게 넘어가면 커널의 제일앞에 있는 코드가 실행되는데, 여기는 (사이즈를 줄이기 위해 압축된) 커널의 압축을 푸는 코드가 들어 있다.

 

7. 장착된 하드웨어 검사, 장치 드라이버 검사

 

8. 커널 / (root 파일 시스템)을 read-only로 마운트

 

9. 파일시스템 검사

 

10. /(root 파일시스템)을 read-write로 다시 마운트

 

11. /sbin/init 실행. hostname, swapping, 시스템점검, 커널모듈 로딩

 

12. /etc/rc.d/rc 실행: inittab에 정의된 Default Runlevel을 실행

– 실행될 runlevel의 디렉토리 존재 여부의 확인
– 실행시킬 프로세스 중 이미 실행중인 것을 종료함
– /etc/rc.d/rc[0-6].d내의 S로 시작하는 스크립트 시행

 

/etc/rc.d/rc[0-6].d와 같은 디렉토리들을 찾을 수 있는데, 여기서 0~6은 실행 레벨이다. 숫자에 따른 실행 레벨은 다음과 같다.
– 0 : 시스템 종료 halt
– 1 : 단일 사용자 모드. 시스템이 최소화된 상태로 부팅
– 2 : 다중 사용자 모드, 단 NFS 지원하지 않음
– 3 : 다중 사용자 모드이며 네트워킹 지원. 텍스트 인터페이스로 사용할 수 있다.
– 4 : 사용자 정의 레벨
– 5 : X Window로 부팅되도록 할때
– 6 : Reboot

실행 레벨은 시스템의 사용 용도나 형편에 따라, 수행되어야 할 서비스들을 묶어 놓은 그룹이라 해석할 수 있다. 관리자만이 시스템에 접근해야 할 필요가 있을 경우에는 실행 레벨 1로, X 윈도우로 로그인하려면 실행 레벨 5로 정해주면, 시스템의 실행 레벨에 따라 알아서 그룹으로 묶여있는 서비스를 실행하거나 종료한다.

각 실행 레벨(runlevel)에 해당하는 디렉토리에는 각 레벨에 해당하는 자동 실행 스크립트의 링크 파일이 들어 있다. init는 시스템을 시작할 때 상황에 맞게 이 스크립트를 실행한다. 사용자의 편의대로 기본 실행레벨을 변경하려면 /etc/inittab에서 다음 부분과 같이 수정한다. (3 대신 원하는 레벨의 숫자를 넣는다)

# vi /etc/inittab
……
id:3:initdefault:
….

 

/etc/rc.d/rc[0-6].d 안의 스크립트들은 /etc/inittab 파일 중 ‘id’부분에 정의된 실행레벨에서 실행될 스크립트들을 실행한다. 이렇게 실행할 스크립트는 /etc/rc.d/rc[0-6].d 디렉토리에 들어있는데, 이 파일들을 알고 보면, /etc/rc.d/init.d 디렉토리에 실제적인 실행 스크립트를 추가하고, 실행하려는 레벨의 디렉토리에 링크를 만든 것이다. 앞에서 설명한 경우, 실행 레벨이 “3”이고, /etc/rc.d/rc3.d 디렉토리에 실행될 스크립트를 가리키는 링크들이 들어있다.

 

그 링크 이름을 살펴보면, 파일 이름의 첫 번째 문자는 두 가지 중 하나라는 사실을 알 수 있다. 그 중 하나는 kill, 즉 중단을 의미하는 “K” 이며, 다른 하나는 start, 즉 시작을 나타내는 ”S” 이다. 예컨대 “K30Sendmail” 는 ‘/etc/rc.d/init.d/sendmail stop’ 으로, ”S10network”는 ‘/etc/rc.d/init.d/network start’로 실행된다. 이 지시문자 뒤에 있는 숫자는 실행 순서를 나타내는 것으로, 번호가 앞서는 것이 먼저 실행된다.

 

13. /etc/rc.d/rc.local : 부팅될 때 마다 이 디렉토리를 읽으므로, 매번 실행할 내용을 넣어둔다. 이 경우 먼저 해당 실행 레벨의 스크립트가 실행된 다음 이 내용을 실행한다.

 

14. /etc/rc.d/rc.serial : 시리얼 포트를 초기화한다.

 

15. login(getty) / X window(xdm)를 실행하면 익숙한 GUI화면을 볼 수 있다.

 

여기까지의 과정은 dmseg 명령이나 #cat /var/log/message 명령으로 다시 확인할 수 있다.