부팅 장애 해결을 위한 리눅스 OS의 부팅 과정 설명
목차
부팅 과정을 알아야 하는 이유
시스템의 전원이 시동 되고 난 이후 운영체제까지 부팅 되는 과정을 이해하여 부팅 문제가 발생할 경우 대응할 수 있는 능력을 가지기 위함
부팅이란 ?
부팅이란 말의 어원은 boot + strap이라는 긴 부츠에 달린 고리를 뜻한다. 일반적으로 한 번 시작되면 알아서 진행되는 일련의 과정을 뜻한다.
19세기 미국에서 영역을 개척하거나 건설하는 과정에서 사용하기도 하였으며, ‘pull oneself up by one’s bootstraps’이라는, 불가능한 일을 해낸다는 관용어구가 생겼다. 그리고 그 의미가 변화하여, 도움받지 않고 스스로의 상황을 개선시킨다는 의미가 되었다.
컴퓨터에서는 부트스트래핑 과정을 줄여서 부팅이라는 용어가 생겼으며, 컴퓨터를 켜고 운영체제 및 기타 SW를 실행하는 과정을 말하게 되었다.
전원을 켜고 리눅스 OS까지 부팅 되는 과정
Step 01. 컴퓨터에 전원 On
각 하드웨어 장치에 전원이 공급된다. (CPU, 메모리, 그래픽 카드, 메인보드 등)
Step 02. POST 단계 (Power-On Self Test)
컴퓨터가 구성하는 주요 하드웨어가 정상적으로 작동하는지 셀프 테스트를 실시
Step 03. 부팅 될 장치 선택
주로 HDD, SSD가 선택되며, USB 등 다른 장치로도 가능
BIOS 혹은 UEFI에서 선택 부팅 장치를 선택하게 된다. 주로 디스크를 읽기 전 BIOS 모드라고 불리는 곳에 진입하면 부팅 장치 순서를 정할 수 있다.
Step 04. 선택된 부팅 장치에서 첫 번째 섹터(0번)에 위치한 MBR(혹은 GPT)를 읽어서 부팅 파티션을 찾는다
운영체제가 설치된 파티션을 찾아서 운영 체제의 부트 섹터를 찾아서 실행하게 된다.
MBR(Master Boot Record)
- 512 바이트의 크기(0~511)로 각 파티션에 대한 정보를 가지고 있다.
- 기본적인 Primary Partition은 4개까지 생성되나 그 이상 생성을 원할 경우 1개를 확장 파티션(Extended Partition)으로 만들어서 원하는 수 만큼 확장이 가능하다. (디스크 성능에 따라 다름)
- 32 bit 주소 체계를 가지기에 최대 2TB까지 지원한다.
- 주로 BIOS 기반 컴퓨터에서 사용된다. 간단하고 오래된 시스템과 호환성이 좋다.
GPT (Guid Partion Table)
- MBR은 고정된 영역으로 제약 사항으로 되어 디스크 크기와 파티션 수를 제한하는데 반해 GPT는 고정 크기를 가지지 않고 유연한 구조를 가지고 있다.
- 최대 128개의 파티션을 지원한다.
- 64 bit 주소 체계를 가지며 파티션 최대 크기는 9.4ZB까지 지원한다.
- GPT 방식이 MBR 보다 더 많은 기능과 확장성, 용량 등에 유리하며, 주로 UEFI 방식과 함께 사용된다.
| MBR | GPT | |
|---|---|---|
| 최대 파티션 용량 | 2TB | 9.4ZB |
| 최대 파티션 수 | 4개의 Primary Partition 또는 3개의 Primary Partition 및 1개의 확장 파티션을 이용한 Logical Pration 추가 가능 | 128개의 Primary Partition |
| 지원하는 펌웨어 인터페이스 | BIOS | UEFI |
| 지원 운영체제 | Windows 7 또는 이전 운영체제 | 최신 Windwos 시스템 |
Step 05. Linux 부트 로더 실행 (GRUB2)
리눅스가 실행되기 전에 Kernel 선택 화면을 본 적이 있을 것이다. 다르게 생각하면 아직 커널도 적재되지 않은 상태라는 의미이다.

부트 로더의 핵심적인 기능은 다음과 같다
- 여러 커널 중 어떤 커널을 선택할 것인가
- 커널 매개 변수를 편집하여 커널이 메모리에 적재될 때 해당 매개 변수로 OS가 종료되기 전까지 실행하게 된다
- Single mode로 진입할 수 있다
- 다른 운영 체제로도 부팅할 수 있게 해준다.
앞 서 설명한 MBR, GPT에 나오는 부트 로더와 운영체제의 부트 로더는 다른 것이다. MBR의 경우 첫 번째 섹터에서 부터 시작되어 일반적으로 사용자가 선택한 운영체제가 설치된 부팅 파티션으로 제어를 넘기는 역할을 한다.
이후 GRUB과 같은 OS 부트로더는 운영 체제를 부팅하기 위한 고급 부트 로더이다. 운영체제의 특정 파티션에 설치되어(일반적으로 sda1) 리눅스 혹은 다른 OS를 찾아서 부팅하게 된다.
Step 06. Kernel 적재 및 실행
GRUB2에서 사용자가 커널을 선택하게 되면 디스크 파티션(일반적으로 sda1)에 위치한 커널을 읽어서 메모리에 적재하게 된다.
이후 실제 커널이 실행하게 되면서 기본적인 초기화 작업을 진행하게 되며, initramfs을 메모리에 로드하게 된다.
initramfs는 작은 루트 파일 시스템으로, 루트 파일 시스템을 마운트하기 위한 초기화 스크립트와 드라이버를 가지고 있다
slab 영역 대한 설명
- 커널이 내부적으로 사용하는 영역이다. 커널 역시 프로세스의 일종이기 때문에 메모리를 필요로 하며, 조금 특별한 방법으로 메모리를 할당 받아서 사용한다.
- slab : 메모리 영역 중 커널이 직접 사용하는 영역을 Slab이라고 한다
- SReclaimable : Slab 영역 중 재사용될 수 있는 영역이다.
- SUnreclaim : Slab 영역 중 재사용될 수 없는 영역이다

Step 07. 초기(init) 프로세스 실행 후 루트 파일 시스템 마운트
초기(init) 프로세스를 시작하는데 initramfs 내의 초기화 스크립트를 실행하여 필요한 드라이버를 로드하게 된다. 그 이후 실제 루트 파일 시스템을 마운트하게 된다.
systemd(과거에는 /sbin/init)라는 초기 프로세스(PID 1)이 생성되면서 시스템이 초기화 되면서 User Space(사용자 공간)을 생성한다. (커널 공간은 이미 커널이 메모리에 적재될 때 생성된다)
리눅스의 모든 프로세스의 최고 부모 프로세스인 init 프로세스는 과거에는 리눅스의 정통성에 따라 하나의 작업을 먼저 잘 처리 하자라는 철학으로 개발되었으나 CPU의 멀티 프로세서가 발전함에 따라 systemd라는 init 프로세스를 개발하여 동시에 멀티 프로세스 실행할 수 있고 병렬로 서비스를 시작하게 하는 등 다양한 기능을 제공하게 만들었다.
이제 콘솔에 로그인 창이나 SSH를 이용해 접속이 가능하도록 프로세스가 실행되고 나면 여러분들은 리눅스를 사용할 수 있다.