예전에 공부하고도 또 까먹어서 쓴다!!!
부팅과정을 크게 5가지로 분류하면 아래와 같다.
■ 0 단계 : 시스템 전원 공급
■ 1 단계 : BIOS(Basic Input/Output System) 단계(Firmware 단계)
■ 2 단계 : 부트 로드(Boot Loader) 단계
■ 3 단계 : 커널(Kernel) 단계
■ 4 단계 : Init 단계
0단계 : 시스템 전원 공급
- 메인보드의 ROM-BIOS에 있는 BIOS프로그램을 자동실행 한다.
- BIOS 프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드된다.
- CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행 한다.
1단계 : BIOS 단계
- 자체진단기능(POST(Power On Self Test))
- CMOS검사, CPU, MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상 유무를 검사하고 이들 장치(하드웨어들)을 초기화시킨다.
- 부팅매체검색과 부트로더 실행
- POST과정이 이상 없이 진행 완료되면 검색된 부팅매체(하드디스크, CD-ROM, 플로피 디스크등)에서 부트로더(예:GRUB, LILO)를 불러들인다.
- 즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어 들이게 된다.
- 부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더(GRUB)이 갖게 된다.
2단계 : 부트로드 단계
부트로더는 커널(운영체제의 심장)을 메모리에 올려놓는 일을 한다. 보통 GRUB가 멀티부팅을 위한 것으로 생각하는 사람이 있지만 멀티부팅이
아니더라도 리눅스의 부팅을 위해선 꼭 있어야 하는 것이다. 컴퓨터에 전원이 들어오고 나면 제일 먼저 디스크의 첫 부분을 읽어서 제일 처음
실행되는 프로그램(로더)이다. 부트로더는 커널 이미지의 위치를 알고 있어서 스스로 커널이미지를 찾아서 메모리에 올려놓는다.
리눅스에서 사용하는 부트로더는 LILO(Linux Loader)나 GRUB가 있다.
GRUB은 커널(kernel)이미지를 불러들이고 시스템 제어권을 커널에게 넘겨준다.
GRUB(GRand Unified Bootloader)
환경 설정 파일 : /boot/grub/grub.conf(/etc/grub.conf)
실행 파일 : /sbin/grub
설정 옵션 : /boot/grub/grub.conf
timeout=5 5초 후 부팅 /* 부팅시 타임아웃 설정 */
default=0 첫 번째로 부팅 /* 기본 부팅 레이블(예: 0) */
hiddenmenu /* GRUB 메뉴 숨김 */
splashimage=(hd0,0)/bot/grub/splash.xpm.gz /* splashimage 위치 */
title CentOS (2.6.18-164.11.1.el5)--> /* 타이틀 */
root (hd0,0) 하드디스크 0번에 존재함 /* root 파티션 위치 */
kernel /boot/vmlinuz-2.6.18-164.11.1.el5 ro root=LABEL=/ rhgb quiet
-> 부트 밑에 내용으로 부팅하겠다 initrd /boot/initrd-2.6.18-164.11.1.el5.img
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rhgb quiet"
수정 후 # grub2-mkconfig -o /boot/grub2/grub.cfg 명령어로 설정 적용
3단계 : 커널 단계
- /etc/grub/grub.conf 파일에 의해서 커널이 메모리상에서 실행되면, 하드웨어를 점검하고 /var/log/dmesg 파일에 기록을 한다.
- 루트 파일시스템(/)을 읽기 전용으로 마운트 한다. 만약 마운트 실패시 “커널 패닉” 메세지를 출력한다.
- 커널은 swapper프로세스(PID 0번)를 호출한다.
- swapper(PID 0번)는 커널이 사용할 각 장치드라이브들을 초기화하고 init프로세스(PID 1번)가 실행하게 된다.
- /sbin/init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행한다.
4단계 : Init 프로세스 단계
Setting hostname linux240.example.com: [ OK ] -> /etc/rc.d/rc.sysinit
Setting up Logical Volume Mangement: [ OK ] -> /etc/rc.d/rc.sysinit
/: clean, 121775/1716352 files, 923541/1714930 blocks
/data1: clean, 11/128520 files, 26763/514048 blocks
/data2: clean, 11/128520 files, 26763/514048 blocks
/data3: clean, 11/128520 files, 26763/514048 blocks
/data4: clean, 11/128520 files, 26763/514048 blocks
/home: clean, 18/128520 files, 26773/514080 blocks
Remounroot filesystem in read-write mode: ting [ OK ] -> /etc/rc.d/rc.sysinit
Mounting local filesystems: [ OK ] -> /etc/rc.d/rc.sysinit
Enabling local filesystem quotas: [ OK ] -> /etc/rc.d/rc.sysinit
Enabling /etc/fstab swaps: 스왑공간 [ OK ] -> /etc/rc.d/rc.sysinit --->마운트 이상시 멈춤
INIT: Entering runlevel: 5
비 대화식 시작모드를 시작함
Intel CPU 마이크로코드 업데이트를 적용 하는 중 [ OK ] -> /etc/rc5.d/S00microcode_ctl
배경 readaheadf를 시작 중: [ OK ] -> /etc/rc5.d/S04readahead_early
하드웨어 변경 사항을 확인 중: [ OK ] -> /etc/rc5.d/S05kudzu
loopback 인터페이스를 활성화 중: [ OK ] -> /etc/rc5.d/S11network
eth0 인터페이스 활성화 중: [ OK ] -> /etc/rc5.d/S11network
auditd (을)를 시작 중: [ OK ] -> /etc/rc5.d/S11auditd
시스템 기록을 시작 중: [ OK ] -> /etc/rc5.d/S12syslog
커널관련 기록을 시작: [ OK ] -> /etc/rc5.d/S12syslog
lrqbalance (을)를 시작 중: [ OK ] -> /etc/rc5.d/S13lrqbalance
portmap (을)를 시작 중: [ OK ] -> /etc/rc5.d/S13portmap
NFS statd를 시작 중: [ OK ] -> /etc/rc5.d/S14nfslock
PRC ldmapd를 시작 중: [ OK ] -> /etc/rc5.d/S15mdmonitor
No kdump Initial ramdisk found. [ 주의 ] -> /etc/rc5.d/S20kdump
Rebuilding /boot/initrd-2.6.18-164.11.1.el5kdump.img
Starting kdump: [ 실패 ]
시스템 메세지 버스를 시작 중: -> /etc/rc5.d/S22messagebus
Bluetooth 서비스를 시작 중: [ OK ] -> /etc/rc5.d/S25bluetooth
다른 파일시스템을 마운트하는 중: [ OK ] -> /etc/rc5.d/S25netfs
PC/SC 스마트카드 데몬 (pcscd)을 시작 중: [ OK ] -> /etc/rc5.d/S25pcscd
acpi 데몬을 시작 중: [ OK ] -> /etc/rc5.d/S26acpid
HAL 데몬을 시작 중: [ OK ] -> /etc/rc5.d/S26haldaemon
hldd를 시작 중: [ OK ] -> /etc/rc5.d/S26hldd
autofs (을)를 시작 중: Loading autofs4: [ OK ] -> /etc/rc5.d/S28autofs
automount (을)를 시작 중: [ OK ] -> /etc/rc5.d/S28autofs
----------------------이하 생략------------------------
/sbin/init 프로세스가 실행이 되면 /etc/inittab 파일에 정의된 순서에 따라서 시스템을 초기화하기 시작한다. 즉, 로그인프롬프트가 나오는 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들인 것이다.
'리눅스' 카테고리의 다른 글
[Linux] 로그 기본 개념 설명 (0) | 2018.12.12 |
---|---|
[Linux] 리눅스 정기적 반복 작업 관리 (Crontab) (0) | 2018.12.11 |
[RHEL] 레드햇 서브스크립션(Subscription) 확인 방법 (0) | 2018.12.03 |
[Linux] Apache(아파치) httpd.conf 기본 구성 (0) | 2018.10.29 |
[Linux] 주석 없는 라인만 보고싶다면? grep -v 명령어 (0) | 2018.10.26 |
[Linux] rsyslog 설정 및 관리 (1) | 2018.10.26 |
[CentOS7 / RHEL 7] systemd : start session ## of user root 해결방법 (0) | 2018.10.23 |
[Linux/CentOS7] 관리자(root) 패스워드 찾기 - 싱글모드 부팅 (0) | 2018.10.17 |