GRUB은 Linux 사용자라면 반드시 한 번은 마주치게 되는 부트로더다. 평소에는 존재감이 없지만, 부팅에 문제가 생기면 가장 먼저 우리를 맞이하는 녀석이기도 하다. 이 글에서는 GRUB이 무엇인지, 언제 GRUB 모드에 진입하게 되는지, 그리고 실전에서 어떻게 대응하는지를 정리한다.
GRUB이란?
GRUB(GRand Unified Bootloader)은 컴퓨터 전원을 켰을 때 운영체제를 메모리에 로드하는 역할을 하는 부트로더다. Ubuntu를 포함한 대부분의 Linux 배포판에서 기본 부트로더로 사용되며, 현재는 GRUB2가 표준이다.
핵심 역할은 단순하다.
- BIOS/UEFI → GRUB → 커널 로드 → OS 부팅
- 멀티 부팅 환경에서 OS 선택 메뉴 제공
- 커널 파라미터 수정을 통한 부팅 옵션 제어
평소에는 자동으로 기본 OS를 부팅하기 때문에 GRUB 메뉴를 볼 일이 거의 없다. 문제는 정상 부팅에 실패했을 때 발생한다.
GRUB 모드에 진입하게 되는 상황
GRUB 모드(GRUB 쉘)에 빠지는 대표적인 원인은 다음과 같다.
1) 부트 파티션 손상 또는 변경 디스크 파티션을 변경하거나, Windows 업데이트 후 MBR/EFI가 덮어씌워지면 GRUB이 커널을 찾지 못한다.
2) grub.cfg 설정 파일 손상 /boot/grub/grub.cfg 파일이 잘못 수정되거나 삭제된 경우.
3) 디스크 추가/제거 하드디스크나 SSD를 추가·제거하면 디바이스 순서가 변경되어 GRUB이 기존 경로를 찾지 못한다.
4) 커널 업데이트 실패 커널 업데이트 도중 전원이 꺼지거나 패키지 충돌이 발생한 경우.
GRUB 모드의 두 가지 유형
GRUB 모드에 진입하면 화면에 표시되는 프롬프트가 다르다. 이 차이를 아는 것이 대응의 첫걸음이다.
grub> — 일반 GRUB 쉘
GRUB 코어는 정상 로드되었지만, grub.cfg를 찾지 못한 상태다. 대부분의 GRUB 명령어를 사용할 수 있으므로 수동 부팅이 가능하다.
grub rescue> — 레스큐 모드
GRUB 코어 모듈 일부만 로드된 심각한 상태다. 사용할 수 있는 명령어가 극히 제한적이며, 먼저 모듈을 수동으로 로드해야 한다.
실전 대응: grub> 쉘에서 수동 부팅하기
grub> 프롬프트가 뜨면 아래 순서를 따른다.
Step 1 — 파티션 확인
grub> ls
연결된 디스크와 파티션 목록이 출력된다. (hd0,gpt2), (hd0,msdos1) 같은 형태다.
Step 2 — Linux 파티션 찾기
각 파티션을 탐색해서 /boot 디렉토리가 있는 파티션을 찾는다.
grub> ls (hd0,gpt2)/boot
커널 이미지(vmlinuz-*)와 initrd 파일(initrd.img-*)이 보이면 해당 파티션이 맞다.
Step 3 — root 설정 및 커널 로드
grub> set root=(hd0,gpt2)
grub> linux /boot/vmlinuz-5.15.0-xx-generic root=/dev/sda2
grub> initrd /boot/initrd.img-5.15.0-xx-generic
grub> boot
root=/dev/sdXN 부분은 실제 루트 파티션 디바이스 경로로 바꿔야 한다. 커널 버전도 ls로 확인한 실제 파일명을 사용한다.
실전 대응: grub rescue> 에서 복구하기
레스큐 모드는 한 단계 더 거쳐야 한다.
Step 1 — 파티션 확인 (동일)
grub rescue> ls
grub rescue> ls (hd0,gpt2)/boot/grub
grub 디렉토리가 있는 파티션을 찾는다.
Step 2 — 모듈 로드
grub rescue> set prefix=(hd0,gpt2)/boot/grub
grub rescue> insmod normal
grub rescue> normal
normal 모듈이 로드되면 일반 grub> 쉘 또는 GRUB 메뉴로 전환된다. 이후는 위의 수동 부팅 절차를 따르면 된다.
부팅 성공 후: GRUB 영구 복구
수동 부팅에 성공했다면, OS에 진입한 뒤 GRUB을 재설치하여 같은 문제가 반복되지 않도록 한다.
# GRUB 재설치 (BIOS/MBR 방식)
sudo grub-install /dev/sda
# GRUB 재설치 (UEFI 방식)
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi
# grub.cfg 재생성
sudo update-grub
update-grub은 /boot 아래의 커널을 자동으로 탐지하여 grub.cfg를 새로 만들어 준다.
유용한 GRUB 설정 팁
부팅 시 GRUB 메뉴 항상 표시하기
/etc/default/grub 파일을 수정한다.
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
수정 후 반드시 sudo update-grub을 실행한다.
기본 부팅 OS 변경하기
# 현재 메뉴 엔트리 확인
grep -E "menuentry|submenu" /boot/grub/grub.cfg | head -20
# 기본 엔트리 번호 설정 (0부터 시작)
sudo vim /etc/default/grub
# GRUB_DEFAULT=0 → 원하는 번호로 변경
sudo update-grub
커널 파라미터 추가
특정 하드웨어 이슈 해결을 위해 커널 파라미터를 추가해야 할 때가 있다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
nomodeset은 그래픽 드라이버 문제로 부팅이 안 될 때 자주 사용하는 옵션이다.
최후의 수단: Live USB로 GRUB 복구
수동 부팅도 불가능한 경우, Ubuntu Live USB로 부팅한 뒤 chroot 환경에서 GRUB을 복구한다.
# Live USB로 부팅 후
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi # UEFI인 경우
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
# chroot 내부에서
grub-install /dev/sda # 또는 UEFI 방식
update-grub
exit
sudo umount -R /mnt
sudo reboot
정리
| 설정 파일만 유실 | grub> | set root → linux → initrd → boot |
| 코어 모듈 유실 | grub rescue> | set prefix → insmod normal → normal |
| 수동 부팅 불가 | — | Live USB chroot → grub-install + update-grub |
GRUB 모드는 처음 보면 당황스럽지만, 결국 "파티션 찾기 → 커널 지정 → 부팅"이라는 하나의 흐름이다. 이 흐름만 기억하면 대부분의 부팅 문제에서 빠져나올 수 있다.
DevOps를 지향하는 개발자라면 서버 부팅 장애는 언젠가 반드시 마주치는 상황이다. GRUB 복구를 한 번이라도 직접 해 본 경험이 있다면, 그때의 침착함이 실전에서 큰 차이를 만든다.
'Platform > Management(Server & Security)' 카테고리의 다른 글
| Cloudflare Tunnel vs Pangolin: 서버 운영자의 터널링 선택지 완전 비교 (0) | 2026.04.13 |
|---|---|
| tmux vs cmux: 이름은 비슷하지만 레벨이 다른 두 가지 ‘멀티플렉싱’의 실무 활용법 (0) | 2026.03.26 |
| 우분투 서버 보안 취약점 대응: 실무에서 바로 쓰는 필수 보안 툴 구성 전략 (3) | 2026.03.25 |
| 정보보안기사 (0) | 2026.02.09 |
| 보안의 기본 3요소: 공격 유형과 인증 방식, 그리고 SEED 암호 알고리즘 (0) | 2026.02.09 |
