본문으로 바로가기

부팅과정

category Linux/Linux Server 2017. 9. 4. 19:39


0 단계 : 전원 스위치 ON 단계 (펌웨어 단계)
시스템 전원공급
메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행 한다.
BIOS 프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드된다.
CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행 한다
  • BIOS

자체진단기능(POST(Power On Self Test))

CMOS검사, CPU,  MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상 유무를 검사하고 이들 장치(하드웨어들)을 초기화시킨다.

부팅매체검색과 부트로더 실행

POST과정이  이상  없이  진행  완료되면  검색된  부팅매체(하드디스크,  CD-ROM,  플로피  디스크등)에서  부트로더(예:GRUB, LILO)를 불러들인다.

즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어 들이게 된다.

부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더(GRUB)이 갖게 된다.

  • 부트로드 ( GRUB )



부팅로더로 GRUB를 사용하고 있다면, GRUB은 실행과 함께 /boot/grub/grub.conf파일을 읽어서 어떤 부팅메뉴(커널)로 부팅을 할 것인가를 결정하게 된다.  (자동결정 또는 사용자선택)  이 화면이 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 설치 : # /sbin/grub-install /dev/sda 
GRUB 삭제 :(Linux 상에서 삭제)   : # dd if=/dev/zero of=/dev/sda bs=446 count=1  
:446 입력조심--->잘못하면 파티션 날아감
(Windows 상에서 삭제) : # fdisk /mbr

[예] GRUB 삭제
# dd if=/dev/zero of=/dev/sda bs=446 count=1 
# reboot
-> 부팅이 되지 않는다.

CD를 넣고 CD로 부팅한다.
[참고] CD로 부팅하기
펌웨어 버전으로 들어가서 boot 순서를 disk보다 CD를 위에 올려둔다.

CD의 설치창이 뜨면 F5번을 눌러 linux rescue 입력후 <enter>
그럼 프롬포트가 뜬다.

CD로 디스크를 마운트한것이다.
# df -h 
-> /mnt/sysimage 마운트 확인
# ls /mnt/sysimage
# df -h  ->( disk 안의 OS )
# fdisk -l /dev/sda /* 이상이 있는지 확인한다*/

# cd /mnt/sysimage
# chroot /mnt/sysimage  /* 최상위를 /mnt/sysimage 로 설정한다. ( /mnt/sysimage/etc/fstab -> /etc/fstab )

# cat /boot/grub/grub.conf  /* 내용에는 이상이 없다. */ 
# grub-install /dev/sda    /* 다시 생성 */
# exit     /* chroot */
# exit     /* shell -> 재부팅 */
  • 커널 ( Kernel )


/etc/grub/grub.conf 파일에 의해서 커널(vmlinuz)이 메모리상에서 실행되면, 하드웨어를 점검하고 /var/log/dmesg 파일에 기록을 한다.
루트 파일시스템(/)을 읽기 전용(Read Only)으로 마운트 한다. 만약 마운트 실패시 “커널 패닉” 메세지를 출력한다.

  • init 

/sbin/init  프로세스가  실행이  되면  /etc/inittab  파일에  정의된  순서에  따라서  시스템을  초기화하기  시작한다. 즉, 로그인프롬프트가 나오기까지의 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들인 것이다.


[예] /sbin/init 데몬 확인
# pstree | more /* 맨앞에 init 이 있다는것을 알 수 있다. -> 모든 프로세스의 부모 프로세스*/

# ps -ef | head -20 /* /sbin/init 프로세스는 PID 1번을 받는다 */

- /etc/inittab
# 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:5:initdefault:   /*액션부분은 어떤 상태로 동작할지를 선택 (런레벨 2.3.5번만 사용)*/

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit    /* 런레벨이 무엇이든 실행된다 */

l0:0:wait:/etc/rc.d/rc 0           /*런레벨 비워있다면 -->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           /*wait는 뒤에 있는 프로그램이 다 실행될때가지 기다려라 문제시 그 상태에서 멈춤*/
                                             

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now    /*부팅시 컨트롤 +딜레트 누르면 3초 후 재부팅*/

# 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.  
/* UPS 는 전원이 차단될때 예비 전력으로 시스템이 중단되는것을 막아준다. 또한 공급되는 전류를 일정하게 관리 */
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 
         /* 전원 문제로 2분후 아웃하겠다 */
    powerfail는 축척하는 역할--일정한 전압을 유지 시키는 기능(보조 배터리 기능-저장)

# If power was restored before the shutdown kicked in, cancel it.  /*다시 전원이 들어옴 */
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"  /* -c 캔슬 shutdown을 취소한다.*/


# 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    /*prefdm는 GUI 로그창*/
    /*respawn 로그창을 다시 뛰우는 작용 */

- /etc/inittab 파일의 형식

필드

설명

ID

식별자. /etc/inittab 파일안에서의 각 항목들에 대한 식별자, 최대 4자리. (libc의 버전이 5.2.18 보다 낮은 버전이나, a.out 라이브러리 컴파일 했다면, 사용할 수 있는 최대 문자 개수는 개이다.)

Runlevel

런레벨. 진행할 런레벨 지정한다. 만약 런레벨 지정이 없으면 모든 런레벨을 지정한것과 같다.

Action

동작방식지정

(initdefault) : 시스템 부팅 뒤에 실행될 런레벨을 지정한다. 만약 이 부분이 없으면, 어떤 런레벨로 실행할 것인지 콘솔에서 물어 보게 된다. Process 필드는 무시된다.

(sysinit) : 시스템 부팅을 할 때에 그 프로세스가 실행된다. 이것은 boot, bootwait로 지정된
프로세스 보다 먼저 실행된다. Process 필드는 무시된다.

(wait) : 지정한 런레벨이 되면 그 프로세스가 실행되고, init은 그 프로세스가 종료되기를 기
다린다.

(ctrlaltdel) : initSIGINT 시그널을 받았을 때 그 프로세스가 실행된다. SIGINT는 시
스템 콘솔에서 <CTRL+ALT+DEL> 키를 입력할 때 발생하는 시그널이다. 이것은 전형적으로 컴퓨터를 리부팅하거나, 단일 사용자 모드를 사용하기 위해서 사용된다.

(powerfail) : powerwait과 같지만, init는 그 프로세스 작업이 끝나기를 기다리지 않는다.

(powerokwait) : initSIGPWR 시그널을 받았을 때 그 프로세스가 실행된다. OK 라는 단어를 포함하고 있는 /etc/powerstatus 파일이 SIGPWR 시그날을 제공한다.

(respawn) : 그 프로세스가 종료되면 항상 다시 시작하게 한다. (: getty)

Process

실행프로그램. 실행할 프로세스 지정. 이 필드에 ‘+’문자가 제일 앞에 오면, init은 그 처리 과

정에서 utmp, wtmp 처리를 하지 않게 된다. 이것은 gettys에서 스스로 utmp/wtmp를 처리할 경우

필요하다.


-런레벨 변경 방법
( 현재 ) # init 3
( 부팅 ) # vi /etc/inittab ( id:3:initdefault:)

( 현재 ) # init 5
( 부팅 ) # vi /etc/inittab ( id:5:initdefault:)

런레벨 3 or 5 - /etc/inittab 파일 읽혀 지는 내용의 차이점
(runlevel 3) 
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l3:3:wait:/etc/rc.d/rc 3
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
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


(runlevel 5)
id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l5:5:wait:/etc/rc.d/rc 5
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
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
x:5:respawn:/etc/X11/prefdm -nodaemon


- init 파일


[차이점]
# /etc/rc#.d/[S##|W##] script 는 부팅 할때만 읽힌다. 때문에 부팅할때 서비스가 시작되길 원하면 이쪽을 봐야한다.
# /etc/init.d/script  or /etc/rc.d/init.d/script  or service  현재 서비스 중인지를 확인하고 서비스하는 곳이다.


[서비스 실행]

( 현재 서비스 실행 )

# /etc/init.d/sshd restart

# /etc/rc5.d/S55sshd restart

# service sshd restart

  

( 부팅시 서비스 실행 )

# chkconfig sshd on 

# ntsysv


[예] sshd 서비스 Open

# service sshd start

# chkconfig sshd on

현재 서비스와 부팅 서비스를 같이 실행해야한다.


(예시1) 소스 형태로(Apache : /usr/local/apache2/*) 설치한 프로그램을 chkconfig 서비스 목록에 등록하기

■ 서비스 가동 스크립트

/usr/local/apache2/bin/apachectl (start|stop|restart)

운영체제에 등록을 해야 부팅시 운영체제가 관리 하여 실행할수 있음

■ 운영체제 chkconfig 서비스 목록에 추가 절차

# cp -p /usr/local/apache2/bin/apachectl /etc/init.d/apache2

(# ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache2)

# chkconfig --add apache2  /* 파일들을 링크해준다 */

# ls -l /etc/rc?.d/*apache2

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc0.d/K60apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc1.d/K60apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc2.d/S90apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc3.d/S90apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc4.d/S90apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 May 12 16:51 /etc/rc5.d/S90apache2 -> ../init.d/apache2*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc6.d/K60apache2 -> ../init.d/apache2*



■ 추가된 서비스 관리 방법

# chkconfig apache2 on

# service apache2 restart


(예시2) 타 회사 벤더의(ex : Oracle ) 설치된 소프트웨어를 chkconfig 서비스 목록에 등록하기

■ 서비스 가동 스크립트

/oracle/bin/oracle.sh (start|stop|restart)

■ 운영체제 chkconfig 서비스 목록에 추가 절차

# cp -p /oracle/bin/oracle.sh /etc/init.d/oracle.sh# chkconfig --add oracle.sh

■ 추가된 서비스 관리 방법

# chkconfig oracle.sh on

# service oracle.sh (start | stop | restart )

(예시3) 설치된 소프트웨어의 기동 스크립트가 start / stop/restart  인자를 받지 않는 경우에 chkconfig 서비스 목록에 등록하기 

■ 서비스 가동 스크립트

/tomcat/bin/[startup.sh|shutdown.sh]

■ 운영체제 chkconfig 서비스 목록에 추가 절차

# cd /etc/init.d

# cp sshd new

# vi new    

#!/bin/bash

#

# chkconfig: 2345 55 25     /* # chkconfig new on -> 2/3/4/5 runlevel : on */

# description: Test Script  /* /etc/rc5.d/S55new, /etc/rc5.d/K25new */

#

/* 중간에 공백이 없을시 처음부터 이어지는 #은 주석이 아닌 실행되는 문장임*/

case "$1" in

start)

/tomcat/bin/startup.sh

;;

stop)

/tomcat/bin/shutdown.sh

;; 

restart)

/tomcat/bin/shutdown.sh

/tomcat/bin/startup.sh

;;   

*)

echo $"Usage: $0 {start|stop|restart}"

           RETVAL=1

esac

exit $RETVAL


# chkconfig --add new


■ 추가된 서비스 관리 방법

# chkconfig new on

# service new restart










'Linux > Linux Server' 카테고리의 다른 글

스케줄링 관리  (0) 2017.09.05
사용자 그룹 관리  (0) 2017.09.05
Software 관리_Source file  (0) 2017.09.01
Software 관리_YUM  (0) 2017.09.01
Software 관리_RPM  (0) 2017.08.31