Server/Linux

Linux // 부팅 프로세스

깨래 2018. 3. 21. 15:34


리눅스 부팅 프로세스

1. Power On & ROM BIOS 실행

- BIOS (Basic Input Output System) 실행

- BIOS는 POST ( Power On Self Test )을 수행하며

  하드웨어 장치들을 하나씩 인식하며 이상 유무 확인

- 부팅 장치를 선택하여 해당 장치(디스크) 첫 섹터(Sector)에서

  MBR(Master Boot Record)을 읽어, 부트로더 (Boot Loader)가 로딩된다.

2. 부트로더 실행

- 부팅메뉴 선택 ( /boot/grub/grub.conf )

- 부팅메뉴 파일에 명시된 설정에따라 커널이미지(vmliuz) 파일과 

  램디스크초기화 이미지파일(initrd)을 실행한다.

- 부트로더는 init 프로세스 실행

리눅스 부트로더 

Old Version -> LILO

New Versoin -> Grub (GRand Unified Bootloader)


3. init 프로세스 실행

- /etc/inittab 파일을 참조하여 설정된 Runlevel를 확인하여 부팅 레벨을 결정

#cat /etc/inittab

id:3:initdefault: <- [id]:[Runlevel]:[option] 


Runlevel - 시스템을 어떤 방식으로 부팅할 것인가를 분류해 놓은 것

0 - 시스템 종료

1 - 싱글모드 (안전모드)

2 - 네트워크 기능이 없는 다중 사용자 모드

3 - 네트워크 기능이 있는 다중 사용자 모드  

4 - 사용하지않음 

5 - X-Windows 그래픽 환경 부팅

6 - 시스템 재부팅

시스템종료 시스템 재부팅

#init 0 #init 6

싱글 유저 모드

- root password 분실 시 변경하고자 할때 사용

(1) 부팅 후 GRUB부팅 메뉴로 진입하여 "E"키를 눌러 설정을 편집한다.

(2) 부팅 옵션에 싱글모드를 의미하는 숫자 "1" 혹은 "single"을 입력한다. (일시적)

(3) "Enter"키를 눌러 저장 후, "B"키를 눌러 부팅을 한다.

(4) 로그인 과정없이 root 권한을 가지게 된다.

     - password 변경, /etc/fstab 수정 등 부팅이 안되는 문제를 수정할 수 있다.

GRUB 부트 메뉴에 암호 설정

#grub // grub 프로그램 실행

grub> md5crypt // md5 알고리즘을 이용하여 입력한 문자열을 암호화

md5crypt

Password: blackpink // 

blackpink // 평문으로 노출

Encrypted: $1$60l2P/$qx/xiouscLn3bdw2frPeU/ //암호된 패스워드 

$1$60l2P/$qx/xiouscLn3bdw2frPeU/

#vi /boot/grub/grub.conf // 부트메뉴 설정 파일

password --md5 $1$60l2P/$qx/xiouscLn3bdw2frPeU/ // 상단에 추가

재부팅 후에 부트로더 메뉴로 진입하여 설정을 편집하기 위해 "e"키를 입력은 할 수 없다.

패스워드를 먼저 입력 "p" 해야 편집(e)키가 활성화 된다.

- inittab 파일에 의해서 부팅 레벨 결정 후, /etc/rc.d/rc#.d/* 모든 스크립트 파일이 실행된다.  ( # <- 런레벨 )

  

  런레벨 3 -> /etc/rc.d/rc3.d/ 디렉토리에 위치한 스크립트가 실행된다.

  K (KILL)  - 해당 부팅 레벨로 동작 시 사용하지 않는 스크립트

  S (START) - 해당 부팅 레벨로 동삭 시 사용할 스크립트

  숫자      - 우선 순위

  

  부팅 시 실행할 스크립트 제어하는 명령어

  #chkconfig --list // 시스템에 등록된 데몬을 리스트 형태로 출력

[데몬명]     [                                               런레벨

  sshd            0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

  #chkconfig --list [데몬명] // 해당 데몬의 설정만 확인

  #chkconfig [데몬명] on         // 부팅 가능한 런레벨에서 모두 활성화

  #chkconfig [데몬명] off         // 부팅 가능한 런레벨에서 모두 비활성화

기본 값은 각 스크립트 파일에 명시가 되어 있다.

[root@Server-A rc3.d]# vi S55sshd


#!/bin/bash

#

# sshd          Start up the OpenSSH server daemon

#

# chkconfig: 2345 55 25

[런레벨] [동작 우선 순위] [종료 우선 순위]

  

  ex) chkconfig sshd on

-> 런레벨 2,3,4,5에서는 활성 시킨다.

chkconfig sshd off

-> 런레벨 2,3,4,5에서는 비활성 시킨다.

ex) sshd 데몬을 부팅 시 활성하지 않겠다.

#chkconfig sshd off

#chkconfig --list sshd

sshd            0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제

#chkconfig sshd on

#chkconfig --list sshd

sshd            0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

특정 런레벨에서 동작 여부 설정

#chkconfig --level [#] [데몬명] [on|off|reset]

ex) 런레벨 3에서는 sshd 가 동작하지 않도록 설정

#chkconfig --level 3 sshd off

#chkconfig --list sshd

sshd            0:해제 1:해제 2:활성 3:해제 4:활성 5:활성 6:해제

ex) 런레벨 3에서는 sshd 가 동작하도록 설정

#chkconfig --level 3 sshd on

#chkconfig --list sshd

sshd            0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

문제

크론(예약 작업)이 사용하는 crond 프로그램이 런레벨 3으로 부팅 시 시작되지 않도록 설정

chkconfig 명령어를 이용하여 crond 동작 여부를 설정하고 재부팅 하여 crontab 명령어 사용 가능 여부 확인

#chkconfig --list crond // crond 데몬 동작 상태 확인

crond          0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

#chkconfig --level 3 crond off 혹은 #chkconfig crond off

#reboot

service - 데몬의 상태를 관리하는 명령어

#service [데몬명] [stop|start|restart|status]

ex) crond 데몬의 상태 확인

#service crond status

ex) crond 데몬을 실행

#service crond start

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

#service network restart 

데몬은 설정파일을 참고하여 동작을하는데,

설정파일에 내용이 변경이되면 데몬을 재시작을 하여

변경된 내용이 적용되도록 해야한다.

4. 로그인 프로름트 및 X-Windows 실행

시스템 초기화 및 관리 프로세스의 종류와 동작 순서

과거 - init -> inittab -> rc.sysinit 5.x (init)

현재 - init -> inittab -> rcS.conf -> rc.conf -> rc.local 6.x (init + upstart)

미래 - init프로세스가 사라지고 systemd 프로세스가 모든 프로세스를 관리한다. 7.x (systemd)

리눅스가 부팅 시 읽어드리는 설정 파일의 순서

-> rcS.conf -> rc.conf -> rc.local

Server-A를 GUI환경으로 사용할 수 있도록 X-Windows 패키지 설치

#yum -y groupinstall "X Windows System" "Desktop" "Fonts" "Korean Support"

#init 5

Server-A 부팅 시 런레벨 5로 동작하도록 설정 (영구적용)

/etc/inittab 파일 수정