2026-04-13
openSUSE

openSUSE

Spread the love

openSUSE 부팅 실패 시 grub/rescue 모드 복구 가이드

문제 현상

시스템 구성(예: fstab)을 수정한 후 재부팅에 실패하여 다음 상황 중 하나가 발생합니다:
grub> 명령행 프롬프트
grub rescue> 프롬프트
– systemd emergency/rescue 모드

문제 근본 원인

이 사례에서의 구체적인 원인:
1. fstab 잘못된 수정: defaultsdefaults,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

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

@똘똘이을(를) 사용하여 AI 어시스턴트에게 질문할 수 있습니다.
구독신청
Notify of
guest

0 Comments
oldest
newest most voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x