[1과목 2장 03절] 전원부터 로그인까지의 부팅 순서, LILO와 GRUB Legacy·GRUB2의 차이, 런레벨 0~6과 systemd target 대응을 다룹니다.
🎯 이 강의 학습 목표
이 강은 1과목 2장 03절 부트 매니저의 이해와 GRUB입니다. 이 강을 마치면 전원 버튼을 누른 순간부터 로그인 화면이 뜨기까지의 순서를 단계별로 설명할 수 있고, LILO와 GRUB의 결정적 차이를 말할 수 있으며, 런레벨 0~6의 의미와 systemd target 대응 관계를 외우고 root 암호를 잊었을 때 어떤 모드로 들어가야 하는지 답할 수 있게 됩니다.
이 단원은 1과목에서 출제 밀도가 높은 구간입니다. 특히 런레벨 숫자와 의미의 매칭은 거의 매번 나옵니다. "서버로 쓰려고 X 윈도를 안 쓴다면?", "시스템 종료는?", "사용자가 정의해 쓰는 레벨은?" 같은 형태입니다. 숫자 7개만 정확히 외우면 확보되는 점수입니다.
💡 전원부터 로그인까지 — 부팅 순서
부팅은 여러 단계가 바통을 넘기듯 이어집니다. 순서를 통째로 외우기보다 각 단계가 다음 단계를 어떻게 찾아내는지를 따라가면 자연히 기억됩니다.
| 단계 | 하는 일 |
|---|---|
| ① 전원 · POST | BIOS 또는 UEFI가 하드웨어 자체 점검(POST)을 수행 |
| ② 부팅 장치 선택 | 설정된 우선순위에 따라 부팅할 디스크를 결정 |
| ③ 부트로더 로드 | BIOS는 디스크 첫 섹터의 MBR을, UEFI는 ESP의 EFI 실행 파일을 읽음 |
| ④ 부트로더 실행 | GRUB이 메뉴를 띄우고, 선택된 커널을 찾음 |
| ⑤ 커널 로드 | /boot/vmlinuz-*를 메모리에 올리고 initramfs를 임시 루트로 사용 |
| ⑥ 루트 파일 시스템 마운트 | 진짜 /를 마운트하고 임시 루트에서 전환 |
| ⑦ PID 1 실행 | 커널이 init 또는 systemd를 첫 프로세스로 실행 |
| ⑧ 런레벨 / target 도달 | 기본 실행 수준에 맞는 서비스를 기동하고 로그인 프롬프트 표시 |
단계마다 짚어 둘 점이 있습니다. MBR은 디스크 맨 앞 512바이트이고, 그중 앞 446바이트가 부트로더 코드, 64바이트가 파티션 테이블(16바이트 × 4개 → 7강의 "주 파티션 최대 4개"가 여기서 나옵니다), 마지막 2바이트가 서명입니다. 446바이트는 운영체제를 띄우기에 턱없이 작으므로, GRUB은 여기에 다음 단계를 불러오는 최소한의 코드만 넣습니다.
initramfs는 커널이 진짜 루트 파일 시스템을 마운트하기 위해 필요한 드라이버를 담은 임시 루트 이미지입니다. 루트가 RAID나 LVM 위에 있거나 특수한 디스크 컨트롤러를 쓰면, 그 드라이버가 있어야 루트를 읽을 수 있는데 그 드라이버 자체가 루트 안에 있다는 닭과 달걀 문제가 생깁니다. initramfs가 이 문제를 풉니다.
PID 1은 커널이 직접 실행하는 최초의 사용자 공간 프로세스이며, 이후 모든 프로세스의 조상이 됩니다. 전통적으로는 /sbin/init(SysV init)이었고, 현재 주요 배포판은 systemd를 씁니다.
💡 LILO와 GRUB
부트 매니저(부트로더)는 여러 운영체제나 커널 중 무엇을 띄울지 고르고, 선택된 커널을 메모리에 올리는 프로그램입니다. 리눅스에서는 LILO가 먼저 쓰였고 지금은 GRUB이 표준입니다.
| 구분 | LILO | GRUB |
|---|---|---|
| 등장 | 먼저 개발됨 | 나중에 개발됨(GNU 프로젝트) |
| 커널 찾는 방식 | 커널의 물리적 디스크 위치를 미리 기록 | 파일 시스템을 이해해 파일명으로 읽음 |
| 커널 교체 시 | lilo를 다시 실행해야 함 | 설정 파일만 고치면 됨 |
| 부팅 시 수정 | 불가 | 메뉴에서 직접 편집 가능 |
| 설치 위치 | MBR 또는 파티션 부트 섹터 | MBR에만 설치되는 것이 아님 |
| 대화식 셸 | 없음 | 있음 |
차이의 핵심은 "커널을 어떻게 찾는가" 한 가지입니다. LILO는 파일 시스템을 모르기 때문에 "커널은 디스크의 몇 번 블록에 있다"를 통째로 외워 둡니다. 그래서 커널을 새로 설치해 위치가 바뀌면, lilo 명령을 다시 실행해 위치를 갱신하지 않으면 부팅이 안 됩니다. 반면 GRUB은 ext4 같은 파일 시스템을 직접 읽을 수 있어서 /boot/vmlinuz-6.6.0처럼 파일 이름으로 커널을 찾습니다. 부팅 화면에서 옵션을 즉석에서 고칠 수 있는 것도 같은 이유입니다.
자주 나오는 오답 서술 두 가지를 미리 짚습니다. "LILO는 레드햇 계열에서만 제공된다"는 틀립니다. 특정 배포판 전용이 아닙니다. "GRUB은 MBR에만 설치할 수 있다", "GRUB은 부트 디스크를 통한 부팅을 지원하지 않는다"도 모두 틀린 서술입니다.
GRUB은 세대가 나뉩니다.
| 구분 | GRUB Legacy (0.9x) | GRUB2 |
|---|---|---|
| 설정 파일 | /boot/grub/menu.lst 또는 grub.conf | /boot/grub2/grub.cfg (데비안 계열은 /boot/grub/grub.cfg) |
| 직접 편집 | 직접 편집 | 직접 편집 금지. /etc/default/grub과 /etc/grub.d/를 고친 뒤 재생성 |
| 재생성 명령 | 불필요 | grub2-mkconfig -o /boot/grub2/grub.cfg (데비안은 update-grub) |
| 파티션 번호 | 0부터 — 첫 디스크 첫 파티션 = (hd0,0) | 1부터 — (hd0,1) |
디스크 번호는 두 세대 모두 0부터, 파티션 번호만 GRUB2에서 1부터라는 점이 함정입니다. 설정 항목 중 timeout도 자주 출제됩니다. timeout=10이면 10초 동안 키 입력을 기다린 뒤 기본 항목으로 자동 부팅합니다. default는 기본 선택 항목, title(GRUB2는 menuentry)은 메뉴에 표시할 이름입니다.
💡 런레벨과 systemd target
런레벨(Run Level)은 시스템이 어떤 상태로 동작할지를 나타내는 숫자 0~6입니다. SysV init 시절의 개념이며, systemd로 바뀐 지금도 시험과 명령어에 남아 있습니다.
| 런레벨 | 의미 | systemd target |
|---|---|---|
| 0 | 시스템 종료(halt) | poweroff.target |
| 1 | 단일 사용자 모드 — 관리·복구용 | rescue.target |
| 2 | 다중 사용자 모드(NFS 미지원) | multi-user.target |
| 3 | 텍스트 기반 다중 사용자 — 서버의 기본 | multi-user.target |
| 4 | 사용되지 않음. 사용자 정의용 | multi-user.target |
| 5 | X 윈도 포함 다중 사용자 — 데스크톱 | graphical.target |
| 6 | 재부팅(reboot) | reboot.target |
시험에 나오는 방식 그대로 정리하면 이렇습니다. "서버로 쓸 예정이라 메모리 절약을 위해 X 윈도를 사용하지 않는다" → 3. "시스템이 종료될 때" → 0. "일반적으로 사용되지 않지만 사용자가 정의해 쓸 수 있다" → 4. "잊어버린 root 패스워드를 복구할 때" → 1.
마지막 항목을 조금 더 설명하겠습니다. 단일 사용자 모드(런레벨 1)는 네트워크와 대부분의 서비스를 띄우지 않고 root 권한 셸만 제공하는 복구 모드입니다. 그래서 암호를 잊었을 때 여기로 들어가 passwd로 재설정할 수 있습니다. 진입 방법은 GRUB 메뉴에서 커널 파라미터에 single 또는 1(systemd는 systemd.unit=rescue.target)을 추가하는 것입니다. 바꿔 말하면 GRUB 자체에 암호를 걸어 두지 않으면 물리적으로 접근한 사람이 root 권한을 가져갈 수 있다는 뜻이고, 그래서 서버 보안에서 GRUB 암호 설정이 중요합니다.
기본 런레벨은 과거에 /etc/inittab 파일에 id:5:initdefault: 형태로 적혀 있었습니다. "재부팅했을 때 호출되는 런레벨 값을 담고 있는 파일"을 묻는 문제의 답이 /etc/inittab입니다. systemd 환경에서는 이 역할을 /etc/systemd/system/default.target 심볼릭 링크가 대신하며, systemctl set-default로 바꿉니다.
| 작업 | SysV init | systemd |
|---|---|---|
| 현재 런레벨 확인 | runlevel, who -r | systemctl get-default |
| 런레벨 변경 | init 3, telinit 3 | systemctl isolate multi-user.target |
| 기본값 변경 | /etc/inittab 편집 | systemctl set-default graphical.target |
| 종료 / 재부팅 | init 0 / init 6, shutdown | systemctl poweroff / systemctl reboot |
💻 실습으로 확인하기
아래는 systemd가 동작하는 우분투 환경에서 실행한 결과입니다.
$ ps -p 1 -o pid,comm=
PID
1 systemd
$ systemctl get-default
graphical.target
$ runlevel
N 5
$ who -r
run-level 5 2026-09-11 12:27
네 명령이 같은 사실을 다른 각도에서 보여 줍니다. ps -p 1로 PID 1이 systemd임을 확인했습니다. systemctl get-default는 기본 target이 graphical.target임을, runlevel은 N 5를 반환합니다. N은 이전 런레벨이 없음(부팅 후 바뀐 적 없음), 5는 현재 런레벨입니다. who -r도 같은 run-level 5를 보여 줍니다. 기본 target이 graphical.target인데 런레벨이 5로 나온다는 것, 이것이 바로 표에서 외운 대응 관계가 실제로 살아 있다는 증거입니다.
$ ls -l /lib/systemd/system/runlevel?.target
runlevel0.target -> poweroff.target
runlevel1.target -> rescue.target
runlevel2.target -> multi-user.target
runlevel3.target -> multi-user.target
runlevel4.target -> multi-user.target
runlevel5.target -> graphical.target
runlevel6.target -> reboot.target
이 출력이 런레벨–target 대응표 그 자체입니다. systemd는 하위 호환을 위해 runlevelN.target이라는 이름을 만들어 두고 실제 target으로 심볼릭 링크를 걸어 두었습니다. 화살표를 따라 읽으면 0→poweroff, 1→rescue, 2·3·4→multi-user, 5→graphical, 6→reboot이 그대로 확인됩니다. 특히 2·3·4가 모두 multi-user.target 하나로 모인다는 점이 눈에 들어오는데, systemd가 세 런레벨을 구분하지 않기 때문입니다.
$ systemctl list-units --type=target | head -10
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
현재 도달해 있는 target 목록입니다. graphical.target이 active인데 multi-user.target도 함께 active라는 점에 주목하십시오. target은 계단처럼 쌓입니다. 그래픽 환경에 도달하려면 먼저 다중 사용자 환경이 갖춰져야 하므로, graphical.target이 multi-user.target을 포함합니다. 런레벨이 숫자 하나만 고르는 방식이었다면, target은 의존 관계를 가진 묶음이라는 차이가 여기서 드러납니다.
참고로 WSL 환경에서는 /boot가 비어 있습니다. WSL은 마이크로소프트가 제공한 커널로 부팅되어 GRUB 단계가 존재하지 않기 때문입니다. GRUB 설정 실습은 VirtualBox 같은 가상머신에 배포판을 설치해서 진행하십시오.
⚠️ 시험에 나오는 함정
| 함정 | 정확한 사실 |
|---|---|
| GRUB은 MBR에만 설치할 수 있다 | 아님. 파티션 부트 섹터·ESP 등에도 설치 가능 |
| LILO는 레드햇 계열 전용이다 | 아님. 특정 배포판 전용이 아님 |
| GRUB은 부트 디스크 부팅을 지원하지 않는다 | 지원함 |
reboot는 런레벨을 3으로 바꾼다 | 6으로 전환. 3은 텍스트 다중 사용자 |
GRUB2의 grub.cfg를 직접 고친다 | 금지. /etc/default/grub 수정 후 재생성 |
| GRUB2 파티션 번호는 0부터 | 디스크는 0부터, 파티션은 1부터(Legacy는 0부터) |
| 런레벨 4는 그래픽 모드다 | 그래픽은 5. 4는 사용자 정의용 |
📝 핵심 요약 — 암기표
| 항목 | 핵심 |
|---|---|
| 부팅 순서 | POST → 부팅 장치 → MBR/ESP → GRUB → 커널+initramfs → 루트 마운트 → PID 1 → target |
| MBR 512바이트 | 부트로더 446 + 파티션 테이블 64 + 서명 2 |
| LILO vs GRUB | LILO는 물리적 위치 기억(커널 바뀌면 재실행), GRUB은 파일 시스템 인식 |
| GRUB Legacy vs GRUB2 | menu.lst 직접 편집 vs grub.cfg 재생성 / 파티션 번호 0부터 vs 1부터 |
timeout=10 | 10초 대기 후 기본 항목으로 자동 부팅 |
| 런레벨 | 0 종료 · 1 단일 사용자 · 3 텍스트 · 4 사용자 정의 · 5 그래픽 · 6 재부팅 |
| 기본 런레벨 파일 | SysV /etc/inittab / systemd default.target |
| root 암호 복구 | 런레벨 1(단일 사용자 모드) → GRUB 암호 설정이 중요한 이유 |
| 런레벨 확인 | runlevel · who -r · systemctl get-default |
다음 10강부터 3장 기본 명령어로 들어갑니다. 사용자 계정을 만들고 관리하는 명령어와 /etc/passwd·/etc/shadow 파일 구조가 주제입니다.
📋 실전 문제
1. 다음 설명과 가장 관련 있는 런레벨은?
리눅스 시스템을 서버로 사용할 예정이라서 메모리 절약을 위해 X 윈도는 사용하지 않는다.
① 1 ② 3 ③ 5 ④ 6
2. 잊어버린 root 패스워드를 복구할 때 진입해야 하는 런레벨은?
① 0 ② 1 ③ 4 ④ 6
3. 일반적으로는 사용되지 않지만 사용자가 정의하여 사용할 수 있는 런레벨은?
① 2 ② 3 ③ 4 ④ 5
4. GRUB 설정 중 timeout=10에 대한 설명으로 알맞은 것은?
① 부팅 후 10초 뒤에 자동으로 로그아웃된다.
② 10초 동안 대기한 후 기본 설정된 운영체제로 부팅한다.
③ 커널 로드에 10초 이상 걸리면 부팅을 중단한다.
④ 10번째 메뉴 항목을 기본값으로 선택한다.
5. LILO와 GRUB에 대한 설명으로 틀린 것은?
① LILO는 GRUB보다 먼저 개발되었다.
② GRUB은 파일 시스템을 인식하여 커널을 파일명으로 읽을 수 있다.
③ LILO는 커널을 새로 설치하면 lilo 명령을 다시 실행해야 한다.
④ GRUB은 반드시 MBR에만 설치할 수 있다.
6. 재부팅했을 때 호출되는 런레벨 값을 담고 있는 파일(SysV init 기준)로 알맞은 것은?
① /boot/grub/grub.conf ② /etc/inittab
③ /etc/fstab ④ /etc/profile
7. 커널이 진짜 루트 파일 시스템을 마운트하기 전에, 필요한 드라이버를 담아 임시 루트로 사용하는 것은?
① MBR ② initramfs ③ swap ④ GRUB
8. systemd 환경에서 런레벨 3에 해당하는 target으로 알맞은 것은?
① rescue.target ② multi-user.target
③ graphical.target ④ poweroff.target
✅ 정답과 해설
1. 정답 ②
런레벨 3은 X 윈도 없이 동작하는 텍스트 기반 다중 사용자 모드로 서버의 기본 상태입니다. ③의 5는 그래픽 환경을 띄우므로 메모리를 더 씁니다. ①의 1은 복구용 단일 사용자 모드, ④의 6은 재부팅입니다.
2. 정답 ②
런레벨 1(단일 사용자 모드)입니다. 네트워크와 서비스를 띄우지 않고 root 셸만 제공하므로 passwd로 암호를 재설정할 수 있습니다. 이 때문에 물리적 접근을 막을 수 없는 환경에서는 GRUB 암호 설정이 필요합니다. ①의 0은 종료, ④의 6은 재부팅입니다.
3. 정답 ③
런레벨 4는 표준으로 정해진 용도가 없어 관리자가 정의해 쓸 수 있습니다. ①의 2는 다중 사용자 모드(NFS 미지원), ②의 3은 텍스트 다중 사용자, ④의 5는 그래픽 환경입니다.
4. 정답 ②
timeout은 메뉴에서 사용자 입력을 기다리는 초이며, 시간이 지나면 default로 지정된 항목으로 부팅합니다. ①·③·④는 timeout의 의미와 무관한 서술입니다.
5. 정답 ④
GRUB은 MBR 외에 파티션 부트 섹터나 ESP에도 설치할 수 있습니다. "반드시 MBR에만"이라는 단정이 틀렸습니다. ①·②·③은 모두 옳으며, 특히 ②·③은 두 부트로더를 가르는 핵심 차이입니다.
6. 정답 ②
SysV init에서는 /etc/inittab에 id:5:initdefault: 형태로 기본 런레벨이 기록됩니다. ①은 GRUB 메뉴 설정, ③은 부팅 시 마운트할 파일 시스템 정보, ④는 셸 전역 환경 설정 파일입니다. systemd 환경에서는 /etc/systemd/system/default.target 링크가 같은 역할을 합니다.
7. 정답 ②
initramfs입니다. 루트 파일 시스템이 LVM·RAID 위에 있거나 특수 컨트롤러를 쓸 때, 그 드라이버를 먼저 올리기 위해 필요합니다. ①의 MBR은 부트로더가 들어가는 디스크 첫 섹터, ③의 swap은 가상 메모리 영역, ④의 GRUB은 부트로더입니다.
8. 정답 ②
런레벨 2·3·4가 모두 multi-user.target에 대응합니다. systemd는 이 세 런레벨을 구분하지 않습니다. ①의 rescue는 1, ③의 graphical은 5, ④의 poweroff는 0에 대응하며, ls -l /lib/systemd/system/runlevel?.target으로 직접 확인할 수 있습니다.
📚 참고 자료
관련 주제
- 부팅 과정
- GRUB
- LILO
- 런레벨
- systemd
- target
- 단일 사용자 모드
- initramfs
- 자격증
- 자격증 강의
- 리눅스마스터 2급 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
리눅스마스터 2급 완전정복
이 강의가 속한 시리즈는 총 9강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
