리눅스 PC를 켤 때마다 로그인 화면이 표시되기 전에 일련의 단계를 거칩니다. 전형적인 부팅 프로세스에서 모든 리눅스 배포판이 거치는 4가지 구별되는 단계가 있습니다.

이 가이드에서는 리눅스 OS가 전원을 켜는 순간부터 로그인하는 시간까지 취하는 다양한 단계를 강조하겠습니다. 이 가이드는 현재 대부분의 현대적인 리눅스 배포판에서 사용되는 GRUB2 부트로더와 systemd init만 고려합니다.
부팅 프로세스는 다음 4단계를 거칩니다. 이를 자세히 논의하겠습니다:
- BIOS 무결성 검사 (POST)
- 부트로더 (GRUB2) 로딩
- 커널 초기화
- 모든 프로세스의 부모인 systemd 시작
1. BIOS 무결성 검사 (POST)
부팅 프로세스는 사용자가 전원 버튼을 누르면 – PC가 이미 종료되었다면 – 또는 GUI 또는 명령 줄에서 시스템을 다시 시작할 때 초기화됩니다.
리눅스 시스템이 전원을 인가하면 BIOS (Basic Input Output System)가 작동하고 Power On Self Test (POST)를 수행합니다. 이는 다양한 진단 검사를 수행하는 무결성 검사입니다.
포스트는 HDD 또는 SSD, 키보드, RAM, USB 포트 등의 구성 요소의 하드웨어 작동 여부를 조사합니다. 하드웨어 장치가 감지되지 않거나, 손상된 HDD 또는 SSD와 같은 장치에서 오류가 발생하는 경우 화면에 오류 메시지가 표시되어 개입을 요청합니다.
일부 경우에는 RAM 모듈이 없는 경우 특히 경고음이 울릴 수 있습니다. 그러나 예상된 하드웨어가 존재하고 예상대로 작동하는 경우 부팅 프로세스가 다음 단계로 진행됩니다.
2. 부트로더 (GRUB2)
포스트가 완료되고 상황이 안전하면 BIOS는 부트로더 및 디스크 파티션 정보를 위해 MBR (마스터 부트 레코드)를 조사합니다.
MBR은 일반적으로 하드 드라이브의 첫 번째 섹터에 위치한 512바이트 코드입니다. 이는 일반적으로 /dev/sda
또는 /dev/hda
입니다. 그러나 때로는 MBR이 라이브 USB 또는 리눅스 DVD 설치에 위치할 수 있습니다.
리눅스에는 3가지 주요 부트로더 유형이 있습니다: LILO, GRUB, 및 GRUB2. GRUB2 부트로더는 현대적인 리눅스 배포판에서 최신 및 기본 부트로더이며, 다른 두 가지를 시간이 지남에 따라 구식으로 남겨두는 결정을 내리게 됩니다.
GRUB2은 GRand Unified Bootloader의 2번째 버전을 의미합니다. 한 번 BIOS가 grub2 부트로더를 찾으면, 이를 실행하고 메인 메모리 (RAM)로 로드합니다.
grub2 메뉴를 통해 몇 가지 작업을 수행할 수 있습니다. 이를 통해 사용할 Linux 커널 버전을 선택할 수 있습니다. 시스템을 여러 번 업그레이드했다면, 다양한 커널 버전이 목록에 표시될 수 있습니다. 또한, 일부 커널 매개변수를 편집하는 능력을 제공하여 키보드 키의 조합을 눌러야 합니다.

또한, 다중 OS 설치가 있는 이중 부팅 설정에서 grub 메뉴를 통해 부팅할 OS를 선택할 수 있습니다. grub2 구성 파일은 /boot/grub2/grub2.cfg 파일입니다. GRUB의 주요 목표는 Linux 커널을 메인 메모리로 로드하는 것입니다.
3. 커널 초기화
커널은 Linux 시스템의 핵심입니다. 이는 PC의 하드웨어와 기저 프로세스를 인터페이스화합니다. 커널은 Linux 시스템의 모든 프로세스를 제어합니다. 부트로더에 의해 선택된 Linux 커널이 로드되면, 어떠한 작업도 수행하기 전에 압축된 버전에서 자체 추출되어야 합니다. 자체 추출 후, 선택된 커널은 루트 파일 시스템을 마운트하고, 보통 /sbin/init로 참조되는 프로그램을 초기화합니다(init).

Init는 항상 가장 먼저 실행되는 프로그램이며 프로세스 ID 또는 PID로 1이 할당됩니다. 여러 다른 데몬을 생성하고 /etc/fstab 파일에 지정된 모든 파티션을 마운트하는 것이 init 프로세스입니다.
그런 다음 커널이 임시 루트 파일 시스템인 초기 RAM 디스크(initrd)를 마운트합니다. 모든 커널은 초기 RAM 디스크 이미지와 함께 /boot
디렉터리에 있습니다.
4. Systemd 시작
커널은 마침내 오래된 SysV init의 대체인 Systemd를 로드합니다. Systemd는 모든 Linux 프로세스의 어머니이며 파일 시스템의 마운트, 서비스의 시작 및 중지 등을 관리합니다.
Systemd는 /etc/systemd/system/default.target 파일을 사용하여 Linux 시스템이 부팅될 상태 또는 타겟을 결정합니다.
- 데스크톱 워크스테이션(그래픽 사용자 인터페이스가 있는)의 경우 기본 타겟 값은 이전 SystemV init의 실행 레벨 5에 해당하는 5입니다.
- 서버의 경우 기본 타겟은 multi-user.target으로, SysV init의 실행 레벨 3에 해당합니다.
다음은 systemd 타겟의 세부 정보입니다:
- poweroff.target (실행 레벨 0): 시스템을 종료하거나 전원을 끕니다.
- rescue.target (실행 레벨 1): 구조용 셸 세션을 시작합니다.
- multi-user.target (실행 레벨 2,3,4): 시스템을 비그래픽(콘솔) 다중 사용자 시스템으로 구성합니다.
- graphical.target (runlevel 5): 시스템을 그래픽 다중 사용자 인터페이스 및 네트워크 서비스로 설정합니다.
- reboot.target (runlevel 6): 시스템을 다시 시작합니다.
시스템에서 현재 대상을 확인하려면 다음 명령을 실행하세요:
$ systemctl get-default

터미널에서 다음 명령을 실행하여 대상을 변경할 수 있습니다:
$ init runlevel-value
예를 들어, init 3은 시스템을 비그래픽 상태로 구성합니다.
init 6 명령은 시스템을 다시 시작하고 init 0은 시스템을 종료합니다. 이 두 대상으로 전환하려면 sudo 명령을 호출하십시오.
부팅 프로세스는 모든 데몬을 로드하고 대상 또는 실행 레벨 값을 설정한 후 종료됩니다. 이 시점에서 사용자 이름과 암호를 입력하면 Linux 시스템에 로그인할 수 있습니다.