본문 바로가기
서버/Linux

[Linux] 부팅 프로세스

by 느링 2017. 10. 23.

리눅스 부팅 프로세스

리눅스 시작 프로세스 (Linux startup process)는 리눅스를 부팅하는 동안 이루어지는 여러 단계로 이루어진 초기화 프로세스입니다.

 

부팅이란 부트스트랩의 준말로써 컴퓨터를 동작시키는데 필요한 프로그램이나 과을 의미합니다.

구체적으로 컴퓨터의 전원이 켜진 후 컴퓨터가 자체적으로 하드웨어를 검사하고 컴퓨터가 운영체제를 읽어서 기능을 수행할 수 있게 되기까지의 과을 말합니다.

 

리눅스를 부팅하는 과정은 여러 단계와 소프트웨어 구성요소가 더불어서 이루어집니다.

power on & BIOS(바이오스) 구동 → MBR 부트로더  커널 파일 시스템 마운트 → 사용자 프로세스 실행

 

리눅스 시작 프로세스의 구성요소는 다음과 같습니다.

 

1. BIOS : 기본적인 I/O 시스템으로 MBR을 실행합니다.

2. MBR : 마스터 부트 레코드로 GRUB을 실행합니다.

3. GRUB : Grand Unified Bootloader 커널을 실행합니다.

4. Kernel : /sbin/init을 실행합니다.

5. Init : runlevel 프로그램을 실행합니다.

6. runlevel : /etc/rc.d/rc*.c/ 실행합니다.

 

리눅스 부팅 과정

① Power ON & ROM BIOS

- 전원이 들어오면 CPU가 ROM(Read Only Memory)에 저장된 BIOS (Basic Input Output System) 실행합니다.

- BIOS는 (POST.Power On Self Test) 자체 진단 기능을 수행하며 하드웨어 장치들을 하나씩 인식하며 이상유무합니다.

- 부팅 장치(HDD)를 선택하여 부팅 디스크의 첫 섹터(Sector)에서 MBR (Master Boot Record)을 읽어, 부트로더 (Boot Loarder)가 로딩이 됩니다.

 

※ BIOS (Basic Input Output System)

BIOS는 시스템의 ①무결성을 검사하고, ②부트로더 프로그램을 검색하여, 적재하고, 실행시킵니다.

BIOS 시작 과정에서 MBR이 저장되어 있는 매체의 우선순위 순서를 변경할 수 있습니다.

부트로더 프로그램을 감지하고 메모리에 적재하면, BIOS는 제어를 적재된 부트로더 프로그램에 넘깁니다.

 

※ MBR (Master Boot Record)

MBR은 마스터 부트 레코드(Master Boot Record)를 의미합니다.

부팅 가능한 디스크에서 첫 번째 섹터에 위치하며, /dev/hda 혹은 /dev/sda 입니다.

MBR은 GRUB 부트 로더를 실행합니다.

MBR의 사이즈는 512바이트 이하이며, 다음과 같이 3개의 구성요소로 이루어져 있습니다.

1) 부트 로더 정보 (처음 445바이트)

2) 파티션 테이블 정보 (그 다음 64바이트)

3) mbr 적합성 검사 (2바이트)

 

 부트로더 실행

- 부팅 메뉴 실행 ( /boot/grub/grub.conf )합니다.

실행할 운영체제와, 실행 시 사용할 옵션을 선택

- Kernel 이미지와, initrd (램디스크 초기화) 이미지를 실행합니다.

- 부트로더 init 프로세스를 실행합니다.

(CentOS에서 부팅 시 카운트가 끝나기 전에 아무 키나 누르면 진입할 수 있고 아무키도 누르지 않으면 기본값인 CentOS 실행한다.)

 

※ GRUB (Grand Unified Boot loader)

Splash 스크린 표시를 하고, 아무것도 입력하지 않으면 Grub 설정 파일에 지정된 기본 커널 이미지를 로드합니다.

Grub의 설정 파일은 /boot/grub/grub.conf이며, GRUB의 역할은 커널과 initrd 이미지를 실행시키는 것입니다.

 

※ Kernel

커널은 Grub.conf에서 "root="로 표기된 루트 파일 시스템을 마운트하고, /sbin/init 프로그램을 실행합니다.

/sbin/init 프로그램은 리눅스가 부팅된 후 최초로 실행되는 프로세스로써 PID가 자동으로 1번이 지정됩니다.

리눅스를 시작하고 종료시키는 모든 과정을 통제합니다.

init프로그램은 init script라고 불리는 작업을 진행하게 되는데 그것은 /etc/inittab 파일을 불러들이는 것을 말합니다.

Initrd (initial Ram disk) 커널이 진짜 루트 파일 시스템을 마운트 할 때까지 일시적인 루트 파일 시스템을 사용하는데, 디스크의 파티션에 접근하거나 다른 하드웨어를 접근하는데 필요한 드라이버가 컴파일되어 들어있습니다.

 

3. init 프로세스 실행

- /etc/inittab 파일을 참조하여 설정된 Runlevel을 확인하여 부팅 레벨(환경) 결정합니다.

- 시스템 초기화 및 관리 설정 파일을 실행합니다.

과거 System V init ( init -> inittab -> rc.sysinit ) 5.X

현재 System V init + Upstart ( init -> inittab -> rcS.conf -> rc.conf -> rc.local ) 6.X

(빨간색 순서 잘 기억하기)

미래 Systemd ( init 프로세스가 사라지고, systemd 프로세스가 모든 프로세스를 관리 ) 7.X

 

※ Init

/etc/inittab file에서 Linux run level을 결정합니다.

아래의 가능한 run levels이 있습니다

0 - halt

1 - Single user mode

2 - 다중 사용자, NFS 제외

3 - 완전 다중 사용자 모드

4 - 사용되지 않음

5 - x11

6 - 재부팅

Init은 /etc/inittab에서 디폴트 initlevel을 가리키며, 그것을 이용하여 모든 적합한 프로그램을 메모리에 적재합니다.

보통 디폴트 run level을 3혹은 5를 설정합니다.

 

※ Runlevel

리눅스 시스템이 부팅될 때, 시스템을 어떤 방식으로 부팅할 것인가를 분류해 놓은 것입니다.

이런 프로그램들은 runlevel프로그램이며, run level로 정의된 디렉터리에서 실행이 됩니다.

기본 init level 설정에 달려있으며, 시스템은 다음과 같은 디렉터리 중 하나에서 프로그램을 실행합니다.

 

☞ runlevel 필드 확인

# vi /etc/inittab

initdefault → 부팅 시 실행 할 런레벨을 지정할 때 사용하는 옵션

[id]:[runlevel]:[옵션]

 

runlevel 목록

0 - 시스템 종료

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

싱글 유저 모드 부팅 실패 시, 로그인 분실 시 사용

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

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

4 - 사용하지 않음 (Unused)

5 - GUI환경으로 부팅 ( X-Windows )

6 - 시스템 재부팅

 

부팅 시 runlevel을 변경하는 방법

1. 영구적

/etc/inittab 파일의 runlevel 필드를 변경

2. 일시적

- 부팅 메뉴에서 옵션을 수정 하는 방법

- #init 명령어 사용하는 방법 ex) init 0 (시스템 종료), init 6 (시스템 재부팅)

 

싱글 유저 모드 실습하기

(1) Server-A 재부팅

(2) GRUB 부트로더가 자동으로 운영체제를 실행하기 전에, 아무키나 입력하여 부팅 메뉴로 진입

 

(3) "e" 키를 눌러 옵션을 편집모드 진입

    두번째 행의 옵션을 편집하기 위해  "e" 키를 입력

 

(4) 마지막 부분에 싱글 유저 모드를 뜻하는 숫자 "1" 혹은 "single"옵션을 입력 후 Enter키를 눌러 저장

 

(5) "b" 키를 눌러 부팅을 진행

로그인 절차 없이 root의 권한으로 문제를 해결할 수 있습니다.

 

하지만 아무나 root 권한을 가지고 사용할 수 없습니다.

일단 Xshell을 가지고는 싱글 유저 모드에 진입 할 수 없지만 실제 내 컴퓨터 앞에 있다면 싱글 유저 모드에 진입할 수 있습니다.

 

⇒ grub 부트로더에 보안 기능을 추가하여 이러한 문제를 예방할 수 있습니다.

 

grub 부트로더에 보안 기능 추가하기

# grub → grub 부트로더 설정 프로그램

 

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

중요한 암호이기 때문에, 혹시라도 잘못 입력하여

리눅스를 재설치하는 일이 없도록 사용자에게 패스워드를 출력해줍니다.

 

암호화된 내용을 복사해두기

Encrypted: $1$LYwvX/$DvIUSNZ0QV62fqebRSd79/

 

# vi /boot/grub/grub.conf 파일 수정

 

 

재부팅 후, "p"입력하여 패스워드를 입력해야 설정을 편집할 수 있습니다.

 

 

즉, grub패스워드를 알지 못하면 싱글 유저 모드로 진입할 수 없습니다.

 

runlevel 3으로 실습하기

runlevel 3으로 부팅 시 (/etc/rc.d/rc3.d/*)스크립트들을 실행합니다.

/etc/rc.d/rc#.d/*    스크립트 파일이 실행 ( #숫자 → runlevel )

/etc/rc.d/rc3.d 디렉터리로 이동 후 스크립트 확인

 

스크립트 파일의 의미

K35dhcpd → K (KILL) 해당 부팅 레벨로 동작 시 실행하지 않는 스크립트

S55sshd → S(START) 해당 부팅 레벨로 동작 시 실행 할 스크립트

숫자 → 우선순위

 

S55sshd → sshd 스크립트가 런레벨3으로 동작시 자동으로 실행

 

# chkconfig - 서비스 데몬의 실행 레벨을 저장하고 관리해주는 명령어

 

chkconfig --list → 현재 시스템 내에 모든 데몬의 목록 출력

chkconfig --list [데몬명] → 특정 데몬의 런레벨마다 동작 여부 확인
chkconfig [데몬명] [ on | off | reset ] → 해당 런레벨[숫자]에서 활성 | 비활성 | 리셋

chkconfig --level [숫자] [데몬명] [ on | off | reset ] → 해당 런레벨[숫자]에서 활성 | 비활성 | 리셋

 

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

 

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

 

# service sshd restart

데몬을 중지 후, 시작하는 효과

서버 프로그램이 사용하는 설정 파일의 내용을 변경한 후에 프로그램에 적용하기 위해 자주 사용하는 형식

 

**

시스템에 불필요한 프로그램(데몬)이 동작하고 있다면, 중지(stop)시키거나

다음 번 부팅 시 동작하지 않도록 해주는 것이 시스템 최적화의 기본이다.

 

 

X-Windows 실행

 

5 - GUI 환경으로 부팅 (X-Windows)

 

X-Windows 및 관련 패키지 그룹 설치

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

 

X-Windows 실행

init 5 명령어를 입력해줍니다.

 

부팅 시 런레벨을 5로 변경합니다. (영구설정)

#vi /etc/inittab

id:3:initdefault    -->    id:5:initdefault

 

재부팅 후에도 X-Windows 환경으로 부팅

VMware에서 X-Window 실행 시 설정 무시하고 다음 단계로 진행 (로그인 화면까지)

 

스냅샷 찍어두기 (X-Windows설치)

 

'서버 > Linux' 카테고리의 다른 글

[Linux] 본딩 ( bonding )  (0) 2017.10.24
[Linux] 네트워크 관련 파일  (0) 2017.10.24
[Linux] find & xargs & du  (0) 2017.10.23
[Linux] quota (쿼터) 설정  (0) 2017.10.23
[Linux] RAID (4) 0,1,5의 고장과 원상 복구하기  (0) 2017.10.23