부팅이란? 컴퓨터를 사용할 수 있도록 보조 기억 장치에 있는 운영 체계를 주기억 장치로 복사하는 과정
1. 전원 공급
- 전원이 켜지면, CPU가 리셋 벡터1에 접근해, 펌웨어(BIOS/UEFI) 코드를 실행합니다.
- BIOS/UEFI는 POST(Power On Self Test, 하드웨어 검사)를 수행하고 초기화합니다.
2. 부트 디바이스 탐색 및 부트로더 로드
- BIOS/UEFI는 부팅 가능한 디바이스(하드디스크, SSD 등)를 탐색하고 선택합니다.
- 선택된 디바이스의 첫 번째 섹터(MBR, EFI 파티션)에서 부트로더(GRUB2)를 메모리에 로드합니다.
3. 부트로더 단계
- 부트로더는 커널 이미지(vmlinuz)와 초기 RAM 디스크(initrd, initramfs)를 메모리에 적재합니다.2
- 사용자는 여러 운영체제 중 하나를 선택합니다.
4. 커널 로딩 및 하드웨어 초기화
- 부트로더는 커널에게 제어권을 넘기고, 커널을 실행합니다.
- 커널은 필요한 드라이버와 모듈을 초기 RAM 디스크에 로드합니다.
- 커널은 루트 파일시스템을 마운트하고 하드웨어를 초기화합니다.
5. 시스템 초기화 프로세스 실행
- 커널은 첫 번째 사용자 공간 프로세스인 systemd(과거에는 init)를 실행합니다.
- systemd(PID 1번)는 시스템 데몬, 네트워크, 사용자 세션 등 다양한 유닛을 병렬로 실행합니다.
6. 로그인 프롬프트 제공
- systemd에 의해 실행된 getty는 콘솔 로그인 기능을 제공합니다.
Q. 커널이 루트 파일시스템(/)을 마운트하기 전인데, 부트로더는 어떻게 /boot를 읽을 수 있어?
부트로더는 파일시스템(ext2, FAT, …)을 읽을 수 있는 드라이버를 내장하고 있습니다. 아래 /boot/grub/grub.cfg
파일에서 커널과 초기 RAM 디스크의 위치를 가져와 사용합니다.
menuentry 'Proxmox VE GNU/Linux' ... {
insmod gzio
insmod part_gpt
insmod lvm
insmod ext2
...
linux /boot/vmlinuz-6.8.12-4-pve root=/dev/mapper/pve-root ro quiet
initrd /boot/initrd.img-6.8.12-4-pve
}