티스토리 뷰

Linux

Linux, 리눅스 부팅과정

hwangyoungjae 2016. 4. 26. 18:09
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

-. 리눅스 부팅과정 순서요약

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부팅레벨은 여기까지가 부팅완료이며

부팅레벨은 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
링크
«   2024/07   »
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 29 30 31
글 보관함