openSUSE
openSUSE 부팅 실패 시 grub/rescue 모드 복구 가이드
문제 현상
시스템 구성(예: fstab)을 수정한 후 재부팅에 실패하여 다음 상황 중 하나가 발생합니다:
– grub> 명령행 프롬프트
– grub rescue> 프롬프트
– systemd emergency/rescue 모드
문제 근본 원인
이 사례에서의 구체적인 원인:
1. fstab 잘못된 수정: defaults를 defaults,rw로 변경한 후 grub을 업데이트하여 구성이 손상됨
2. /.snapshots 서브볼륨 미마운트: snapper 스냅샷 시스템의 핵심 디렉토리가 올바르게 마운트되지 않아 grub 구성 생성에 영향을 줌
3. btrfs 기본 서브볼륨 혼란: 시스템은 특정 스냅샷에서 부팅되기를 기대하지만 구성이 잘못된 경로를 가리킴
스냅샷에서 시스템 복구(권장 방법)
openSUSE는 snapper를 사용하여 스냅샷을 관리하며, grub 부팅 메뉴에 스냅샷 옵션이 표시됩니다:
- 부팅 시 스냅샷 선택
– grub 메뉴에서 “Start from snapshot” 또는 유사한 옵션 찾기
– 알려진 정상 상태의 스냅샷 선택하여 부팅 - 시스템 진입 후 rollback 실행
# 스냅샷 목록 보기
sudo snapper list
# rollback이 정상적으로 작동하는 경우
sudo snapper rollback
grub 명령행 수동 부팅
grub> 프롬프트로 진입한 경우 수동으로 시스템을 부팅할 수 있습니다:
단계 1: 사용 가능한 장치 및 커널 찾기
# 사용 가능한 디스크 나열
grub> ls
(hd0) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3) …
# 파티션 내용 보기
grub> ls (hd0,gpt7)/
grub> ls (hd0,gpt7)/boot/
grub> ls (hd0,gpt7)/.snapshots/
단계 2: 스냅샷에서 부팅
# 루트 파티션 설정
grub> set root=(hd0,gpt7)
# btrfs 서브볼륨 보기(사용 가능한 스냅샷 찾기)
grub> ls (hd0,gpt7)/@/.snapshots/
# 커널 로드(스냅샷에서)
grub> linux (hd0,gpt7)/@/.snapshots/1/snapshot/boot/vmlinuz root=UUID=3fa7d69e-4fac-45e8-9b23-1501f9d13a32
# initramfs 로드
grub> initrd (hd0,gpt7)/@/.snapshots/1/snapshot/boot/initrd
# 부팅
grub> boot
단계 3: 표준 경로에서 부팅
grub> set root=(hd0,gpt7)
grub> linux /boot/vmlinuz root=UUID=3fa7d69e-4fac-45e8-9b23-1501f9d13a32 rw
grub> initrd /boot/initrd
grub> boot
시스템 진입 후 복구 단계
1. /.snapshots 서브볼륨 마운트
# 이미 마운트되었는지 확인
mount | grep snapshots
# 마운트되지 않은 경우 수동 마운트
sudo mount -t btrfs -o subvol=/@/.snapshots /dev/sda7 /.snapshots
# 검증
sudo ls -la /.snapshots/
2. fstab 확인 및 복구
# 현재 fstab 보기
cat /etc/fstab
# 루트 파티션 구성이 올바른지 확인(subvol 매개변수 포함)
# 오류 예시:
# UUID=xxx / btrfs defaults,rw 0 0 ← 이로 인해 부팅 실패 가능
# 정상 예시:
# UUID=xxx / btrfs defaults,subvol=/@/.snapshots/1/snapshot 0 0
# fstab 복구 또는 수정
sudo vi /etc/fstab
# 또는 sed 사용
sudo sed -i 's|defaults,rw|defaults|' /etc/fstab
3. btrfs 기본 서브볼륨 설정
# 서브볼륨 목록 보기
sudo btrfs subvolume list /
# 현재 기본 서브볼륨 보기
sudo btrfs subvolume get-default /
# 기본 서브볼륨 설정(일반적으로 스냅샷 1)
sudo btrfs subvolume set-default 266 /
# 266은 서브볼륨 ID이며 실제 상황에 따라 조정 필요
4. grub 구성 재생성
# /.snapshots가 마운트된 상태에서 실행해야 함
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 구성 검증
sudo cat /boot/grub2/grub.cfg | grep "menuentry" | head -10
5. initramfs 재구성
sudo dracut -f --regenerate-all
systemd emergency/rescue 모드
systemd emergency 모드로 진입한 경우(grub 문제가 아님):
진단 단계
# 실패한 유닛 보기
systemctl --failed
# 마운트 상태 보기
mount
# 주요 로그 보기
journalctl -xb | grep -i failed
일반적인 복구
# 루트 파티션이 읽기 전용인 경우
mount -o remount,rw /
# 주요 마운트 지점 실패 시
mount -a
# fstab 오류 복구
vi /etc/fstab
# 재부팅
reboot
예방 조치
1. fstab 수정 전 백업
sudo cp /etc/fstab /etc/fstab.bak
2. fstab 수정 테스트
# 마운트 구성이 올바른지 테스트
sudo mount -a
# 오류 출력 확인
3. grub 수정 전 스냅샷 시스템 정상 확인
# /.snapshots 접근 가능 확인
sudo ls /.snapshots/
# snapper 정상 작동 확인
sudo snapper list
4. 스냅샷 백업 생성
# 중요한 수정 전 스냅샷 생성
sudo snapper create --description "before fstab change"
일반적인 오류 구성 예시
fstab 오류 구성
# ❌ 오류: subvol 매개변수 누락
UUID=xxx / btrfs defaults 0 0
# ❌ 오류: 부적절한 마운트 옵션 조합
UUID=xxx / btrfs defaults,rw 0 0
# ✅ 정상: 서브볼륨 경로 명시적 지정
UUID=xxx / btrfs defaults,subvol=/@/.snapshots/1/snapshot 0 0
grub 구성 생성 타이밍 오류
❌ 오류 절차:
1. fstab 수정
2. 직접 grub2-mkconfig 실행(/.snapshots 미마운트 상태)
3. 재부팅 실패
✅ 정상 절차:
1. /.snapshots 마운트 확인
2. fstab 수정(루트 파티션 행 신중히 수정)
3. 구성 검증 mount -a
4. grub2-mkconfig 실행
5. dracut --regenerate-all 실행
6. 재부팅 테스트
진단 명령어 요약
# btrfs 관련
sudo btrfs filesystem show /
sudo btrfs device stats /
sudo btrfs subvolume list /
sudo btrfs subvolume get-default /
# 스냅샷 관련
sudo snapper list
sudo ls -la /.snapshots/
# grub 관련
sudo grub2-editenv list
sudo cat /boot/grub2/grub.cfg
# 마운트 관련
mount | grep btrfs
cat /etc/fstab
cat /proc/cmdline
# systemd 관련
systemctl --failed
systemctl status systemd-remount-fs.service
IMPORTANT!!! rescue system으로 부팅되였을떄
1.스냅샷을 복제하여야 RW환경으로 됨:
#root를 /mnt에 mount되였다고 가정하면
#새로운 스냅샷 복제
btrfs subvolume snapshot /mnt/.snapshots/24/snapshot /mnt/@newroot
#@newroot volume번호 확인
btrfs subvolume list /mnt
#newroot를 default로 지정 만약 300이 newroot volume id라면
btrfs subvolume set-default 300 /mnt
#다시 마운트
umount /mnt
mount /dev/sda7 /mnt
#grub 수정
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install \
--target=x86_64-efi \
--efi-directory=/boot/efi \
--bootloader-id=opensuse \
--no-nvram
reboot
시스템 환경
- openSUSE Leap 16.0
- btrfs 파일 시스템(snapper 스냅샷 포함)
- UEFI 부팅
- grub2 부트로더
—
날짜: 2026-04-10