RHEL 9 부팅 커널 및 GRUB 관리

잉여 위키
Chnagil (토론 | 기여)님의 2026년 7월 10일 (금) 23:34 판 (새 문서: = RHEL 9 부팅 커널 및 GRUB 관리 = __TOC__ == 문서 개요 == 이 문서는 RHEL 9 계열 운영체제에서 설치된 부팅 커널을 확인하고, 기본 부팅 커널을 변경하며, 커널 부팅 인수를 추가하거나 제거하는 방법을 설명한다. RHEL 9에서는 Boot Loader Specification(BLS) 형식의 부팅 항목과 <code>grubby</code> 명령어를 사용하여 커널별 부팅 설정을 관리한다. 주요 작업 범위는 다음과 같다. *...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 이동 검색으로 이동

RHEL 9 부팅 커널 및 GRUB 관리

문서 개요

이 문서는 RHEL 9 계열 운영체제에서 설치된 부팅 커널을 확인하고, 기본 부팅 커널을 변경하며, 커널 부팅 인수를 추가하거나 제거하는 방법을 설명한다.

RHEL 9에서는 Boot Loader Specification(BLS) 형식의 부팅 항목과 grubby 명령어를 사용하여 커널별 부팅 설정을 관리한다.

주요 작업 범위는 다음과 같다.

  • 설치된 부팅 커널 확인
  • 기본 부팅 커널 확인 및 변경
  • 커널 부팅 인수 확인
  • 부팅 인수 추가 및 제거
  • 일회성 부팅 옵션 변경
  • GRUB 설정 파일 확인
  • GRUB 설정 재생성
  • 부팅 관련 장애 점검

적용 대상

  • Red Hat Enterprise Linux 9
  • Rocky Linux 9
  • AlmaLinux 9
  • 기타 RHEL 9 호환 배포판

작업 전 주의사항

주의: 잘못된 기본 커널 지정이나 커널 부팅 인수 변경은 시스템 부팅 실패, 루트 파일시스템 인식 실패 또는 네트워크 연결 장애를 유발할 수 있다.

작업 전 다음 사항을 확인한다.

  • 현재 실행 중인 커널
  • 기본 부팅 커널
  • 정상 부팅 가능한 이전 커널
  • 콘솔 또는 원격 관리 접속 수단
  • /boot/boot/efi 마운트 상태
  • BIOS 또는 UEFI 부팅 방식
  • 현재 적용된 커널 명령행 인수

RHEL 9 GRUB 구성 개요

BLS 부팅 항목

RHEL 9는 커널별 부팅 항목을 Boot Loader Specification 형식으로 관리한다.

일반적인 BLS 부팅 항목 저장 경로:

/boot/loader/entries/

부팅 항목 파일 확인:

ls -lh /boot/loader/entries/

출력 예:

-rw-r--r--. 1 root root 456 Jul 10 10:20 0123456789abcdef-5.14.0-570.18.1.el9_6.x86_64.conf
-rw-r--r--. 1 root root 454 Jun 16 09:10 0123456789abcdef-5.14.0-570.12.1.el9_6.x86_64.conf
-rw-r--r--. 1 root root 392 Jan 15  2026 0123456789abcdef-0-rescue.conf

각 파일은 특정 커널의 다음 정보를 포함한다.

  • 부팅 메뉴 제목
  • 커널 이미지 경로
  • initramfs 이미지 경로
  • 커널 명령행 인수
  • 시스템 머신 ID

GRUB 설정 파일 경로

RHEL 9에서 실제 GRUB 설정 파일은 BIOS와 UEFI 환경 모두 다음 경로를 사용한다.

/boot/grub2/grub.cfg

UEFI 환경에는 다음 파일이 존재할 수 있다.

/boot/efi/EFI/redhat/grub.cfg

이 파일은 실제 설정 파일이 아니라 /boot/grub2/grub.cfg를 불러오는 스텁 파일이다.

주의: RHEL 9 UEFI 시스템에서 grub2-mkconfig의 출력 대상으로 /boot/efi/EFI/redhat/grub.cfg를 지정하지 않는다.

부팅 방식 확인

UEFI 여부 확인

if [[ -d /sys/firmware/efi ]]; then
    echo "UEFI 부팅 환경"
else
    echo "Legacy BIOS 부팅 환경"
fi

efibootmgr 확인

UEFI 환경에서는 다음 명령으로 펌웨어 부팅 항목을 확인할 수 있다.

efibootmgr -v

명령이 없는 경우:

dnf install -y efibootmgr

부팅 관련 파티션 확인

findmnt /boot
findmnt /boot/efi
lsblk -f

현재 실행 중인 커널 확인

uname -r

출력 예:

5.14.0-570.18.1.el9_6.x86_64

현재 실행 커널은 설치된 최신 커널이나 기본 부팅 커널과 다를 수 있다.

설치된 부팅 커널 확인

grubby 전체 정보 확인

grubby --info=ALL

출력 예:

index=0
kernel="/boot/vmlinuz-5.14.0-570.18.1.el9_6.x86_64"
args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=rl/root rhgb quiet"
root="/dev/mapper/rl-root"
initrd="/boot/initramfs-5.14.0-570.18.1.el9_6.x86_64.img"
title="Rocky Linux (5.14.0-570.18.1.el9_6.x86_64) 9.6 (Blue Onyx)"
id="0123456789abcdef-5.14.0-570.18.1.el9_6.x86_64"

index=1
kernel="/boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64"
args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=rl/root rhgb quiet"
root="/dev/mapper/rl-root"
initrd="/boot/initramfs-5.14.0-570.12.1.el9_6.x86_64.img"
title="Rocky Linux (5.14.0-570.12.1.el9_6.x86_64) 9.6 (Blue Onyx)"
id="0123456789abcdef-5.14.0-570.12.1.el9_6.x86_64"

주요 항목:

항목 설명
index GRUB 부팅 항목 순번
kernel 커널 이미지 경로
args 해당 커널에 적용되는 부팅 인수
root 루트 파일시스템 장치
initrd initramfs 이미지 경로
title GRUB 메뉴에 표시되는 제목
id BLS 부팅 항목 ID

커널 경로만 확인

grubby --info=ALL | grep '^kernel='

부팅 메뉴 제목만 확인

grubby --info=ALL | grep '^title='

인덱스와 커널 경로 함께 확인

grubby --info=ALL |
awk -F= '
/^index=/  { index=$2 }
/^kernel=/ { print "index=" index, $0 }
'

기본 부팅 커널 확인

기본 커널 이미지 확인

grubby --default-kernel

출력 예:

/boot/vmlinuz-5.14.0-570.18.1.el9_6.x86_64

기본 커널 버전만 확인

basename "$(grubby --default-kernel)" | sed 's/^vmlinuz-//'

출력 예:

5.14.0-570.18.1.el9_6.x86_64

기본 부팅 인덱스 확인

grubby --default-index

출력 예:

0

기본 부팅 항목 상세 확인

grubby --info="$(grubby --default-kernel)"

기본 부팅 커널 변경

작업 전 확인

uname -r
grubby --default-kernel
grubby --info=ALL
rpm -q kernel-core

변경 대상 커널 이미지가 실제로 존재하는지 확인한다.

ls -lh /boot/vmlinuz-*

대상 initramfs 확인:

ls -lh /boot/initramfs-*.img

특정 커널을 기본값으로 지정

grubby --set-default \
    /boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64

출력 예:

The default is /boot/loader/entries/0123456789abcdef-5.14.0-570.12.1.el9_6.x86_64.conf with index 1 and kernel /boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64

현재 실행 중인 커널을 기본값으로 지정

grubby --set-default "/boot/vmlinuz-$(uname -r)"

인덱스로 기본값 지정

먼저 인덱스를 확인한다.

grubby --info=ALL | grep -E '^(index|kernel|title)='

인덱스 1을 기본 부팅 항목으로 지정하는 예:

grubby --set-default-index=1

권장: 운영 환경에서는 인덱스보다 커널 이미지 경로를 지정하는 방식이 더 명확하다. 커널 설치 또는 삭제 후 인덱스 순서가 변경될 수 있다.

변경 결과 확인

grubby --default-kernel
grubby --default-index

재부팅

systemctl reboot

재부팅 후 검증

uname -r
grubby --default-kernel

실행 커널과 기본 커널 비교

running_kernel=$(uname -r)

default_kernel=$(
    basename "$(grubby --default-kernel)" |
    sed 's/^vmlinuz-//'
)

printf '실행 중인 커널 : %s\n' "$running_kernel"
printf '기본 부팅 커널 : %s\n' "$default_kernel"

if [[ "$running_kernel" == "$default_kernel" ]]; then
    echo "실행 커널과 기본 부팅 커널이 일치합니다."
else
    echo "실행 커널과 기본 부팅 커널이 다릅니다."
fi

현재 적용된 커널 부팅 인수 확인

/proc/cmdline 확인

현재 부팅 시 실제로 커널에 전달된 인수를 확인한다.

cat /proc/cmdline

출력 예:

BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14.0-570.18.1.el9_6.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=rl/root rhgb quiet

기본 커널에 설정된 인수 확인

grubby --info="$(grubby --default-kernel)" | grep '^args='

모든 커널의 부팅 인수 확인

grubby --info=ALL | grep '^args='

BLS 파일에서 직접 확인

grep -H '^options ' /boot/loader/entries/*.conf

참고: /proc/cmdline은 현재 실행 중인 커널에 실제 적용된 값이며, grubby --info는 다음 부팅에 사용할 저장된 설정을 보여준다.

커널 부팅 인수 추가

RHEL 9에서 신규 커널이 설치되면 일반적으로 기존 커널의 명령행 인수가 신규 커널에도 전달된다.

기본 커널에 인수 추가

예제로 커널 패닉 후 10초 뒤 재부팅하도록 설정한다.

grubby \
    --update-kernel=DEFAULT \
    --args="panic=10"

모든 설치 커널에 인수 추가

grubby \
    --update-kernel=ALL \
    --args="panic=10"

특정 커널에 인수 추가

grubby \
    --update-kernel=/boot/vmlinuz-5.14.0-570.18.1.el9_6.x86_64 \
    --args="panic=10"

여러 인수 추가

grubby \
    --update-kernel=ALL \
    --args="panic=10 audit=1"

적용 결과 확인

grubby --info=ALL | grep '^args='

재부팅 후 적용 확인

cat /proc/cmdline

커널 부팅 인수 제거

기본 커널에서 제거

grubby \
    --update-kernel=DEFAULT \
    --remove-args="panic=10"

모든 커널에서 제거

grubby \
    --update-kernel=ALL \
    --remove-args="panic=10"

여러 인수 제거

grubby \
    --update-kernel=ALL \
    --remove-args="panic=10 audit=1"

적용 결과 확인

grubby --info=ALL | grep '^args='

자주 사용하는 부팅 인수 예제

인수 기능 주의사항
rhgb 그래픽 부팅 화면 사용 장애 분석 시 제거할 수 있음
quiet 부팅 메시지 출력을 줄임 장애 분석 시 제거하면 로그 확인이 쉬움
rd.break initramfs 단계에서 셸 진입 비밀번호 복구 또는 초기 부팅 장애 분석에 사용
systemd.unit=rescue.target 복구 모드로 부팅 최소 서비스만 시작
systemd.unit=emergency.target 긴급 모드로 부팅 대부분의 서비스와 파일시스템이 자동 시작되지 않음
selinux=0 SELinux 완전 비활성화 일반적인 장애 분석 용도로 권장하지 않음
enforcing=0 SELinux Permissive 모드로 부팅 임시 장애 분석에 사용 가능
panic=10 커널 패닉 후 10초 뒤 재부팅 장애 원인 분석 전에 자동 재부팅될 수 있음
audit=1 부팅 초기부터 audit 활성화 보안 감사 목적
nomodeset 커널 그래픽 모드 설정 비활성화 GPU 또는 화면 출력 장애 분석 시 제한적으로 사용
ipv6.disable=1 IPv6 기능 비활성화 서비스 의존성과 네트워크 영향을 확인해야 함
mitigations=off 일부 CPU 보안 완화 기능 비활성화 보안 위험이 있으므로 운영 환경 비권장

주의: selinux=0, mitigations=off, 스토리지 관련 rd.* 인수는 시스템 보안 또는 부팅에 큰 영향을 줄 수 있다.

일회성 부팅 옵션 변경

일회성 변경은 GRUB 메뉴에서 특정 부팅 항목을 편집하여 적용한다.

이 방법으로 변경한 값은 다음 부팅에 영구 저장되지 않는다.

적용 절차

  1. 시스템 부팅 시 GRUB 메뉴를 표시한다.
  2. 사용할 커널 항목을 선택한다.
  3. e 키를 눌러 편집 모드로 진입한다.
  4. linux 또는 linuxefi로 시작하는 줄을 찾는다.
  5. 필요한 인수를 추가하거나 제거한다.
  6. Ctrl+x 또는 F10을 눌러 부팅한다.

부팅 메시지 상세 출력

다음 항목을 제거한다.

rhgb quiet

rescue.target 부팅

커널 인수 끝에 다음을 추가한다.

systemd.unit=rescue.target

emergency.target 부팅

systemd.unit=emergency.target

initramfs 중단점 진입

rd.break

GRUB 메뉴 표시 설정

현재 설정 확인

grep -E \
    '^(GRUB_TIMEOUT|GRUB_TIMEOUT_STYLE|GRUB_DEFAULT|GRUB_DISABLE_SUBMENU)' \
    /etc/default/grub

설정 파일 백업

cp -a /etc/default/grub \
    /etc/default/grub.$(date +%Y%m%d-%H%M%S).bak

설정 예제

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

주요 항목:

설정 설명
GRUB_TIMEOUT 기본 항목이 자동 부팅되기 전 대기 시간
GRUB_TIMEOUT_STYLE=menu 부팅 메뉴를 표시
GRUB_TIMEOUT_STYLE=hidden 메뉴를 숨기고 제한 시간 동안 키 입력 대기
GRUB_DEFAULT=saved 저장된 기본 부팅 항목 사용

설정 반영

BIOS와 UEFI 환경 모두 다음 경로에 설정을 생성한다.

grub2-mkconfig -o /boot/grub2/grub.cfg

적용 후 확인

grep -E \
    '^(set timeout|set default|menuentry|submenu)' \
    /boot/grub2/grub.cfg |
head -30

GRUB 설정 파일 재생성

사용 목적

다음과 같은 경우 GRUB 설정 파일을 재생성할 수 있다.

  • /etc/default/grub 변경
  • /etc/grub.d/ 템플릿 변경
  • 부팅 메뉴 설정 오류
  • GRUB 설정 파일 손상
  • 부팅 항목 표시 문제

작업 전 백업

cp -a /boot/grub2/grub.cfg \
    /boot/grub2/grub.cfg.$(date +%Y%m%d-%H%M%S).bak
cp -a /etc/default/grub \
    /etc/default/grub.$(date +%Y%m%d-%H%M%S).bak

문법 및 파일 확인

ls -lh /boot/grub2/grub.cfg
ls -lh /boot/loader/entries/

GRUB 설정 생성

grub2-mkconfig -o /boot/grub2/grub.cfg

출력 예:

Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

생성 후 검증

test -s /boot/grub2/grub.cfg && echo "grub.cfg 파일 존재 및 크기 정상"
grep -E 'blscfg|menuentry' /boot/grub2/grub.cfg | head
grubby --info=ALL

UEFI 환경 주의사항

UEFI GRUB 스텁 파일 확인

Rocky Linux:

cat /boot/efi/EFI/rocky/grub.cfg

RHEL:

cat /boot/efi/EFI/redhat/grub.cfg

AlmaLinux:

cat /boot/efi/EFI/almalinux/grub.cfg

일반적으로 다음과 같이 실제 GRUB 설정 파일을 검색하거나 불러오는 간단한 내용이 포함된다.

search --no-floppy --fs-uuid --set=dev ...
set prefix=($dev)/grub2
export $prefix
configfile $prefix/grub.cfg

주의: 다음과 같이 UEFI 스텁 파일을 직접 재생성하지 않는다.

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

RHEL 9에서는 다음 경로를 사용한다.

grub2-mkconfig -o /boot/grub2/grub.cfg

BLS 부팅 항목 직접 확인

전체 항목 확인

for file in /boot/loader/entries/*.conf; do
    echo "===== $file ====="
    cat "$file"
    echo
done

주요 설정만 확인

grep -H -E \
    '^(title|version|linux|initrd|options|id) ' \
    /boot/loader/entries/*.conf

출력 예:

title Rocky Linux (5.14.0-570.18.1.el9_6.x86_64) 9.6 (Blue Onyx)
version 5.14.0-570.18.1.el9_6.x86_64
linux /vmlinuz-5.14.0-570.18.1.el9_6.x86_64
initrd /initramfs-5.14.0-570.18.1.el9_6.x86_64.img
options root=/dev/mapper/rl-root ro rd.lvm.lv=rl/root rhgb quiet

특정 커널 항목 찾기

grep -Rl \
    '5.14.0-570.18.1.el9_6.x86_64' \
    /boot/loader/entries/

권장: BLS 파일을 직접 수정하기보다 grubby를 사용한다. 직접 수정하면 커널 업데이트나 설정 재생성 과정에서 관리가 복잡해질 수 있다.

rescue 부팅 항목 확인

rescue 커널 확인

grubby --info=ALL | grep -A6 -B1 'rescue'

rescue 이미지 확인

ls -lh /boot/vmlinuz-0-rescue-* /boot/initramfs-0-rescue-*.img

rescue BLS 항목 확인

ls -lh /boot/loader/entries/*rescue*.conf

rescue 항목은 일반 커널이 부팅되지 않을 때 사용할 수 있으므로 임의로 삭제하지 않는다.

기본 점검 명령어 모음

echo "=== 부팅 방식 ==="
if [[ -d /sys/firmware/efi ]]; then
    echo "UEFI"
else
    echo "Legacy BIOS"
fi

echo
echo "=== 현재 실행 커널 ==="
uname -r

echo
echo "=== 기본 부팅 커널 ==="
grubby --default-kernel

echo
echo "=== 기본 부팅 인덱스 ==="
grubby --default-index

echo
echo "=== 설치된 부팅 항목 ==="
grubby --info=ALL

echo
echo "=== 현재 적용된 커널 인수 ==="
cat /proc/cmdline

echo
echo "=== BLS 부팅 항목 ==="
ls -lh /boot/loader/entries/

echo
echo "=== GRUB 설정 파일 ==="
ls -lh /boot/grub2/grub.cfg

echo
echo "=== boot 마운트 ==="
findmnt /boot
findmnt /boot/efi

장애 발생 시 확인

기본 커널을 변경했지만 이전 커널로 부팅됨

확인

uname -r
grubby --default-kernel
grubby --default-index
grubby --info=ALL

원인 가능성

  1. GRUB 메뉴에서 다른 커널을 수동 선택함
  2. 기본 부팅 항목 변경이 적용되지 않음
  3. 신규 커널 부팅 실패 후 이전 커널로 복귀함
  4. grubenv 저장 정보 오류
  5. UEFI 펌웨어가 다른 디스크의 GRUB를 부팅함

추가 확인

grub2-editenv list

UEFI 환경:

efibootmgr -v

grubby에 커널이 표시되지 않음

확인

rpm -q kernel-core
ls -lh /boot/vmlinuz-*
ls -lh /boot/initramfs-*.img
ls -lh /boot/loader/entries/

원인 가능성

  1. 커널 패키지 설치 실패
  2. BLS 항목 누락
  3. /boot 미마운트 상태에서 커널 설치
  4. 커널 또는 initramfs 파일 수동 삭제
  5. /boot 용량 부족

부팅 인수를 추가했지만 적용되지 않음

확인

저장된 설정:

grubby --info=ALL | grep '^args='

현재 적용된 설정:

cat /proc/cmdline

원인 가능성

  1. 변경 후 재부팅하지 않음
  2. 다른 커널로 부팅함
  3. 특정 커널에만 인수를 적용함
  4. GRUB 메뉴에서 일회성으로 인수를 수정함
  5. 중복된 커널 인수로 인해 다른 값이 우선 적용됨

grub2-mkconfig 후 부팅 메뉴가 사라짐

확인

ls -lh /boot/grub2/grub.cfg
ls -lh /boot/loader/entries/
grep -E 'blscfg|menuentry' /boot/grub2/grub.cfg | head

원인 가능성

  1. 잘못된 출력 경로에 설정 파일 생성
  2. UEFI 스텁 파일을 직접 덮어씀
  3. BLS 설정 비활성화
  4. /boot 미마운트
  5. 설정 파일 생성 중 오류

부팅 시 GRUB 메뉴가 표시되지 않음

확인

grep -E \
    '^(GRUB_TIMEOUT|GRUB_TIMEOUT_STYLE)' \
    /etc/default/grub

설정 예

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

적용

grub2-mkconfig -o /boot/grub2/grub.cfg

작업 예제: 이전 커널을 기본값으로 변경

1. 현재 상태 확인

uname -r
grubby --default-kernel
grubby --info=ALL

2. 이전 커널 파일 확인

ls -lh \
    /boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64 \
    /boot/initramfs-5.14.0-570.12.1.el9_6.x86_64.img

3. 기본 커널 변경

grubby --set-default \
    /boot/vmlinuz-5.14.0-570.12.1.el9_6.x86_64

4. 적용 결과 확인

grubby --default-kernel
grubby --default-index

5. 재부팅

systemctl reboot

6. 재부팅 후 확인

uname -r
journalctl -k -b 0 -p err --no-pager
systemctl --failed --no-pager

작업 예제: 부팅 메시지 상세 표시

기본적으로 설정된 rhgb quiet 인수를 제거하여 부팅 메시지를 자세히 표시한다.

작업 전 백업 및 확인

grubby --info=ALL | grep '^args='

모든 커널에서 제거

grubby \
    --update-kernel=ALL \
    --remove-args="rhgb quiet"

적용 확인

grubby --info=ALL | grep '^args='

원복

grubby \
    --update-kernel=ALL \
    --args="rhgb quiet"

최종 점검표

단계 점검 항목 명령어
작업 전 현재 실행 커널 uname -r
작업 전 기본 부팅 커널 grubby --default-kernel
작업 전 전체 부팅 항목 grubby --info=ALL
작업 전 현재 부팅 인수 cat /proc/cmdline
작업 전 boot 마운트 findmnt /boot
변경 후 기본 커널 grubby --default-kernel
변경 후 저장된 부팅 인수 grubby --info=ALL
재부팅 후 실제 실행 커널 uname -r
재부팅 후 실제 적용 인수 cat /proc/cmdline
재부팅 후 커널 오류 journalctl -k -b 0 -p err

관련 문서

참고 자료

  • Red Hat Enterprise Linux 9 - Configuring kernel command-line parameters
  • Red Hat Enterprise Linux 9 - Managing, monitoring, and updating the kernel
  • Red Hat Enterprise Linux 9 - Reinstalling GRUB

변경 이력

날짜 변경 내용 작성자
2026-07-10 최초 작성 changil