부팅 순서와 BIOS·UEFI 시스템 초기화 흐름
전원 투입부터 POST, BIOS·UEFI, 부트로더, 커널, systemd 실행까지 이어지는 부팅 순서와 복구 흐름을 정리한다.
2026-08-14 · 최초 발행 2026-01-16
전원 인가 뒤 운영체제가 준비되는 경로
부팅순서(Boot Sequence)는 전원이 공급된 시점부터 운영체제 커널이 메모리에 적재되어 실행될 때까지의 초기화 과정이다. 하드웨어를 점검하고, 펌웨어가 부팅 대상을 찾으며, 부트로더와 커널이 차례로 제어권을 넘긴다. 마지막에는 Init 또는 systemd가 서비스를 올려 로그인 가능한 상태를 만든다.
| 단계 | 담당 주체 | 저장 위치 |
|---|---|---|
| POST | 하드웨어/펌웨어 | ROM/Flash |
| BIOS/UEFI | 펌웨어 | Flash Memory |
| 부트로더 | 소프트웨어 | MBR/ESP |
| 커널 | 운영체제 | 디스크 파티션 |
| Init/Systemd | 운영체제 | 디스크 파티션 |
CPU가 Reset Vector에서 실행을 시작할 때
전원 버튼을 누르면 PSU(Power Supply Unit)가 안정적인 전원 공급을 시작한다. Power Good 신호가 CPU에 전달되고 Reset 상태가 해제되면, CPU의 프로그램 카운터는 Reset Vector인 0xFFFF0으로 설정된다. BIOS 또는 UEFI 코드는 이 주소에서 실행을 시작한다.
POST가 확인하는 하드웨어 상태
POST(Power-On Self-Test)는 펌웨어가 이후 단계를 진행하기 전에 하드웨어 상태를 검사하는 절차다. CPU의 레지스터와 연산 기능, RAM 읽기·쓰기, 그래픽 카드, 입력 장치 컨트롤러, 디스크 컨트롤러 탐지가 여기에 포함된다.
AMI BIOS의 비프 코드는 POST 결과를 식별하는 단서가 된다.
| 비프 횟수 | 의미 |
|---|---|
| 1회 | 정상 POST 완료 |
| 2회 | 메모리 패리티 오류 |
| 3회 | 기본 메모리 오류 |
| 연속 | RAM 오류 |
| 없음 | 전원/CPU 문제 |
BIOS는 MBR을, UEFI는 ESP를 따라간다
레거시 BIOS는 CMOS에서 시스템 설정을 읽고 부팅 장치 순서를 확인한 뒤 MBR의 부트 코드를 로드한다. 하드웨어 초기화, 인터럽트 벡터 테이블 설정도 BIOS의 역할에 속한다.
MBR은 512 bytes로 구성되며, Boot Code는 446 bytes, Partition Table은 64 bytes를 차지한다. 파티션 정보는 16 bytes 단위로 4개가 들어가고, 마지막 2 bytes의 0x55AA는 유효한 MBR을 나타낸다.
MBR (512 bytes)
┌─────────────────────────────────────┐
│ Boot Code (446 bytes) │ ← 부트로더 코드
├─────────────────────────────────────┤
│ Partition Table (64 bytes) │ ← 4개 파티션 정보
│ - Partition 1 (16 bytes) │
│ - Partition 2 (16 bytes) │
│ - Partition 3 (16 bytes) │
│ - Partition 4 (16 bytes) │
├─────────────────────────────────────┤
│ Boot Signature: 0x55AA (2 bytes) │ ← 유효한 MBR 표시
└─────────────────────────────────────┘
UEFI는 Pre-EFI 초기화와 DXE(Driver Execution Environment)를 거쳐 BDS(Boot Device Selection)에서 부팅 대상을 선택한다. 이어 ESP에서 EFI 애플리케이션을 읽어 운영체제 부트로더를 실행한다.
| 항목 | BIOS | UEFI |
|---|---|---|
| 인터페이스 | 16비트 | 32/64비트 |
| 디스크 지원 | MBR (2TB 제한) | GPT (9.4ZB) |
| 부팅 속도 | 느림 | 빠름 |
| 보안 | 없음 | Secure Boot |
| 드라이버 | ROM 기반 | EFI 드라이버 |
| UI | 텍스트 | 그래픽 가능 |
GPT는 Protective MBR과 GPT Header, Partition Entry Array를 두며, LBA 2-33의 배열에는 최대 128개 파티션이 들어간다. EFI System Partition은 ESP로 사용되며 /boot/efi에 위치한다.
GPT Disk Layout
┌─────────────────────────────────────┐
│ Protective MBR (LBA 0) │
├─────────────────────────────────────┤
│ GPT Header (LBA 1) │
├─────────────────────────────────────┤
│ Partition Entry Array (LBA 2-33) │ ← 최대 128개 파티션
├─────────────────────────────────────┤
│ Partition 1: EFI System Partition │ ← ESP (/boot/efi)
├─────────────────────────────────────┤
│ Partition 2: OS Partition │
├─────────────────────────────────────┤
│ ... │
├─────────────────────────────────────┤
│ Backup Partition Array │
├─────────────────────────────────────┤
│ Backup GPT Header │
└─────────────────────────────────────┘
부트로더가 운영체제 선택을 넘겨받는 방식
부트로더는 멀티부팅 환경에서 운영체제를 선택하고 해당 커널을 실행하는 구간이다. Linux에서는 GRUB2가 vmlinuz, initramfs, 커널 파라미터를 순서대로 준비하며, Windows 경로에서는 Windows Boot Manager가 winload.exe로 이어진다.
GRUB2는 MBR 또는 ESP의 Stage 1에서 시작해 파일시스템 드라이버를 담은 Stage 1.5, /boot/grub의 Stage 2를 거친다. 이후 grub.cfg를 읽고 메뉴를 표시한 다음 커널을 로드한다.
# /boot/grub/grub.cfg
menuentry 'Ubuntu' {
set root='hd0,gpt2'
linux /boot/vmlinuz-5.15.0-generic root=/dev/sda2 ro quiet
initrd /boot/initrd.img-5.15.0-generic
}
menuentry 'Windows 10' {
insmod chain
set root='hd0,gpt1'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
커널과 initramfs가 루트 파일시스템에 도달하기까지
커널 이미지는 메모리에 로드된 뒤 압축 해제와 초기화를 수행한다. 메모리 관리, 인터럽트, 디바이스 드라이버 설정을 마치면 initramfs를 마운트하고 실제 루트 파일시스템으로 전환한 뒤 init 또는 systemd를 실행한다.
initramfs 또는 initrd는 초기 임시 루트 파일시스템이다. 디스크와 파일시스템에 필요한 드라이버를 포함하고 실제 루트 파티션 마운트를 돕는다. 암호화된 디스크를 해제하는 역할도 맡는다.
PID 1이 서비스와 로그인 환경을 준비하는 구간
커널은 PID 1을 실행한다. SysVinit 환경은 /etc/inittab을 사용하고, systemd 환경은 /lib/systemd/system을 바탕으로 default.target과 multi-user.target 또는 graphical.target에 도달한다. 서비스는 병렬로 시작되며 네트워크, 로깅, 보안 구성 뒤 로그인 매니저가 실행된다.
# 부팅 시간 분석
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
# 부팅 타겟 확인/변경
systemctl get-default
systemctl set-default multi-user.target
# 서비스 상태 확인
systemctl status sshd
Secure Boot가 검증하는 신뢰 사슬
UEFI Secure Boot는 펌웨어가 부트로더의 서명을 검증하고, 부트로더가 커널 서명을 검증하는 구조다. 각 검증에서 서명이 유효하지 않으면 부팅을 거부하고, 유효하면 신뢰된 운영체제로 진행한다.
키 체인에서는 PK(Platform Key)가 KEK(Key Exchange Key)로 이어지고, KEK는 허용 서명 DB와 차단 서명 DBX의 갱신 권한을 가진다. DB에는 Microsoft Key, Vendor Key, Custom MOK가 들어갈 수 있으며 DBX에는 차단된 악성코드 해시가 저장된다.
- PK (Platform Key): 펌웨어 소유자 (OEM)
- KEK (Key Exchange Key): DB/DBX 업데이트 권한
- DB: 허용된 서명 데이터베이스
- DBX: 차단된 서명 데이터베이스
- MOK: Machine Owner Key (Linux 용)
Linux와 Windows에서 이어지는 실행 경로
Linux는 UEFI 또는 BIOS에서 GRUB2로 진입한 뒤 vmlinuz, initramfs, switch_root, systemd(PID 1), default.target을 거쳐 로그인 화면에 이른다.
주요 파일은 다음 경로에 있다.
/boot/vmlinuz-*: 커널 이미지/boot/initrd.img-*또는/boot/initramfs-*: 초기 램디스크/boot/grub/grub.cfg: GRUB 설정/boot/efi/EFI/ubuntu/grubx64.efi: UEFI 부트로더
Windows는 UEFI에서 bootmgfw.efi를 실행하고 BCD를 읽은 뒤 winload.efi, ntoskrnl.exe, smss.exe, winlogon.exe, explorer.exe 순으로 진행한다.
bootmgfw.efi: Windows Boot ManagerBCD: Boot Configuration Datawinload.efi: Windows 로더ntoskrnl.exe: Windows 커널
실패한 단계에서 복구 지점을 찾는 법
부팅 실패는 POST 실패, 부트로더 오류, 커널 패닉, 서비스 실패로 나누어 확인할 수 있다. POST 실패라면 메모리·CPU·전원을 점검하고, 부트로더 오류에는 GRUB 재설치나 MBR 복구를 적용한다. 커널 패닉은 복구 모드와 드라이버 확인으로, 서비스 실패는 단일 사용자 모드와 서비스 비활성화로 접근한다.
# GRUB 복구 (Live USB 부팅 후)
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install /dev/sda
update-grub
exit
# Windows 부트로더 복구
bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd
로그와 부팅 시간 분석은 실패 지점과 지연 구간을 구분하는 데 사용한다.
# Linux 부팅 로그
journalctl -b # 현재 부팅 로그
journalctl -b -1 # 이전 부팅 로그
dmesg # 커널 메시지
# 부팅 시간 분석
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
부팅 구조를 단계별로 구분하면 장애의 원인이 하드웨어, 펌웨어, 부트로더, 커널, 서비스 중 어디에 있는지 좁힐 수 있다. UEFI의 GPT 지원과 Secure Boot, GRUB2의 멀티부팅, systemd의 서비스 병렬 시작은 현대 시스템의 부팅 경로를 구성하는 핵심 요소다.