RHEL 9 부팅 커널 및 GRUB 관리
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 메뉴에서 특정 부팅 항목을 편집하여 적용한다.
이 방법으로 변경한 값은 다음 부팅에 영구 저장되지 않는다.
적용 절차
- 시스템 부팅 시 GRUB 메뉴를 표시한다.
- 사용할 커널 항목을 선택한다.
e키를 눌러 편집 모드로 진입한다.linux또는linuxefi로 시작하는 줄을 찾는다.- 필요한 인수를 추가하거나 제거한다.
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
원인 가능성
- GRUB 메뉴에서 다른 커널을 수동 선택함
- 기본 부팅 항목 변경이 적용되지 않음
- 신규 커널 부팅 실패 후 이전 커널로 복귀함
grubenv저장 정보 오류- 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/
원인 가능성
- 커널 패키지 설치 실패
- BLS 항목 누락
/boot미마운트 상태에서 커널 설치- 커널 또는 initramfs 파일 수동 삭제
/boot용량 부족
부팅 인수를 추가했지만 적용되지 않음
확인
저장된 설정:
grubby --info=ALL | grep '^args='
현재 적용된 설정:
cat /proc/cmdline
원인 가능성
- 변경 후 재부팅하지 않음
- 다른 커널로 부팅함
- 특정 커널에만 인수를 적용함
- GRUB 메뉴에서 일회성으로 인수를 수정함
- 중복된 커널 인수로 인해 다른 값이 우선 적용됨
grub2-mkconfig 후 부팅 메뉴가 사라짐
확인
ls -lh /boot/grub2/grub.cfg
ls -lh /boot/loader/entries/
grep -E 'blscfg|menuentry' /boot/grub2/grub.cfg | head
원인 가능성
- 잘못된 출력 경로에 설정 파일 생성
- UEFI 스텁 파일을 직접 덮어씀
- BLS 설정 비활성화
/boot미마운트- 설정 파일 생성 중 오류
부팅 시 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
|
관련 문서
- RHEL 9 커널 관리 가이드
- RHEL 9 커널 기본 정보 확인
- RHEL 9 커널 패키지 설치 및 업데이트
- RHEL 9 initramfs 및 dracut 관리
- RHEL 9 커널 장애 분석
- RHEL 9 부팅 장애 복구
참고 자료
- 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 |