| 개인 학습 내용을 바탕으로 지식을 공유하고자 글을 작성했습니다. 미흡하거나 잘못된 부분이 있을 경우, 댓글 남겨주시면 감사하겠습니다.
부팅 순서 개요
- BIOS (Basic Input/Output System) / UEFI (Unified Extensible Firmware Interface)
- MBR (Master Boor Record) / GPT (GUID Partition Table)
- BootLoader : GRUB (GRand Unifide Bootloader)
- Kernel
- Init/systemd Process
0 단계 | 시스템 전원 공급
BIOS 펌웨어는 메인보드의 ROM(Read Only Memory, 비휘발성)에 저장돼 있습니다.
시스템에 전원이 공급되면, CPU는 ROM에서 BIOS 펌웨어 코드를 읽고 실행합니다.
1단계 | BIOS (Legacy / UEFI)
실행된 BIOS는 POST(Power On Self Test) 과정을 수행합니다. POST 과정은 BIOS가 시스템의 하드웨어(CPU, Memory, PCI, USB Controller 등)들의 이상 유무를 검사하고, 동작을 위해 초기화하는 과정입니다.
만약, POST 과정에서 하드웨어 이상이 발견되면 Error 메세지를 출력합니다. Critical한 하드웨어 장애일 경우, 반복적인 재기동 등의 현상이 발생할 수 있습니다.
2단계 | MBR or GPT
하드웨어 이상 없이 정상적으로 POST 과정을 통과하면, 다음으로 Booting Media(부팅 매체 / HDD, USB, CD-ROM 등)를 찾습니다.
식별된 부팅 매체에서 Boot Loader(부트 로더 / 대표적으로 GRUB)를 읽어와 메모리에 로드(Load)합니다.
저장매채의 파티션 구조 정의 방식에 따라, 부트 로더가 저장된 위치가 다릅니다. 파티션 구조 정의 방식은 2가지가 있습니다.
첫째, MBR(Master Boot Record)
- MBR은 HDD의 첫 섹터(섹터 제로, 512 Bytes)에 위치합니다. 부트 로더의 위치와 파티션 테이블 정보를 저장하고 있습니다.
- 일반적으로 Legacy BIOS에서 사용됩니다. BIOS는 MBR을 메모리에 로드하고 실행합니다.
이후, MBR은 저장하고 있는 부트 로더 코드를 실행하거나, 다른 위치에 있는 부트 로더를 호출하여 실행합니다. - 참고로, MBR은 구조적으로 최대 약 2TB까지만 지원할 수 있습니다. MBR은 섹터 인식용 주소 체계로 32 bits를 사용합니다. 따라서 지정 가능한 주소의 최대 개수는 2^32개가 됩니다. 각 섹터의 크기는 512 Bytes 이므로,
2^32 X 512 = 2.19 TB용량 한계를 가집니다.
둘째, GPT(GUID Partition Table)(Global Unique IDentifier Partition Table)
- GPT는 UEFI BIOS에서 사용됩니다. UEFI BIOS는 용량 제한 등의 한계를 가진 Legacy BIOS를 대체하기 위해 개발 됐습니다. GPT에서는 별도의 EFI 시스템 파티션에 부트로더가 저장돼 있습니다. UEFI는 MBR 대신, EFI 시스템 파티션에서 부트로더를 읽어 메모리에 로드합니다.
- UEFI 시스템에서 Linux OS 설치 시 설정하는 약 500MB의
/boot/efi파티션
- UEFI 시스템에서 Linux OS 설치 시 설정하는 약 500MB의
- GPT는 최대 9.4 ZB(9.4 X 10^21 Bytes)까지 지원합니다.
3단계 | Boot Loader (GRUB 등)
부트 로더는 BIOS와 운영체제·커널을 이어주는 다리 역할을 합니다. 부트 로더가 메모리에 로드되어 실행되면 BIOS는 종료되고, 시스템 제어권을 부트 로더가 이어 받습니다.
Linux 운영체제에서 과거에는 LILO 부트 로더가 사용됐으나, 현재는 대부분 GRUB 부트 로더가 사용됩니다.
부트 로더는 운영체제를 선택·실행하고 커널을 메모리에 로드하는 핵심적인 기능을 수행하는 프로그램입니다. 메모리에 올려져 실행된 부트 로더는 어떤 운영체제로 시스템을 시작할 지 사용자에게 선택하게 합니다. 운영체제 종류가 결정되면, 운영체제와 커널을 불러와 메모리에 로드합니다.
Linux의 GRUB 설정파일(/etc/grub.conf, /boot/grub/grub.conf)을 확인해보면, 어떤 커널 이미지를 불러올 지 작성돼있는 것을 알 수 있습니다. 만약, ramdisk(initrd)가 있다면 함께 로드 되도록 작성돼 있습니다.
- 환경 설정 파일
/etc/grub.conf 또는 /boot/grub/grub.conf
- 실행 파일
/sbin/grub
- 설정 옵션
- RHEL7 또는 CentOS7 이상 :
/etc/defualt/grub - 과거 위치 :
/boot/grub/grub.conf
- RHEL7 또는 CentOS7 이상 :
/etc/default/grub- 수정 후,
/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg명령으로 설정 적용 - 또는
update-grub명령 사용
- 수정 후,
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rhgb quiet"
4단계 | 커널(Kernel)
부트 로더 설정 파일(/etc/grub/grub.conf)에 따라 특정 커널이 메모리에 로드돼 실행됩니다. 커널은 다음의 절차에 따라 시스템을 초기화합니다.
- 커널은 하드웨어를 점검하고 결과를
/var/log/demsg파일에 기록합니다. - 루트(Root) 파일시스템(
/)을ro(read-only)로 마운트(mount)합니다. 마운트 실패 시, '커널 패닉(Kernel panic)' 메세지를 출력합니다. - 정상적으로 루트 파일시스템이 마운트되면,
swapper프로세스 (PID 0번)를 호출합니다. swapper프로세스는 커널이 사용할 각 장치 드라이버들을 초기화하고,systemd(또는 init)프로세스(PID 1번)를 실행합니다.- 실행된
systemd(또는 init)프로세스는/etc/inittab파일을 읽고, 내용에 따라 동작을 수행합니다.
5단계 | systemd(또는 init) 프로세스
systemd(또는 init) 프로세스 PID 1번을 가지는 커널이 실행한 프로세스입니다. 운영체제가 부팅을 마무리하기 위해 실행하는 첫번째 프로그램입니다.
과거에는 init 프로세스가 사용됐습니다. 현재는 init을 대체하는 systemd가 사용됩니다.
systemd 프로세스는 커널 외 운영체제의 나머지 구성 요소, 서비스 및 데몬 등을 실행합니다. 최종적으로 시스템을 사용자가 사용 가능한 상태로 만듭니다. systemd의 설정 파일, 실행 스크립트 등 자세한 내용은 다음 포스팅에서 다루겠습니다.
긴 글 읽어주셔서 감사합니다.
'Linux' 카테고리의 다른 글
| [Linux] udev(userspace /dev), udev rules (1) | 2025.11.16 |
|---|---|
| 리눅스 네트워크 본딩 (Linux Network Bonding) (2) | 2025.08.29 |
| Linux Root Directory (리눅스 루트 디렉터리) (0) | 2025.05.27 |