리눅스가 전원을 켠 뒤 어떻게 시작해서 우리가 로그인할 수 있는 상태까지 오는가
먼저 컴퓨터 전원을 켜면, 리눅스가 바로 실행되는 것이 아니다. 가장 먼저 하는 일은 디스크에 있는 리눅스 커널을 메모리로 올리는 것이다. 이 일을 전담하는 작은 프로그램이 있는데, 이것을 로더(Loader), 또는 부트로더(Boot Loader)라고 부른다. 리눅스에서는 예전에 LILO라는 부트로더를 썼고, 요즘은 대부분 GRUB를 쓴다. 즉, LILO나 GRUB의 역할은 “리눅스 커널을 찾아서 실행해주는 프로그램”이라고 이해하면 된다.
GRUB는 부팅과 관련된 설정을 파일로 관리한다. 그 설정 파일이 grub.conf다. 여기에는 “기본으로 어떤 운영체제를 부팅할지”, “몇 초 동안 선택을 기다릴지”, “부팅 화면을 보여줄지 말지” 같은 정보가 들어 있다. 그래서 서버가 여러 운영체제를 가지고 있을 경우, GRUB 화면에서 선택해서 부팅할 수 있다. 또한 커널 파일 위치만 알면 부팅이 가능하기 때문에 유연성이 높다.
이제 실제 부팅 순서를 단계별로 보자. 서버 전원을 켜면 가장 먼저 BIOS(또는 UEFI)가 실행된다. BIOS는 하드웨어가 정상인지 간단히 점검하고, 부팅 가능한 디스크를 찾는다. 그 다음 디스크의 맨 앞부분에 있는 MBR(Master Boot Record)를 읽는데, 여기에 부트로더가 들어 있다. 이 시점에서 GRUB 같은 부트로더가 실행된다.
부트로더는 디스크 안에서 리눅스 커널이 어디 있는지 찾아서, 그 커널을 메모리로 올리고 실행한다. 이 순간부터 본격적으로 리눅스가 동작하기 시작한다. 커널은 CPU, 메모리, 디스크 같은 하드웨어를 인식하고 초기화한 뒤, 루트 파일 시스템을 처음에는 읽기 전용으로 마운트한다. 파일 시스템이 깨지지 않았는지 점검한 뒤, 다시 쓰기 가능 상태로 마운트한다.
커널 초기화가 끝나면, 커널은 더 이상 모든 일을 혼자 하지 않는다. 대신 init이라는 프로세스를 하나 실행한다. 이 init 프로세스는 리눅스에서 가장 처음 실행되는 사용자 공간 프로세스이며, 항상 PID 1번을 가진다. 이 시점부터 시스템 서비스들이 순차적으로 올라오기 시작한다.
init 프로세스는 설정 파일을 읽어서 “어떤 모드로 시스템을 올릴지”를 결정한다. 이 모드를 Run Level이라고 부른다. Run Level은 말 그대로 시스템의 동작 수준이다. 예를 들어 Run Level 1은 관리자용 단일 사용자 모드로, 복구 작업이나 비밀번호 변경 같은 작업에 사용된다. Run Level 3은 서버에서 가장 흔한 모드로, 네트워크와 여러 사용자가 동시에 접속 가능한 텍스트 기반 모드다. Run Level 5는 Run Level 3 상태에서 그래픽 환경(X Window)까지 함께 실행하는 모드다. Run Level 6은 재부팅을 의미한다.
그래서 init 6 명령을 실행하면 시스템은 “지금 상태를 종료하고 다시 부팅하라”는 의미로 받아들여 재부팅을 수행한다. reboot 명령어가 내부적으로 하는 일도 결국 이 흐름과 같다.
보안 관점에서 이 부팅 과정을 중요하게 보는 이유는, 부팅 단계에서 실행되는 프로그램은 매우 강력한 권한을 가지기 때문이다. 만약 공격자가 부트로더나 커널, init 단계에 악성 코드를 심어두면, 시스템이 켜질 때마다 자동으로 실행되어 백도어 역할을 할 수 있다. 그래서 보안에서는 “부팅 단계가 어떻게 구성되어 있는지”를 반드시 이해해야 한다.
정리하면, 리눅스 부팅은 전원 ON → BIOS 실행 → 부트로더(GRUB) 실행 → 커널 로딩 → 하드웨어 초기화 → init 실행 → Run Level에 따른 서비스 기동 이라는 흐름으로 진행된다. 이 흐름만 머릿속에 그려지면, 세부 용어들은 자연스럽게 따라온다.