Linux 리눅스 부팅 과정
boot 관련 문제를 해결하는데 Linux boot를 이해하는 것이 중요하다고 생각하여 공부한 것을 정리해본다.
Systemd
Centos7 이나 RHEL7 에서의 서비스 매니저이며 new system이다.
시스템의 초기화 및 관리 프로세스.
BOOT PROCEDURE
Boot Procedure
전반적인 동작 흐름
1. 시스템 전원 공급
사용자가 Power On을 하면 BIOS (Basic Input-Output System) 화면이 뜨게 된다.
이는 메인보드의 ROM-BIOS에 있는 BIOS 프로그램을 자동 실행하게 되는 것이다. BIOS 프로그램은 전원 공급이 됨과 동시에 메모리의 특정번지에 자동 Load된다.
2. BIOS
POST(Power On Self Test)가 수행되며 여기스 CPU, MEMORY, 그래픽 카드, 키보드, 마우스 등 각종 장치들의 이상 유무를 검사하고 이 하드웨어들을 초기화시키는 작업을 한다.
여기서 디스크 내에 있는 Master Boot Record(MBR)에 있는 코드를 메모리로 로딩을 하고 수행을 시킨다. 그럼 이 MBR이 부트로더를 로딩을 하게 된다.
부트로더( GRUB2 )가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더( GRUB2 ) 에게 주어진다.
3. 부트로더 실행
기본 default 부트로더 프로그램은 GRUB2(Grand Unified Boodloader)가사용된다.
GRUB2은 커널 이미지를 불러들이고 initrd( Ram Disk Init ) 이미지를 실행시키며 시스템 제어권을 커널에게 넘겨준다.
GRUB2 설정 파일은 /boot/grub2/grub.cfg 에 있다.
more /etc/default/grub
grub.cfg가 생성될때 GRUB2 메뉴 설정 세팅들이 /etc/default/grub로부터 불러들여진다.
4. 커널 단계
Grub.cfg에서 "root=" 로 표기된 루트 파일 시스템을 마운트하고, /sbin/init 프로그램을 실행한다.
/sbin/init 프로그램은 리눅스가 부팅된 후 최초로 실행되는 프로세스로써 PID가 자동으로 1번이 지정된다. 리눅스를 시작하고 종료시키는 모든 과정을 통제한다.
ps -ef | grep systemd
5. Init 프로세스 실행
/etc/inittab 파일을 참조하여 설정된 Runlevel을 확인한다.
시스템 초기화 및 관리 설정 파일들을 실행한다.
(CentOS7 버젼에서는 init 프로세스가 사라지고, systemd 프로세스가 모든 프로세스를 관리한다고 한다. )
# Init
/etc/inittab에서 Linux Run Level을 결정한다.
0 - halt
1 - Single user mode
2 - 다중 사용자, NFS 제외
3 - 완전 다중 사용자 모드
4 - 사용되지 않음
5 - x11
6 - 재부팅
보통 default runlevel 3 or 5 를 설정
# Runlevel
리눅스 시스템을 부팅할 때, 시스템을 어떤 방식으로 부팅할 것인가 분류해놓은 것.
기본 init level 설정에 따라 달라진다.
runlevel 목록
0 - 시스템 종료
1 - 싱글 유저 모드 (안전모드)
싱글 유저 모드 부팅 실패 시, 로그인 분실 시 사용
2 - 네트워크 기능이 없는 다중 사용자 모드
3 - 네트워크 기능이 있는 다중 사용자 모드
4 - 사용하지 않음 (Unused)
5 - GUI환경으로 부팅 ( X-Windows )
6 - 시스템 재부팅
부팅 시 runlevel을 변경하는 방법
1. 영구적
/etc/inittab 파일의 runlevel 필드를 변경
2. 일시적
- 부팅 메뉴에서 옵션을 수정 하는 방법
- #init 명령어 사용하는 방법 ex) init 0 (시스템 종료), init 6 (시스템 재부팅)
'OS,Network,Container' 카테고리의 다른 글
CentOS7 swap 파티션 추가, LABEL 작업 (4) | 2020.04.18 |
---|---|
리눅스 NTP 서버 개념 (NTP server) (2) | 2020.04.18 |
CentOS7 Parted로 LVM 생성, 확장 (PE, LE, e2label, xfs_admin ..) (1) | 2020.04.17 |
리눅스 명령어 모음 (6) | 2020.04.17 |
리눅스 LVM 기본 개념 ( Logical Volume Manager ) (0) | 2020.04.17 |