부트로더와 UEFI: 커널 실행까지 이어지는 부팅 경로

부트로더가 BIOS·UEFI 환경에서 커널을 적재하는 과정과 GRUB, Windows Boot Manager, Secure Boot, PXE 구성을 정리합니다.

2026-08-14 · 최초 발행 2026-01-02

전원 투입 뒤 커널까지 이어지는 실행 경로

부트로더는 전원이 들어온 직후 운영체제 커널을 메모리에 올리고 실행 제어를 넘기는 소프트웨어다. BIOS 또는 UEFI 펌웨어가 하드웨어를 초기화한 뒤 부팅 대상을 찾으면, 부트로더는 디스크의 커널 이미지와 초기 RAM 디스크를 읽어 커널 실행을 준비한다.

PC에서는 GRUB과 Windows Boot Manager가 대표적이다. 임베디드 환경에서는 U-Boot, RedBoot 등이 사용된다. 여러 운영체제가 설치된 시스템에서는 선택 메뉴를 제공하고, Secure Boot가 활성화된 환경에서는 서명을 검증해 신뢰할 수 없는 부트로더의 실행을 막는다.

부팅은 전원 공급과 CPU 리셋 벡터 실행으로 시작한다. 이어 BIOS 또는 UEFI가 POST(Power-On Self-Test)를 수행하면서 CPU, 메모리, 디스크를 검사하고 하드웨어를 초기화한다. 오류는 비프음이나 LED로 표시될 수 있다.

그 다음 펌웨어는 설정된 부팅 순서에 따라 부팅 가능한 장치를 찾는다. BIOS는 MBR(Master Boot Record)을, UEFI는 EFI System Partition을 읽는다. 여기서 부트로더가 실행되고, 필요하면 다음 단계 부트로더와 운영체제 선택 메뉴를 거친다. 부트로더가 커널과 initrd/initramfs를 메모리에 적재하면 커널은 메모리와 드라이버를 초기화하고 PID 1인 init 프로세스를 시작해 사용자 공간으로 전환한다.

전원 투입POST(하드웨어 검사)BIOS/UEFI실행부트 장치탐색1단계부트로더2단계부트로더OS 선택메뉴커널로드커널초기화init/systemd실행사용자 공간전환

BIOS와 UEFI가 부트로더를 찾는 방식

BIOS(Basic Input/Output System)는 16비트 실모드에서 동작하며 MBR 방식을 사용한다. 이 방식에서는 디스크 크기가 2TB로 제한되고 Primary 파티션은 최대 4개까지 둘 수 있다.

MBR은 첫 512바이트에 위치한다. 이 중 부트로더 코드는 446바이트, 파티션 테이블은 64바이트이며, 마지막 2바이트는 부트 시그니처 0x55AA다. BIOS는 MBR의 첫 512바이트를 읽고 446바이트 부트로더 코드를 실행한 뒤, 활성 파티션에서 운영체제 커널을 로드한다.

UEFI(Unified Extensible Firmware Interface)는 32비트 또는 64비트 보호 모드에서 동작하고 GPT(GUID Partition Table)를 사용한다. 2TB 이상 디스크를 지원하며 최대 9.4ZB까지 다룰 수 있고, 파티션은 128개 이상 만들 수 있다. Secure Boot도 UEFI 환경에서 제공된다.

UEFI 부트로더는 FAT32 파일 시스템의 EFI System Partition(ESP)에 놓인다. /EFI/BOOT/BOOTX64.EFI 같은 부트로더 파일을 저장하고, 운영체제별로 /EFI/ubuntu/, /EFI/Microsoft/처럼 디렉터리를 구분할 수 있다. UEFI 펌웨어는 ESP를 마운트하고 부트 변수에서 경로를 읽어 EFI 애플리케이션 형태의 부트로더를 실행한다. 이후 부트로더가 커널을 적재한다.

GRUB이 리눅스 부팅에서 맡는 일

GRUB(GRand Unified Bootloader)은 Linux, Windows, BSD 등 여러 운영체제를 부팅할 수 있다. ext4, XFS, Btrfs, NTFS 등의 파일 시스템을 직접 읽고, 대화형 셸과 PXE 네트워크 부팅도 제공한다.

GRUB Legacy는 0.x 계열이고, 현재 표준인 GRUB 2는 1.9x부터 이어지는 모듈형 설계를 사용한다. 전통적인 부팅 구성에서는 Stage 1, Stage 1.5, Stage 2로 역할을 나눠 처리한다.

Stage 1인 boot.img는 MBR 또는 파티션 부트 섹터에 있으며, MBR에서는 446바이트 또는 512바이트 크기로 Stage 1.5나 Stage 2를 로드한다. core.img인 Stage 1.5에는 파일 시스템 드라이버가 포함되어 /boot/grub 디렉터리에 접근할 수 있다. Stage 2는 /boot/grub에서 grub.cfg를 읽고 메뉴를 표시한 뒤 사용자의 선택에 따라 커널을 로드하고 실행한다.

다음은 grub.cfg의 부팅 항목 예시다.

menuentry 'Ubuntu' {
    set root='hd0,gpt2'
    linux /vmlinuz-5.15.0 root=/dev/sda2 ro quiet splash
    initrd /initrd.img-5.15.0
}

menuentry 'Windows' {
    insmod chain
    set root='hd0,gpt1'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

set root는 루트 파티션을 지정한다. linux는 커널 이미지 경로와 커널 매개변수를 전달하고, initrd는 초기 RAM 디스크를 지정한다. chainloader는 다른 부트로더를 실행할 때 쓴다.

Windows의 부팅 설정은 BCD에 있다

UEFI 부팅에서 Windows Boot Manager는 bootmgfw.efi로 시작한다. 이 프로그램은 BCD(Boot Configuration Data)를 읽고 부팅 메뉴를 표시한 뒤 winload.efi를 실행한다. 이어 ntoskrnl.exe 커널이 로드된다.

Legacy BIOS 환경에서는 MBR의 bootmgr가 실행되고, BCD를 읽은 뒤 winload.exe를 실행해 커널을 적재한다.

BCD 저장소는 레지스트리 하이브 형식이다. UEFI에서는 ESP의 /EFI/Microsoft/Boot/BCD에, 다른 구성에서는 C:\Boot\BCD에 위치할 수 있다. bcdedit로 부팅 항목과 순서를 확인하거나 변경한다.

bcdedit /enum        # 부팅 항목 목록
bcdedit /set {default} description "Windows 11"
bcdedit /displayorder {default} {ubuntu}

임베디드 장치에서 쓰이는 U-Boot

U-Boot(Universal Boot Loader)은 ARM, MIPS, PowerPC 등 다양한 아키텍처를 지원하는 임베디드 부트로더다. TFTP와 NFS를 통한 네트워크 부팅, 메모리 테스트, 환경 변수 관리, hush shell 기반 스크립트 실행 기능을 제공한다.

라즈베리 파이, 임베디드 리눅스 보드, 라우터와 NAS가 활용 대상이다. 부팅 시에는 선택적으로 SPL(Secondary Program Loader)을 실행하고, U-Boot 본체를 로드한 뒤 환경 변수를 읽는다. 이후 boot.scr 부팅 스크립트를 실행해 커널과 디바이스 트리를 로드하고 커널 실행으로 넘긴다.

Secure Boot가 검증하는 신뢰 체인

Secure Boot는 부트로더와 커널의 무결성을 확인해 악성 부트킷(Bootkit)을 차단하고 신뢰할 수 있는 부팅 체인을 구성하기 위한 기능이다.

UEFI 펌웨어가 부트로더의 디지털 서명을 검증하고, 부트로더는 커널 서명을 검증한다. 커널은 다시 드라이버 서명을 확인한다. 각 단계에서 검증에 실패하면 부팅은 중단된다.

서명 검증서명 검증서명 검증검증 실패검증 실패검증 실패UEFI펌웨어부트로더(서명됨)커널(서명됨)드라이버(서명됨)부팅 중단부팅 중단부팅 중단

키 관리는 계층적으로 이루어진다. Platform Key(PK)는 최상위 키이며 제조업체가 소유하고 KEK 관리를 담당한다. Key Exchange Key(KEK)는 OS 벤더 키로서 db, dbx를 갱신한다. Signature Database(db)에는 허용된 서명 목록이 들어가고, Forbidden Signature Database(dbx)에는 취약점 발견 시 차단할 서명이 추가된다.

실제 루트 파일 시스템 전의 initrd와 initramfs

커널은 실제 루트 파일 시스템을 마운트하기 전에 임시 루트 환경이 필요할 수 있다. initrd/initramfs는 이 시점에 디스크, 파일 시스템, 네트워크 드라이버를 로드하고, 루트 파일 시스템 암호화 해제나 LVM·RAID 초기화를 수행한다.

initrd(Initial RAM Disk)는 ext2 형식의 실제 디스크 이미지이며 메모리에 블록 디바이스로 마운트된다. initramfs(Initial RAM File System)는 CPIO 아카이브를 tmpfs에 압축 해제하는 방식으로, 현대 리눅스의 표준이다.

부트로더가 initramfs를 메모리에 로드하면 커널은 이를 루트로 마운트하고 /init 스크립트를 실행한다. 필요한 드라이버를 올리고 실제 루트 파일 시스템을 마운트한 뒤 switch_root로 전환한다. 그 후 init 또는 systemd가 실행된다.

여러 운영체제를 하나의 부팅 메뉴로 다룰 때

GRUB은 여러 운영체제 커널을 인식하고 grub.cfg에 각 운영체제 항목을 추가할 수 있다. 부팅 메뉴에서 선택한 항목에 따라 해당 운영체제로 이어진다.

Windows와 Linux를 함께 설치할 때는 Windows를 먼저 설치한다. Windows가 MBR을 덮어쓰기 때문이다. 이후 Linux 설치 시 GRUB을 MBR에 설치하면, GRUB이 Windows Boot Manager를 체인로드할 수 있다.

듀얼부팅 구성에서는 Windows의 빠른 시작(Fast Startup)을 비활성화하고, 모든 운영체제의 UEFI 모드를 모두 UEFI 또는 모두 Legacy로 맞춰야 한다. Windows UTC와 Linux Local Time 사이의 시간대 설정 충돌도 확인 대상이다.

부팅 경로가 깨졌을 때의 복구 명령

GRUB이 손상된 경우에는 Live USB로 부팅한 뒤 대상 시스템을 마운트하고 chroot 환경에서 GRUB을 다시 설치한다.

sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi  # UEFI
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  # 또는 /dev/sda1 (UEFI)
update-grub
exit
reboot

Windows Boot Manager는 복구 USB로 부팅한 후 bootrec 명령으로 MBR, 부트 섹터, BCD를 복구할 수 있다.

bootrec /fixmbr      # MBR 복구
bootrec /fixboot     # 부트 섹터 복구
bootrec /rebuildbcd  # BCD 재구성

PXE로 네트워크에서 운영체제 시작하기

PXE(Preboot Execution Environment)는 네트워크를 통해 운영체제를 부팅하는 방식이다. 디스크리스 워크스테이션, 대규모 배포, 복구 환경에 사용된다.

PXE ROM은 먼저 DHCP 요청을 보낸다. DHCP 서버는 IP와 TFTP 서버 정보를 제공하며, 클라이언트는 TFTP를 통해 pxelinux.0 부트로더를 내려받는다. 부트로더는 커널과 initramfs를 다운로드하고, NFS 또는 iSCSI로 루트 파일 시스템을 마운트한다.

부트로더UEFIGRUB운영체제시스템 관리