0 단계 : 전원 스위치 ON 단계 (펌웨어 단계)
시스템 전원공급
메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행 한다.
BIOS 프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드된다.
CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행 한다
자체진단기능(POST(Power On Self Test))
CMOS검사, CPU, MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상 유무를 검사하고 이들 장치(하드웨어들)을 초기화시킨다.
부팅매체검색과 부트로더 실행
POST과정이 이상 없이 진행 완료되면 검색된 부팅매체(하드디스크, CD-ROM, 플로피 디스크등)에서 부트로더(예:GRUB, LILO)를 불러들인다.
즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어 들이게 된다.
부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더(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 -> 재부팅 */
/etc/grub/grub.conf 파일에 의해서 커널(vmlinuz)이 메모리상에서 실행되면, 하드웨어를 점검하고 /var/log/dmesg 파일에 기록을 한다.
루트 파일시스템(/)을 읽기 전용(Read Only)으로 마운트 한다. 만약 마운트 실패시 “커널 패닉” 메세지를 출력한다.
/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) : init가 SIGINT 시그널을 받았을 때 그 프로세스가 실행된다. SIGINT는 시 스템 콘솔에서 <CTRL+ALT+DEL> 키를 입력할 때 발생하는 시그널이다. 이것은 전형적으로 컴퓨터를 리부팅하거나, 단일 사용자 모드를 사용하기 위해서 사용된다. (powerfail) : powerwait과 같지만, init는 그 프로세스 작업이 끝나기를 기다리지 않는다. (powerokwait) : init가 SIGPWR 시그널을 받았을 때 그 프로세스가 실행된다. 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