티스토리 뷰
-. 리눅스 부팅과정 순서요약
01단계 : ROM-BIOS에서 POST기능과 부팅매체의 부트로더를 불러들인다.- ROM-BIOS
02단계 : 부트로더는 부팅메뉴를 선택받고 선택된 커널을 로딩한다. 그리고 부트로더는 Swapper를 로딩한다. – GRUB
03단계 : Swapper는 각 장치들을 초기화한후에 init프로세스를 로딩한다. – Swapper
04단계 : init프로세스는 /etc/inittab 파일의 내용을순차대로 실행한다. – init
05단계 : 부팅레벨을 선택한다. - /etc/inittab
06단계 : /etc/rc.d/rc.sysinit 스크립트를 실행한다 - /etc/inittab
07단계 : 선택된 부팅레벨(N)에 따라서 /etc/rc.d/rcN.d/디렉토리의 파일들을 순차대로 실행한다. - /etc/inittab
08단계 : ctrlaltdel 시스템매직키 설정을 한다. - /etc/inittab
09단계 : 전원공급 설정을 한다. - /etc/inittab
10단계 : 6개의 가상터미널을 각각 실행한다. - /etc/inittab
11단계 : 5번 부팅레벨로 부팅될 경우에 X윈도우를 실행한다. - /etc/inittab
>> 부팅1단계 ROM-BIOS 실행
ROM-BIOS의 첫번째역할, POST기능, 하드웨어의 각 장치들 인식 및 초기화(자체진단 기능)
Power On Selt Test : 시스템에 장착된 하드웨어장치(CPU, RAM, DISK 등)들을 하나씩 인식하고 이상유무를 체크함, 그리고 시리얼장치, 패러럴장치, PS/2 마우스장치, 사운드장치, IDE하드웨어, USB장치, 플로피드라이브, SATA장치, SCSI장치, 이더넷카드등이 ROM-BIOS프로그램에 의해 모두 인식되고 또한 사용을 위한 초기화가 수행됨
ROM-BIOS의 두번째역할, Boot Loader 로딩기능
ROM-BIOS는 POST과정에서 인식된 부팅매체들을 순차적으로 돌며 가장 먼저 인식된 부팅매체에서 Boot Loader를 불러들이게 된다.
Boot Loader은 부팅매체의 MBR영역에서 Boot Program을 읽어들여 부팅을 진행함, Boot Program에 리눅스의 Boot Loader인 GRUB를 읽어들여 Boot Loader(GRUB)는 메모리로 로딩되고 ROM-BIOS는 시스템부팅제어권을 GRUB에게 넘겨주고 자기자신은 종료한다. 이후부터 시스템제어권은 GRUB가 가지게 되고 부팅과정을 주도하게 됨.
>> 부팅 2단계 Boot Loader(GRUB) 실행
GRUB의 첫번째 역할, 리눅스커널 적재(Linux Kernel Loading)
어떤 부팅메뉴로 부팅할것인가는 /boot/grub/grub.conf파일에 이미 정의되어 있다, 이후 나오는 GRUB화면에서는 어떤 커널로 로딩할것인가를 선택할수 있고, /boot/grub/grub.conf파일엔 어떤 커널을 메모리로 로딩할것인가도 이미 정의되어 있다. 부팅메뉴에서 부팅을 잠시 멈추고 GRUB명령어 상태로 들어갈수도 있음, GRUB는 리눅스커널을 메모리로 로딩이 완료되면, Swapper프로세스를 실행한다.
GRUB의 두번째 역할, Swapper 프로세스 호출
Linux Kernel Loading이 완료된후 Swapper Process(PID 0)호출
>> 부팅 3단계 Swapper Process 호출
ROM-BIOS단계에서 인식되었던 각 장치들의 드라이브를 초기화 한후, init 프로세스(sbin/init)(PID 1)를 호출한후 Swapper 프로세스는 종료됨,
swapper이라는 프로세스는 부팅시에 잠시 실행되었다가 사라지므로 부팅이 완료되고 난 이후에는 존재하지 않는 프로세스이다.
>> 부팅 4단계 init 프로세스의 실행
swapper프로세스에 의하여 init프로세스가 실행된다. 모든 프로세스는 그 실행과 하께 설정파일을 읽어들임,
init프로세스는 /etc/inittab이라는 설정파일을 읽어들여 실행한다.
부팅과정에서 출력되는 거의 모든 부팅메시지들은 init프로세스에 의해서 실행되는 /etc/inittab파일의 실행내용이다.
[root@localhost ~]#vi /etc/inittab
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# 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:
# 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
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
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:respawn:/etc/X11/prefdm -nodaemon
>> 부팅 5단계 부팅레벨의 결정단계
/etc/inittab파일의 내용중 가장 먼저 실행되는 부분임,
id:3:initdefault:
>> 부팅 6단계 /etc/rc.d/rc.sysinit 스크립트 실행(시스템초기화작업)
si::sysinit:/etc/rc.d/rc.sysinit
어떤 부팅레레벨을 선택되건 부팅레벨로 진입전 시스템초기화작업은 공통적으로 이루어짐
/etc/rc.d/rc.sysinit파일의 수행내용
01. default path 설정
02. /etc/sysconfig/network 실행
03. 네트워크 설정 확인 및 적용
04. swapon 명령으로 스왑작동
05. 호스트이름,도메인이름 설정
06. keymap loading
07. fsck실행으로 파일시스템 점검(/etc/fstab파일을 참조하여)
08. PNP하드웨어 점검
09. /proc 파일시스템 mount
10. kernel module load
11. depmod 실행으로 모듈의존성 설정 (depmod –a 실행의 의미는 modprobe명령과 kerneld 데몬에게 필요한 modules.dep파일을 갱신하는 의미임)
12. system clock설정
13. system font load
14. 파일청소 작업
15. 시리얼포트 설정작업
16. /usr/sbin/netconfig 실행
17. /usr/sbin/timeconfig 실행
18. /usr/sbin/authconfig 실행
19. /usr/sbin/ntsysv 실행
20. utmp 파일의 검사 및 생성
21. wtmp 파일의 검사 및 생성
22. 기타 시스템 초기화에 필요한 작업들을 수행
>> 부팅 7단계 /etc/rc.d/rcN.d/ 디렉토리의 스크립트실행
위에 N은 0 ~ 6 까지의 부팅레벨을임
각각의 부팅레벨마다 실행되는 디렉토리가 다르고 각각의 디렉토리내에 존재하는 스크립트파일들이 다르기 때문에 부팅레벨에 따라 실행되는 내용은 다름.
/etc/rc.d/rcN.d/ 디렉토리내에 존재하는 파일은 모두 링크파일들이며, 거의 대부분 /etc/rc.d/init.d/디렉토리에 있는 파일들에서 링크되어있다.
위 디렉토리에 존재하는 파일들은 다음과 같은 특징을 가지고 있음,
01. 부팅레벨에 따라 시스템 부팅시에 자동실행될 서비스(데몬)들에 대한 설정임
02. 모든 파일들은 /etc/rc.d/init.d/디렉토리에 있는 파일을 원본으로 하는 링크파일들임.
03. K로 시작하는 파일들은 해당 부팅레벨별로 부팅시에 자동시작되지 않는 서비스들의 링크파일이며, S로 시작하는 파일들은 해당 부팅레벨로 부팅시에 자동시작되는 시비스들의 링크파일임.
04. 파일명에서K또는 S로 다음의 숫자들은 실행될 순서를 의미함
05. 예외적으로 S99local은 /etc/rc.d/rc.local파일을 원본으로 하는 링크파일로서 2,3,4,5번 부팅레벨에서만 실행되도록 되었음,
/etc/rc.d/rc1.d/S99single파일은 1번 부팅레벨에서만 실행됨
/etc/rc.d/rc6.d/S01reboot파일은 6번 부팅레벨에서만 실행됨
S99local에 의해 실행되는 /etc/rc.d/rc.local파일은 2,3,4,5번 각 실행레벨에서 맨 마지막 단계에 꼭 한번 실행되는 파일로서 각 사용자들이 부팅시에 자동으로 실행하고자 하는 프로그램들을 설정하거나 스크립트를 설정해두는 파일이다.
#APACHE나 MYSQL등을 소스로 직접 컴파일하여 설치한후에 부팅시마다 매번 자동실행 설정을 하는 곳이 바로 이파일임
ex) 소스로 직접컴파일하여 설치했던 apache,mysql,proftpd 응용프로그램들을 자동실행하기 위한 설정의 예
#!/bin/sh
touch /var/lock/subsys/local
/usr/local/apache/bin/apachect1 start
/usr/local/mysql/bin/mysql_safe &
/usr/local/proftpd/sbin/proftpd
>> 부팅 8단계 시스템매직키설정
#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown –t3 –r now
위의 설정의미는 “CTRL+ALT+DELETE”키에 대한 수행내용을 설정한것으로서 부팅이 완료된후 ctrl+alt+del키를 동시에 눌렀을때 어떤 내용을 실행할것인가를 정의해둔 것
>> 부팅 9단계 시스템 전원공급 설정 (배터리 사용시)
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
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"
pf행은 ups전원이 부족할경우 2분후에 자동적으로 리눅스 시스템을 shutdown(/sbin/shutdown -f -h +2) 시키는 설정 #노트북의 배터리가 거의 소모되었을경우)
pr행은 ups전원이 다시 재충전되었을경우 전의 pf행에서 실행되었던 shutdown명령어를 취소(/sbin/shutdown -c )하는 설정임. #노트북의 배터리가 재충전 또는 전원공급된 경우
>> 부팅 10단계 가상터미널 실행과 로그인창 실행
6개의 가상터미널을 실행
부팅과정의 거의 마지막단계라고 볼수 있음
# 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
2,3,4,5번 부팅레벨로 부팅시에 로그인창을 실행해주는 6개의 가상콘솔실행 설정,
콘솔에서 ALT + F1을 눌렀을때 실행되는 콘솔이 1:2345:respawn:/sbin/mingetty tty1 이며 ALT + F6까지 총 6개의 터미널이 열려있음.
위의 설정에서 보이는 respawn이라는 옵션은 mingetty 프로세스가 종료되면 다시 자동으로 재실행된다는 의미이다. 즉, respawn옵션때문에 콘솔에서 로그아웃한뒤에도 다시 로그인화면이 뜨게 되는것
2,3,4부팅레벨은 여기까지가 부팅완료이며
5 부팅레벨은 X윈도우를 실행후 부팅완료된다.
>> 부팅 11단계 X윈도우 실행
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
위 옵션에서도 보이듯이 5부팅레벨에서만 실행되며 X윈도우를 실행하는 단계이다.
위와같은 부팅과정을 이해하고 알아야 하는 목적에 대해서는 리눅스 시스템에 부팅중 장애가 발생한경우 어떤 단계에서 장애가 발생했는지를 확인하여, 해당단계에 해당하는 파일을 확인해주어야 하기 때문이다.
예를 들어 파일시스템체크 수행단계에서 부팅이 멈춘경우라면 /etc/rc.d/rc.sysinit단계에서 멈춘것이므로 이 파일을 살펴보고 조치해야 한다.
커널패닉이 발생하면서 부팅이 멈추었다면 GRUB수행단계에서 /boot/grub/grub.conf 파일의 커널 로딩행에서 장애가 발생한것이므로 다른 커널로 부팅을 하거나 grub-install을 이용하여 장애복구를 해야한다.
-. /etc/inittab파일 활용하기
/etc/inittab파일내에 존재하는 행들의 포맷을 살펴보면 다음과 같은 형식으로 작성된것을 할수 있음
[name : level-number : options : process –options]
name = id,si,pr등의 값들이 올수 있음
level-number = 이 행의 실행내용을 어떤 부팅레벨에서 실행할 것인가를 설정함
options = 이 다음에 올 process를 실행할때에 적용되는 특수한 속성들, 이 속성에 이 행의 실행성격이 결정됨.
process –options = 실행할 프로세스와 명령어에 대한 옵션
속성(options)의 종류들
>> respawn속성
프로세스가 종료될때마다 다시 자동으로 재실행한다.
>> wait속성
지정된 프로세스가 실행될때 init은 프로세스가 종료될때까지 기다린후 다음작업으로 넘어가게 된다.
>> once속성
해당 프로세스를 한번만 실행되도록 하는 옵션
>>boot속성
시스템이 부팅되는 동안 해당프로세스가 실행되며, 이 속성이 주어지면 init은 부팅레벨필드는 무시하고 process를 실행한다.
>>bootwait속성
시스템이 부팅되는 동안 해당프로세스가 실행되며, init은 프로세스가 종료될때까지 기다린후 다음작업으로 넘어가게 된다.
>> off속성
주석처리와 동일
>> ondemand속성
실행레벨 1,2,3인경우에만 유용하며, init은 이 세개의 실행레벨과 함께 호출될때만 프로세스가 작동한다.
>> initdefault 속성
시스템이 부팅되면서 어떤 부팅레벨로 부팅할 것인가를 결정하는 옵션
>> sysinit속성
시스템이 부팅되는 동안 해당프로세스를 한번만 실행하는 옵션, boot나 bootwait보다 우선권을 가진다
따라서 모든 부팅레벨에서 단 한번만 실행되는 내용이 /etc/rc.d/rc.sysinit스크립트파일의 내용이다.
>> powerwait속성
init은 SIGPWR신호를 받는 경우에만 프로세스가 가동된다, 전원에 문제가 있을때 보통 UPS의 전원모니터링 소프트웨어가 이를 인식하여 init에게 신호를 해준다. 이 경우 init은 프로세스가 종료될때까지 기다린다.
>> powerfail속성
powerwait과 같지만 init이 프로세스가 종료될때까지 기다리지 않는다.
>> powerokwait속성
init이 SIGPWR신호를 받고 /etc/powerstatus라는 텍스트파일에 OK라는 문자열이 있을때 프로스세가 실행된다. 일반적으로 UPS모니터링프로그램이 이 파일을 생성하며 SIGPWR신호를 init에 보내어 전원상의 문제가 해결되었음을 알려준다.
>> ctrlaltdel속성
init이 CTRL + ALT + DEL키를 눌렀을경우 동작하도록 함
>> kbrequest속성
이 옵션은 init프로세스가 키보드관리자로부터 keyboardsignal을 받았을때 해당 프로세스를 실행되도록 한다.
참조 : 리눅스 서버관리 실무 바이블 3.0(박성수 저)
'Linux' 카테고리의 다른 글
Linux, 시스템 날짜와 시간관리 (0) | 2016.04.26 |
---|---|
Linux, Network기본 (0) | 2016.04.26 |
Linux, 부팅레벨(Run level) (0) | 2016.04.26 |
Linux, file명령어 & strings명령어 (0) | 2016.04.22 |
Linux, script 명령어 (0) | 2016.04.22 |
- Total
- Today
- Yesterday
- ManyToOne
- highlightthickness
- Composite Key
- disabledforeground
- vba
- 폼
- fetch join
- command
- Module
- tkinter command & bind [명령어묶기와 사건묶기] Python
- highlightbackground
- FetchType
- tkinter
- onetomany
- Java
- 파이썬
- Python
- JPA
- borderwidth
- Linux
- 리눅스
- Private
- checkbutton
- IdClass
- apache
- activeforeground
- Excel
- indicatoron
- 상수
- activebackground
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |