Linux 부팅 과정 — BIOS/UEFI에서 systemd까지

Linux 시스템이 전원 켜짐부터 로그인 프롬프트까지 도달하는 6단계 부팅 과정, BIOS vs UEFI, GRUB2, initramfs, systemd 순서를 상세히 설명합니다.

· 6 min read · PALDYN Team

지난 글에서 iptables NAT로 컨테이너 네트워크가 어떻게 동작하는지 살펴봤습니다. 이번에는 Linux 시스템이 전원이 켜지는 순간부터 로그인 프롬프트가 뜰 때까지 거치는 6단계 부팅 과정 전체를 단계별로 따라가 봅니다.

부팅 전체 흐름

Linux 부팅 단계

① BIOS / UEFI — 하드웨어 초기화

전원이 켜지면 CPU는 정해진 메모리 주소(x86: 0xFFFFFFF0)에 있는 펌웨어 코드를 실행합니다.

BIOS(Legacy):

  • POST(Power-On Self Test): RAM, CPU, 키보드 등 하드웨어 자가진단
  • MBR(Master Boot Record): 첫 번째 부팅 디스크의 첫 512바이트에 부트로더 코드 위치
  • 512바이트 제한으로 GRUB는 2단계로 분리됨 (stage 1 → stage 1.5 → stage 2)

UEFI(현대):

  • GPT 파티션 테이블 지원
  • EFI System Partition(ESP, FAT32, 일반적으로 /boot/efi)에서 부트로더 로드
  • Secure Boot: 디지털 서명으로 부트로더·커널 무결성 검증
  • 더 빠른 초기화, 대용량 디스크 지원
# UEFI 또는 BIOS 확인
ls /sys/firmware/efi && echo "UEFI" || echo "BIOS/Legacy"

# UEFI 부팅 항목 확인
efibootmgr -v

② 부트로더 — GRUB2

**GRUB2(GRand Unified Bootloader 2)**는 현재 대부분의 Linux 배포판이 사용하는 부트로더입니다.

# GRUB 설정 파일 위치
# BIOS: /boot/grub/grub.cfg
# UEFI: /boot/efi/EFI/ubuntu/grub.cfg

# GRUB 설정 재생성 (수정 후 반드시 실행)
sudo update-grub              # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # RHEL/Fedora

# 기본 설정 파일
cat /etc/default/grub

주요 GRUB 설정:

# /etc/default/grub
GRUB_DEFAULT=0            # 기본 부팅 항목
GRUB_TIMEOUT=5            # 선택 대기 시간
GRUB_CMDLINE_LINUX="quiet splash"  # 커널 파라미터
GRUB_DISABLE_RECOVERY="true"

GRUB 메뉴에서 e 키를 누르면 커널 파라미터를 임시로 수정할 수 있습니다. 복구 목적으로 init=/bin/bash를 추가해 직접 셸을 얻거나, rd.break로 initramfs 단계에서 멈출 수 있습니다.

③ 커널 초기화

GRUB가 vmlinuz(압축된 커널 이미지)를 메모리에 로드하면 커널이 자신을 압축 해제하고 초기화를 시작합니다.

vmlinuz 압축 해제
    → start_kernel() 함수 실행
    → 메모리 관리자 초기화 (MMU, 페이지 테이블)
    → 인터럽트 컨트롤러 초기화
    → 스케줄러 초기화
    → 드라이버 서브시스템 초기화 (PCI, USB, ...)
    → initramfs 마운트 및 /init 실행

커널에 전달되는 파라미터 확인:

# 현재 부팅에 사용된 커널 파라미터
cat /proc/cmdline
# BOOT_IMAGE=/vmlinuz-6.8.0 root=/dev/sda2 ro quiet splash

# 실행 중인 커널 버전
uname -r

④ initramfs — 임시 루트 파일시스템

initramfs(initial RAM filesystem)는 실제 루트 파일시스템을 마운트하기 전에 필요한 드라이버와 도구를 제공하는 임시 루트 환경입니다.

왜 필요한가:

  • 루트 파일시스템이 LVM, RAID, LUKS 암호화, NFS 위에 있을 수 있음
  • 해당 드라이버를 커널 내장이 아닌 모듈로 처리
# initramfs 이미지 위치
ls -lh /boot/initrd.img-$(uname -r)

# initramfs 내용 확인
lsinitramfs /boot/initrd.img-$(uname -r) | head -30

# initramfs 재생성 (Ubuntu/Debian)
sudo update-initramfs -u

# initramfs 재생성 (RHEL/Fedora)
sudo dracut -f

initramfs 내의 /init 스크립트가 실제 루트 파일시스템을 마운트하고 pivot_root로 루트를 전환한 뒤 systemd를 실행합니다.

⑤ systemd — PID 1

실제 루트 파일시스템이 마운트되면 커널이 /sbin/init/lib/systemd/systemd를 PID 1로 실행합니다.

# PID 1 확인
ps -p 1 -o pid,comm
# PID  COMMAND
#   1  systemd

# 부팅 타겟 (런레벨) 확인
systemctl get-default
# graphical.target 또는 multi-user.target

# 부팅 순서 분석
systemd-analyze
systemd-analyze blame   # 각 서비스 시작 시간
systemd-analyze plot > boot.svg  # 타임라인 그래프

부팅 진단

부팅 진단 명령어

# 커널 초기화 메시지 (타임스탬프 포함)
dmesg -T

# 부팅 실패 서비스 찾기
journalctl -b -p err

# 이전 부팅 로그 (비정상 종료 시 유용)
journalctl -b -1

# 특정 서비스 부팅 시 로그
journalctl -b -u NetworkManager

BIOS vs UEFI 요약

항목BIOSUEFI
파티션MBR (최대 2TB)GPT (최대 9.4 ZB)
부팅 코드 위치MBR 첫 512BESP FAT32 파티션
Secure Boot미지원지원
부팅 속도상대적으로 느림빠름
네트워크 부팅BIOS PXEUEFI PXE / HTTP Boot

지난 글: iptables NAT와 Docker 네트워크 — 컨테이너 트래픽 흐름

다음 글: GRUB 기초 — 부트로더 설정과 복구


읽어주셔서 감사합니다. 😊