- Power on
- BIOS에서 지정된 부트 드라이브로 부팅 시작
- 부트 섹터 로드
- GRUB 작동
- 커널 이미지 로드
- 파일 시스템 마운트
- 시스템 초기화 프로그램(init) 작동
- 로그인
- 시스템 전원이 시작되면 시스템에 이상이 없는지 확인하고(POST), 이상이 없는 경우 BIOS에서 지정한 부팅 순서에 따라 해당 드라이브로 부팅이 이루어진다.
- 해당 드라이브의 첫번째 섹터인 부트 섹터를 읽어들이는데, 이를
마스터 부트 레코드(MBR:Master Boot Record)라 한다. - 리눅스의 경우
GRUB가MBR에 저장되어 있다.
- 부트로더에서 리눅스가 선택되면 커널 이미지(
/boot/vmlinuz-version)가 작동한다. - 커널 이미지는 압축되어 있는 상태이므로
swapper라는 프로그램에 의해 압축이 풀어지고, 메모리, 디스크 등 여러 하드웨어들을 체크하여 이에 대한 정보를 화면에 보여준다.- 화면으로 출력되는 하드웨어 정보를 보고 싶다면 다음의 명령어를 이용한다.
$ dmesg | more $ cat /var/log/dmesg
- 화면으로 출력되는 하드웨어 정보를 보고 싶다면 다음의 명령어를 이용한다.
- 커널은 루트 파일시스템을 마운트 하는데, 이 때 부트로더의 설정파일(
/boot/grub/menu.lst)에 있는root=옵션으로 명시된 파티션을 루트 파일 시스템으로 마운트 시킨다. - 이 때 루트 파티션이 잘못 지정되거나, 루트 파티션이 변경되었음에도 이 정보가 갱신되지 않았을 때 커널에서 파일 시스템 마운트 과정이 실패하고 결국 패닉 에러를 보이며 부팅이 실패한다.
- 루트 파일 시스템이 마운트된 후 제일 먼저 시작되는 프로세스인
init은 프로세스 번호 1번을 갖는다. - 시스템은
init프로세스에 의해 초기화가 이루어진다. 즉, 로그인 프롬프트가 나오기 전까지 파일 시스템 점검, 서비스 프로세스 관리, 가상 콘솔 접속 관리, 실행레벨 관리 등 사용자의 리눅스 사용환경을 위한 초기화 작업을 실행한다. init프로게스가 실행될 때 제일 먼저 읽어들이는 파일이/etc/inittab파일이며,inittab파일의 설정에 따라 프로세스들을 실행시킨다.
/etc/inittab내용을 보면 실행 레벨(Run level)에 대한 설정 값이 보인다. 실행 레벨은 시스템이 어떤 모드로 작동될지 결정하는 실행 값을 말한다.- 실행 레벨의 내용은 아래와 같다.
0: 시스템 중지1: 단일 자용자 모드(싱글 모드로 쉘로 바로 부팅)2: NFS 기능을 제외한 다중 사용자 모드3: 다중 사용자 모드(콘솔 모드)4: 내용 없음(사용하지 않는 값)5: GUI의 X - Window로 부팅6: 시스템 리부팅
- 위의 런레벨을 파일의 제일 아래에
id:(런레벨 값):initdefault로 적어주면 시스템 부팅 시 해당 런레벨로 실행된다.- 참고로
/etc/inittab파일을 수정하지 않고telinit명령어로 원하는 런레벨로 호출할 수 있다.- 예)
telinit 5: X-Window의 런레벨 5 호출
- 예)
- 참고로
- 시스템이 부팅되면
init프로세스는/etc/rc.d/rc.sysinit스크립트를 실행시켜 네트워크 설정, 호스트 이름 설정, 하드디스크 최적화 등의 작업을 수행하고/etc/inittab에 설정된 런레벨에 따라 해당하는/etc/rc.d/rc[0-6].d스크립트를 실행한다.- 즉 런레벨이 3으로 설정되어 있다면
/etc/rc.d/rc3.d를 실행한다.
- 즉 런레벨이 3으로 설정되어 있다면
/etc/rc.d/rc[0-6].d스크립트는 런레벨에 맞춰 필요한 서비스 데몬을 실행하거나 중지하는 일을 맡는다.- 예)
/etc/rc.d/rc3.d디렉토리 안에는 많은 스크립트 파일이 있는데, 스크립트에서S는 해당 런레벨에서 시작해야 하는 프로세스들을,K는 해당 런레벨에서 죽여야 하는 프로세스를 의미한다. S나K뒤에 있는 숫자는 초기화 때 실행되는 순서를 의미한다.
- 예)