RHEL 9 커널 관리 명령어 실무 가이드 문서 원본 보기
←
RHEL 9 커널 관리 명령어 실무 가이드
둘러보기로 이동
검색으로 이동
문서 편집 작업을 수행할 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 작업은 다음 중 하나의 권한을 가진 사용자에게 제한됩니다:
관리자
, 문서 편집자.
문서의 원본을 보거나 복사할 수 있습니다.
== 1. 문서 개요 == === 1.1 목적 === 이 문서는 RHEL 9 계열 시스템에서 자주 사용하는 커널 관련 명령어를 정리한다. 주요 대상은 다음과 같다. * Red Hat Enterprise Linux 9 * Rocky Linux 9 * AlmaLinux 9 * 기타 RHEL 9 호환 배포판 커널 버전 확인, 커널 패키지 관리, 기본 부팅 커널 변경, 커널 모듈 관리, 런타임 파라미터 변경, initramfs 재생성 및 커널 장애 분석 절차를 다룬다. === 1.2 권한 === 조회 명령어 대부분은 일반 사용자도 실행할 수 있지만 다음 작업은 <code>root</code> 권한이 필요하다. * 커널 패키지 설치 및 삭제 * 기본 부팅 커널 변경 * 커널 모듈 적재 및 제거 * 커널 파라미터 변경 * initramfs 재생성 * kdump 설정 * 시스템 재부팅 관리 명령은 다음 중 한 가지 방식으로 실행한다. <code>sudo 명령어</code> 또는: <code>sudo -i</code> === 1.3 주요 주의사항 === 커널, GRUB, initramfs 작업은 시스템 부팅 실패로 이어질 수 있다. 작업 전 다음 사항을 확인한다. <code>uname -r grubby --default-kernel grubby --info=ALL rpm -qa 'kernel*' | sort df -h /boot /boot/efi</code> 설정 파일을 수정할 경우 백업한다. <code>cp -a /etc/default/grub \ /etc/default/grub.$(date +%Y%m%d-%H%M%S).bak cp -a /etc/sysctl.conf \ /etc/sysctl.conf.$(date +%Y%m%d-%H%M%S).bak</code> 원격 서버에서 커널 또는 네트워크 관련 파라미터를 변경할 때는 콘솔 접속 수단을 확보하는 것이 좋다. ---- = 2. 커널 상태 및 버전 확인 = == 2.1 <code>uname</code> == === 기능 === 현재 실행 중인 커널의 버전, 아키텍처 및 시스템 정보를 확인한다. <code>uname</code>은 설치된 커널이 아니라 '''현재 부팅되어 실제 실행 중인 커널'''을 표시한다. === 현재 실행 중인 커널 버전 확인 === <code>uname -r</code> 출력 예: <code>5.14.0-570.18.1.el9_6.x86_64</code> === 전체 커널 정보 확인 === <code>uname -a</code> 출력 예: <code>Linux server01 5.14.0-570.18.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC ...</code> === 시스템 아키텍처 확인 === <code>uname -m</code> 출력 예: <code>x86_64</code> === 확인 포인트 === * 현재 실행 중인 커널 버전 * <code>x86_64</code>, <code>aarch64</code> 등의 시스템 아키텍처 * 커널 업데이트 후 실제로 신규 커널로 부팅되었는지 여부 ---- == 2.2 <code>/proc/version</code> == === 기능 === 현재 실행 중인 커널의 버전과 컴파일러 정보를 확인한다. === 사용 예제 === <code>cat /proc/version</code> 출력 예: <code>Linux version 5.14.0-570.18.1.el9_6.x86_64 ...</code> === 활용 === 커널 버전뿐 아니라 커널 빌드에 사용된 GCC 버전과 빌드 정보를 함께 확인할 때 사용한다. ---- == 2.3 <code>hostnamectl</code> == === 기능 === 호스트명, 운영체제, 커널 버전 및 시스템 아키텍처를 한 번에 확인한다. === 사용 예제 === <code>hostnamectl</code> 출력 예: <code>Static hostname: server01 Operating System: Rocky Linux 9.6 Kernel: Linux 5.14.0-570.18.1.el9_6.x86_64 Architecture: x86-64</code> === 확인 포인트 === * 배포판과 마이너 버전 * 현재 커널 * 물리 서버 또는 가상화 환경 여부 * 시스템 아키텍처 ---- == 2.4 <code>rpm</code> == === 기능 === 설치된 커널 RPM 패키지를 조회한다. === 설치된 기본 커널 패키지 확인 === <code>rpm -q kernel</code> === 커널 관련 패키지 전체 확인 === <code>rpm -qa 'kernel*' | sort</code> === 현재 실행 중인 커널 패키지 확인 === <code>rpm -q kernel-core-$(uname -r)</code> 정상 출력 예: <code>kernel-core-5.14.0-570.18.1.el9_6.x86_64</code> 패키지가 없으면 다음과 같이 표시될 수 있다. <code>package kernel-core-5.14.0-570.18.1.el9_6.x86_64 is not installed</code> === 커널 패키지 설치 시각 확인 === <code>rpm -qa --last 'kernel*'</code> === 확인 포인트 === * 설치된 커널 버전 수 * 실행 중인 커널과 설치된 최신 커널의 차이 * <code>kernel-core</code>, <code>kernel-modules</code>, <code>kernel-modules-core</code> 버전 일치 여부 ---- == 2.5 <code>dnf repoquery</code> == === 기능 === 설치된 커널 패키지와 저장소에서 제공하는 커널 버전을 조회한다. === 설치된 커널 패키지 확인 === <code>dnf repoquery --installed 'kernel*'</code> === 사용 가능한 커널 버전 확인 === <code>dnf repoquery --available kernel</code> === 중복 설치된 커널 버전 확인 === <code>dnf repoquery --installonly</code> <code>dnf repoquery</code> 하위 기능이 부족한 경우 다음 패키지가 필요할 수 있다. <code>dnf install -y dnf-plugins-core</code> ---- = 3. 커널 패키지 설치 및 업데이트 = == 3.1 <code>dnf check-update</code> == === 기능 === 업데이트 가능한 패키지를 확인한다. === 커널 업데이트 확인 === <code>dnf check-update kernel</code> 커널 관련 패키지를 넓게 확인하려면: <code>dnf check-update 'kernel*'</code> <code>dnf check-update</code>는 업데이트가 존재하면 종료 코드 <code>100</code>을 반환할 수 있다. 이는 명령 실패가 아니라 업데이트가 있다는 의미다. 종료 코드 확인: <code>echo $?</code> ---- == 3.2 <code>dnf update kernel</code> == === 기능 === 커널과 관련 구성 패키지를 업데이트한다. RHEL 계열은 일반적으로 신규 커널을 기존 커널 위에 덮어쓰지 않고 별도 버전으로 설치한다. 따라서 문제가 발생하면 이전 커널로 부팅할 수 있다. === 커널만 업데이트 === <code>dnf update kernel</code> === 커널 관련 패키지 전체 업데이트 === <code>dnf update 'kernel*'</code> === 시스템 전체 업데이트 === <code>dnf update</code> === 업데이트 후 확인 === <code>rpm -q kernel grubby --info=ALL</code> === 재부팅 === <code>systemctl reboot</code> === 재부팅 후 검증 === <code>uname -r grubby --default-kernel</code> ---- == 3.3 특정 커널 버전 설치 == === 기능 === 저장소에 여러 커널 버전이 존재할 경우 특정 버전을 지정하여 설치한다. === 사용 가능한 버전 확인 === <code>dnf --showduplicates list kernel</code> === 특정 버전 설치 예제 === <code>dnf install \ kernel-5.14.0-570.18.1.el9_6 \ kernel-core-5.14.0-570.18.1.el9_6 \ kernel-modules-5.14.0-570.18.1.el9_6</code> 실제 패키지 버전은 저장소 조회 결과에 맞춰 지정한다. ---- == 3.4 <code>dnf reinstall</code> == === 기능 === 커널 파일이나 모듈이 손상된 것으로 의심될 때 동일 버전의 패키지를 다시 설치한다. === 현재 커널 패키지 재설치 예제 === 운영 중인 커널을 재설치하기 전에 콘솔 접속 수단과 이전 커널을 확보해야 한다. <code>dnf reinstall \ kernel-core-$(uname -r) \ kernel-modules-core-$(uname -r) \ kernel-modules-$(uname -r)</code> 배포판과 설치 구성에 따라 일부 패키지는 존재하지 않을 수 있다. ---- == 3.5 오래된 커널 삭제 == === 주의사항 === 다음 커널은 삭제하지 않는다. * 현재 실행 중인 커널 * 현재 기본 부팅 커널 * 장애 복구용으로 남겨둔 직전 정상 커널 현재 커널 확인: <code>uname -r</code> 기본 커널 확인: <code>grubby --default-kernel</code> === 직접 버전을 지정하여 삭제 === <code>dnf remove kernel-core-<삭제할-버전></code> 예: <code>dnf remove kernel-core-5.14.0-427.13.1.el9_4.x86_64</code> 의존성에 따라 같은 버전의 <code>kernel-modules</code> 등의 패키지도 함께 삭제될 수 있으므로 삭제 목록을 확인한 후 진행한다. ---- == 3.6 installonly 패키지 보관 개수 확인 == === 기능 === DNF가 커널과 같은 <code>installonly</code> 패키지를 몇 개까지 보관할지 확인한다. <code>grep -R '^installonly_limit' \ /etc/dnf/dnf.conf \ /etc/yum.conf 2>/dev/null</code> 설정 예: <code>installonly_limit=3</code> 변경 후에는 향후 DNF 작업부터 적용된다. 현재 실행 중인 커널을 포함해 최소 2개 이상의 정상 커널을 보관하는 것이 안전하다. ---- = 4. 부팅 커널 및 GRUB 관리 = RHEL 9에서는 설치된 커널 조회, 기본 커널 변경 및 커널 명령행 인수 관리에 <code>grubby</code>를 사용할 수 있다. 신규 커널을 설치할 때 기존 커널 명령행 인수가 신규 커널에도 전달된다. == 4.1 <code>grubby --info=ALL</code> == === 기능 === 설치된 부팅 커널과 각 커널의 GRUB 항목을 확인한다. === 사용 예제 === <code>grubby --info=ALL</code> 간단히 커널 경로만 확인: <code>grubby --info=ALL | grep '^kernel='</code> 커널 제목 확인: <code>grubby --info=ALL | grep '^title='</code> === 확인 포인트 === * 설치된 커널 목록 * 각 커널의 인덱스 * 커널 이미지 경로 * initramfs 경로 * 적용된 커널 명령행 인수 ---- == 4.2 <code>grubby --default-kernel</code> == === 기능 === 다음 부팅에 기본으로 선택되는 커널 이미지 경로를 확인한다. === 사용 예제 === <code>grubby --default-kernel</code> 출력 예: <code>/boot/vmlinuz-5.14.0-570.18.1.el9_6.x86_64</code> ---- == 4.3 <code>grubby --default-index</code> == === 기능 === 기본 부팅 커널의 인덱스를 확인한다. <code>grubby --default-index</code> 출력 예: <code>0</code> ---- == 4.4 <code>grubby --set-default</code> == === 기능 === 특정 커널을 기본 부팅 커널로 지정한다. Red Hat 공식 문서에서도 특정 커널을 기본값으로 지정할 때 <code>grubby --set-default</code> 사용을 안내한다. === 먼저 커널 목록 확인 === <code>grubby --info=ALL | grep '^kernel='</code> === 특정 커널을 기본값으로 지정 === <code>grubby --set-default \ /boot/vmlinuz-5.14.0-570.18.1.el9_6.x86_64</code> === 적용 결과 확인 === <code>grubby --default-kernel grubby --default-index</code> === 현재 실행 중인 커널을 기본값으로 지정 === <code>grubby --set-default /boot/vmlinuz-$(uname -r)</code> === 주의사항 === 이 명령은 현재 실행 중인 커널을 즉시 변경하지 않는다. 다음 재부팅부터 적용된다. ---- == 4.5 <code>grubby --update-kernel</code> == === 기능 === 커널 부팅 인수를 추가하거나 제거한다. === 모든 설치 커널에 인수 추가 === <code>grubby --update-kernel=ALL --args="audit=1"</code> === 기본 커널에만 인수 추가 === <code>grubby --update-kernel=DEFAULT --args="audit=1"</code> === 특정 커널에 인수 추가 === <code>grubby \ --update-kernel=/boot/vmlinuz-$(uname -r) \ --args="systemd.log_level=debug"</code> === 인수 제거 === <code>grubby --update-kernel=ALL --remove-args="audit=1"</code> === 적용 상태 확인 === <code>grubby --info=ALL | grep '^args='</code> === 주의사항 === 커널 부팅 인수는 일반적으로 재부팅 후 적용된다. 잘못된 스토리지, LVM, SELinux, 콘솔 또는 root 파일시스템 관련 인수는 부팅 실패를 유발할 수 있다. ---- == 4.6 현재 적용된 커널 명령행 확인 == === 기능 === 현재 부팅된 커널에 실제 전달된 부팅 인수를 확인한다. <code>cat /proc/cmdline</code> 출력 예: <code>BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14... root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,...</code> === 활용 === <code>grubby</code>에 설정된 값과 실제 부팅에 적용된 값을 비교할 때 사용한다. <code>grubby --info="$(grubby --default-kernel)" cat /proc/cmdline</code> ---- = 5. 커널 모듈 조회 및 관리 = RHEL 9의 커널 모듈 관리는 <code>lsmod</code>, <code>modinfo</code>, <code>modprobe</code> 등을 중심으로 수행한다. == 5.1 <code>lsmod</code> == === 기능 === 현재 커널에 적재된 모듈을 조회한다. === 전체 모듈 확인 === <code>lsmod</code> === 특정 모듈 확인 === <code>lsmod | grep '^bonding'</code> <code>lsmod | grep '^nf_conntrack'</code> === 출력 항목 === <code>Module Size Used by</code> * <code>Module</code>: 모듈 이름 * <code>Size</code>: 모듈 크기 * <code>Used by</code>: 사용 횟수 및 의존 모듈 ---- == 5.2 <code>/proc/modules</code> == === 기능 === 현재 적재된 커널 모듈을 proc 파일시스템에서 직접 확인한다. <code>cat /proc/modules</code> 특정 모듈 확인: <code>grep '^bonding ' /proc/modules</code> <code>lsmod</code>와 비슷한 정보를 제공하며, 스크립트에서 직접 확인할 때 사용할 수 있다. ---- == 5.3 <code>modinfo</code> == === 기능 === 커널 모듈 파일의 경로, 설명, 버전, 라이선스, 의존성 및 지원 파라미터를 확인한다. === 사용 예제 === <code>modinfo bonding</code> === 주요 항목만 확인 === <code>modinfo -F filename bonding modinfo -F description bonding modinfo -F depends bonding modinfo -F parm bonding</code> === 현재 커널 기준 모듈 확인 === <code>modinfo -k "$(uname -r)" bonding</code> === 다른 설치 커널의 모듈 확인 === <code>modinfo -k 5.14.0-570.18.1.el9_6.x86_64 bonding</code> === 확인 포인트 === * 모듈 파일이 현재 커널 버전에 존재하는지 * 모듈 의존성 * 모듈에서 지원하는 옵션 * 서명 및 라이선스 정보 ---- == 5.4 <code>modprobe</code> == === 기능 === 모듈과 필요한 의존 모듈을 함께 적재한다. === 모듈 적재 === <code>modprobe bonding</code> === 적재 확인 === <code>lsmod | grep '^bonding'</code> === 커널 로그 확인 === <code>journalctl -k -n 50</code> 또는: <code>dmesg --level=err,warn</code> === 옵션을 지정하여 적재 === <code>modprobe 모듈명 옵션명=값</code> 예: <code>modprobe dummy numdummies=2</code> 모듈별 지원 옵션은 다음 명령으로 확인한다. <code>modinfo -F parm dummy</code> ---- == 5.5 <code>modprobe -r</code> == === 기능 === 현재 적재된 커널 모듈을 제거한다. === 사용 예제 === <code>modprobe -r dummy</code> === 제거 확인 === <code>lsmod | grep '^dummy'</code> 출력이 없으면 제거된 것이다. === 주의사항 === 다음 모듈은 운영 중 임의로 제거하면 안 된다. * 사용 중인 NIC 드라이버 * 스토리지 컨트롤러 드라이버 * 루트 파일시스템 관련 모듈 * 방화벽과 연결 추적에 사용 중인 모듈 * 다른 모듈이 의존하는 모듈 사용 중인 모듈은 다음과 같은 오류로 제거되지 않을 수 있다. <code>modprobe: FATAL: Module ... is in use.</code> 원격 서버에서 NIC 드라이버를 제거하면 즉시 통신이 끊길 수 있다. ---- == 5.6 <code>insmod</code> == === 기능 === 지정한 <code>.ko</code> 모듈 파일을 직접 적재한다. <code>insmod /path/to/module.ko</code> === 권장 사용 방식 === 일반적인 관리에서는 의존성까지 처리하는 <code>modprobe</code> 사용을 권장한다. <code>modprobe 모듈명</code> <code>insmod</code>는 모듈 개발이나 의존성 문제를 직접 분석할 때 제한적으로 사용한다. ---- == 5.7 <code>rmmod</code> == === 기능 === 지정한 커널 모듈을 직접 제거한다. <code>rmmod dummy</code> 일반적으로 의존성을 고려하는 다음 명령을 우선 사용한다. <code>modprobe -r dummy</code> ---- == 5.8 <code>depmod</code> == === 기능 === 커널 모듈 간 의존성 데이터베이스를 생성하거나 갱신한다. === 현재 커널 기준 갱신 === <code>depmod -a</code> === 특정 커널 기준 갱신 === <code>depmod -a 5.14.0-570.18.1.el9_6.x86_64</code> === 사용 사례 === * 외부 커널 모듈을 수동 설치한 경우 * <code>/lib/modules/<커널버전>/</code> 아래 모듈을 변경한 경우 * <code>modprobe</code>에서 모듈을 찾지 못하는 경우 모듈 파일 위치 확인: <code>find /lib/modules/$(uname -r) -type f -name '*.ko*'</code> ---- = 6. 모듈 자동 적재 및 차단 = == 6.1 부팅 시 모듈 자동 적재 == === 설정 디렉터리 === <code>/etc/modules-load.d/</code> === 설정 예제 === <code>cat > /etc/modules-load.d/bonding.conf <<'EOF' bonding EOF</code> === 즉시 적용 === <code>modprobe bonding</code> === 확인 === <code>lsmod | grep '^bonding' cat /etc/modules-load.d/bonding.conf</code> ---- == 6.2 모듈 옵션 영구 설정 == === 설정 디렉터리 === <code>/etc/modprobe.d/</code> === 설정 예제 === <code>cat > /etc/modprobe.d/dummy.conf <<'EOF' options dummy numdummies=2 EOF</code> === 기존 모듈 재적재 === <code>modprobe -r dummy modprobe dummy</code> === 옵션 확인 === 모듈에 따라 <code>/sys/module</code> 아래에서 실제 적용값을 확인할 수 있다. <code>find /sys/module/dummy/parameters -maxdepth 1 -type f -print</code> <code>cat /sys/module/dummy/parameters/numdummies</code> ---- == 6.3 특정 모듈 차단 == === 주의사항 === NIC, 스토리지 및 루트 파일시스템 관련 모듈을 차단하면 시스템이 부팅되지 않을 수 있다. 먼저 모듈 사용 여부를 확인한다. <code>lsmod | grep '^모듈명' modinfo 모듈명</code> === 차단 설정 예제 === <code>cat > /etc/modprobe.d/blacklist-example.conf <<'EOF' blacklist 모듈명 install 모듈명 /bin/false EOF</code> 예: <code>cat > /etc/modprobe.d/blacklist-firewire.conf <<'EOF' blacklist firewire_core install firewire_core /bin/false EOF</code> === initramfs 재생성 === 부팅 초기에 적재되는 모듈은 initramfs에도 포함될 수 있으므로 재생성이 필요할 수 있다. <code>dracut -f</code> === 설정 확인 === <code>modprobe -n -v firewire_core</code> 출력 예: <code>install /bin/false</code> ---- = 7. 커널 런타임 파라미터 관리 = == 7.1 <code>sysctl</code> == === 기능 === 실행 중인 커널의 런타임 파라미터를 조회하거나 변경한다. 커널 파라미터는 <code>/proc/sys/</code> 아래의 값을 읽고 쓰는 방식으로 관리된다. ---- == 7.2 전체 파라미터 조회 == <code>sysctl -a</code> 출력이 매우 많으므로 <code>grep</code>과 함께 사용하는 것이 좋다. <code>sysctl -a | grep '^net.ipv4'</code> <code>sysctl -a | grep '^vm.'</code> 일부 항목은 조회 과정에서 권한 또는 존재 여부와 관련된 메시지가 출력될 수 있다. ---- == 7.3 특정 파라미터 확인 == === IP 포워딩 확인 === <code>sysctl net.ipv4.ip_forward</code> === 커널 패닉 후 자동 재부팅 시간 확인 === <code>sysctl kernel.panic</code> === 스왑 사용 성향 확인 === <code>sysctl vm.swappiness</code> === 파일 디스크립터 최대값 확인 === <code>sysctl fs.file-max</code> ---- == 7.4 일시적으로 파라미터 변경 == === IP 포워딩 활성화 === <code>sysctl -w net.ipv4.ip_forward=1</code> === 적용 확인 === <code>sysctl net.ipv4.ip_forward</code> === 주의사항 === <code>sysctl -w</code>로 설정한 값은 재부팅하면 초기화된다. ---- == 7.5 <code>/proc/sys</code>를 통한 직접 변경 == 다음 두 방식은 동일한 목적에 사용된다. <code>sysctl -w net.ipv4.ip_forward=1</code> <code>echo 1 > /proc/sys/net/ipv4/ip_forward</code> 조회: <code>cat /proc/sys/net/ipv4/ip_forward</code> 일반적인 운영과 문서화에서는 파라미터 이름이 명확한 <code>sysctl</code> 사용이 편리하다. ---- == 7.6 영구 파라미터 설정 == === 권장 설정 경로 === <code>/etc/sysctl.d/*.conf</code> === 설정 예제 === <code>cat > /etc/sysctl.d/99-custom.conf <<'EOF' net.ipv4.ip_forward = 1 kernel.panic = 10 vm.swappiness = 10 EOF</code> === 설정 적용 === <code>sysctl --system</code> === 특정 파일만 적용 === <code>sysctl -p /etc/sysctl.d/99-custom.conf</code> === 검증 === <code>sysctl net.ipv4.ip_forward sysctl kernel.panic sysctl vm.swappiness</code> === 설정 파일 검색 === 같은 파라미터가 여러 파일에 중복 정의되었는지 확인한다. <code>grep -R --line-number \ 'net.ipv4.ip_forward' \ /etc/sysctl.conf \ /etc/sysctl.d \ /usr/lib/sysctl.d \ /run/sysctl.d 2>/dev/null</code> === 확인 포인트 === * 동일 파라미터 중복 정의 여부 * 파일 적용 순서 * 마지막에 적용된 값 * NetworkManager 또는 애플리케이션에서 별도 변경하는 값인지 여부 ---- = 8. 커널 로그 및 이벤트 확인 = == 8.1 <code>journalctl -k</code> == === 기능 === systemd journal에 저장된 커널 로그를 확인한다. === 현재 부팅의 커널 로그 전체 확인 === <code>journalctl -k</code> === 최근 로그 확인 === <code>journalctl -k -n 100</code> === 실시간 로그 확인 === <code>journalctl -k -f</code> === 오류 이상 로그 확인 === <code>journalctl -k -p err</code> === 경고 이상 로그 확인 === <code>journalctl -k -p warning</code> === 특정 시간 이후 로그 === <code>journalctl -k --since "2026-07-10 09:00:00"</code> === 특정 키워드 검색 === <code>journalctl -k | grep -iE 'error|fail|timeout|reset'</code> ---- == 8.2 이전 부팅의 커널 로그 확인 == === 부팅 이력 확인 === <code>journalctl --list-boots</code> 출력 예: <code>-2 ... -1 ... 0 ...</code> === 직전 부팅의 커널 로그 확인 === <code>journalctl -k -b -1</code> === 두 번 전 부팅 로그 === <code>journalctl -k -b -2</code> === 직전 부팅의 오류 이상 로그 === <code>journalctl -k -b -1 -p err</code> === 활용 === * 비정상 재부팅 원인 분석 * 커널 패닉 전후 로그 확인 * 디스크 또는 NIC 초기화 실패 확인 * 이전 커널로 부팅했을 때의 오류 비교 ---- == 8.3 <code>dmesg</code> == === 기능 === 커널 링 버퍼 메시지를 조회한다. === 전체 로그 확인 === <code>dmesg</code> === 사람이 읽기 쉬운 시간 표시 === <code>dmesg -T</code> === 실시간 로그 확인 === <code>dmesg -w</code> === 오류와 경고만 확인 === <code>dmesg --level=err,warn</code> === 특정 장치 또는 오류 검색 === <code>dmesg -T | grep -iE 'nvme|scsi|ata|reset|timeout|error'</code> NIC 관련 확인: <code>dmesg -T | grep -iE 'link|eth|enp|firmware'</code> 메모리 및 OOM 확인: <code>dmesg -T | grep -iE 'oom|out of memory|killed process'</code> === 주의사항 === <code>dmesg -T</code>의 사람이 읽기 쉬운 시각은 부팅 후 경과 시간을 현재 시각 기준으로 변환한 값이므로 시스템 시간 변경이 있었던 환경에서는 정확하지 않을 수 있다. 정확한 저널 시각이 필요하면 다음 명령을 우선 사용한다. <code>journalctl -k -o short-iso</code> ---- = 9. 커널 및 하드웨어 정보 확인 = == 9.1 <code>lscpu</code> == === 기능 === CPU 아키텍처, 코어, 스레드, 소켓, 가상화 및 CPU 취약점 상태를 확인한다. <code>lscpu</code> 주요 항목만 확인: <code>lscpu | grep -E \ 'Architecture|CPU\(s\)|Thread|Core|Socket|NUMA|Virtualization'</code> 취약점 정보 확인: <code>lscpu | grep '^Vulnerability'</code> ---- == 9.2 <code>/proc/cpuinfo</code> == === 기능 === 커널이 인식한 CPU 상세 정보를 확인한다. <code>cat /proc/cpuinfo</code> CPU 모델 확인: <code>grep 'model name' /proc/cpuinfo | sort -u</code> 논리 CPU 수 확인: <code>grep -c '^processor' /proc/cpuinfo</code> CPU 플래그 확인: <code>grep -m1 '^flags' /proc/cpuinfo</code> ---- == 9.3 <code>/proc/meminfo</code> == === 기능 === 커널이 관리하는 메모리 상태를 확인한다. <code>cat /proc/meminfo</code> 주요 항목 확인: <code>grep -E \ 'MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree' \ /proc/meminfo</code> HugePage 확인: <code>grep -i huge /proc/meminfo</code> ---- == 9.4 <code>sysfs</code> == === 기능 === 커널이 인식한 장치, 드라이버, 모듈 및 클래스 정보를 <code>/sys</code> 아래에서 확인한다. === 네트워크 인터페이스 확인 === <code>ls -l /sys/class/net/</code> === NIC 드라이버 확인 === <code>readlink -f /sys/class/net/eth0/device/driver</code> 인터페이스명이 <code>ens192</code>인 경우: <code>readlink -f /sys/class/net/ens192/device/driver</code> === 모듈 파라미터 확인 === <code>find /sys/module/모듈명/parameters \ -maxdepth 1 -type f -print</code> 각 값 출력: <code>for file in /sys/module/모듈명/parameters/*; do printf '%s=' "$(basename "$file")" cat "$file" done</code> ---- = 10. initramfs 관리 = == 10.1 initramfs란 == initramfs는 커널이 실제 루트 파일시스템을 마운트하기 전에 사용하는 초기 사용자 공간이다. 다음과 같은 구성 요소가 포함될 수 있다. * 스토리지 드라이버 * LVM 및 device-mapper * RAID 모듈 * 암호화 디스크 지원 * 루트 파일시스템 드라이버 * 부팅 초기 네트워크 구성 initramfs가 손상되거나 필요한 드라이버가 누락되면 루트 디스크를 찾지 못해 부팅에 실패할 수 있다. ---- == 10.2 <code>lsinitrd</code> == === 기능 === initramfs 이미지에 포함된 파일과 모듈을 확인한다. === 현재 커널의 initramfs 확인 === <code>lsinitrd /boot/initramfs-$(uname -r).img</code> === 특정 모듈 포함 여부 확인 === <code>lsinitrd /boot/initramfs-$(uname -r).img | grep -i nvme</code> LVM 관련 확인: <code>lsinitrd /boot/initramfs-$(uname -r).img | grep -i lvm</code> === initramfs 이미지 파일 확인 === <code>ls -lh /boot/initramfs-*.img</code> ---- == 10.3 <code>dracut</code> == === 기능 === initramfs 이미지를 생성하거나 재생성한다. === 주의사항 === 잘못된 initramfs를 생성하면 다음 부팅에서 루트 디스크를 찾지 못할 수 있다. 작업 전 다음을 확인한다. <code>uname -r df -h /boot ls -lh /boot/initramfs-$(uname -r).img</code> 기존 이미지 백업: <code>cp -a \ /boot/initramfs-$(uname -r).img \ /boot/initramfs-$(uname -r).img.$(date +%Y%m%d-%H%M%S).bak</code> === 현재 커널 initramfs 강제 재생성 === <code>dracut -f</code> === 파일을 명시하여 재생성 === <code>dracut -f \ /boot/initramfs-$(uname -r).img \ $(uname -r)</code> === 특정 설치 커널의 initramfs 생성 === <code>dracut -f \ /boot/initramfs-5.14.0-570.18.1.el9_6.x86_64.img \ 5.14.0-570.18.1.el9_6.x86_64</code> === 전체 설치 커널 대상 재생성 === <code>dracut --regenerate-all --force</code> === 상세 출력 === <code>dracut -f -v</code> === 생성 후 검증 === <code>ls -lh /boot/initramfs-$(uname -r).img lsinitrd /boot/initramfs-$(uname -r).img | head</code> ---- = 11. 재부팅 필요 여부 확인 = == 11.1 실행 커널과 최신 설치 커널 비교 == === 현재 실행 커널 === <code>uname -r</code> === 기본 부팅 커널 === <code>basename "$(grubby --default-kernel)" | sed 's/^vmlinuz-//'</code> === 설치된 최신 kernel-core === <code>rpm -q kernel-core \ --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' \ | sort -V \ | tail -1</code> === 간단 비교 스크립트 === <code>running_kernel=$(uname -r) default_kernel=$( basename "$(grubby --default-kernel)" | sed 's/^vmlinuz-//' ) printf 'Running kernel : %s\n' "$running_kernel" printf 'Default kernel : %s\n' "$default_kernel" if <nowiki>[[ "$running_kernel" == "$default_kernel" ]]</nowiki>; then echo "현재 기본 커널로 실행 중입니다." else echo "재부팅 후 변경될 커널이 존재합니다." fi</code> ---- == 11.2 <code>dnf needs-restarting</code> == === 기능 === 업데이트 후 재시작이 필요한 프로세스나 시스템 재부팅 필요 여부를 확인한다. 필요 패키지: <code>dnf install -y dnf-utils</code> 시스템 재부팅 필요 여부 확인: <code>dnf needs-restarting -r</code> 프로세스 확인: <code>dnf needs-restarting</code> 배포판 및 패키지 버전에 따라 명령 제공 패키지가 <code>dnf-utils</code> 또는 <code>dnf-plugins-core</code>로 구성될 수 있다. ---- = 12. kdump 커널 크래시 덤프 = == 12.1 개요 == <code>kdump</code>는 커널 패닉이 발생했을 때 별도의 crash kernel로 전환하여 메모리 덤프를 저장하는 기능이다. RHEL 9에서는 특정 커널 또는 설치된 전체 커널에 대해 kdump 기능을 구성할 수 있으며, 운영 전에 정상 작동 여부를 정기적으로 검증하는 것이 권장된다. ---- == 12.2 패키지 설치 == <code>dnf install -y kexec-tools</code> ---- == 12.3 서비스 활성화 == <code>systemctl enable --now kdump</code> === 상태 확인 === <code>systemctl status kdump --no-pager</code> <code>kdumpctl status</code> 정상 예: <code>kdump: Kdump is operational</code> ---- == 12.4 crashkernel 설정 확인 == 현재 적용값: <code>cat /proc/cmdline | grep -o 'crashkernel=[^ ]*'</code> GRUB 설정 확인: <code>grubby --info=ALL | grep '^args=' | grep crashkernel</code> 예약된 메모리 확인: <code>dmesg -T | grep -i crashkernel</code> ---- == 12.5 덤프 저장 경로 확인 == <code>grep -Ev '^<nowiki>[[:space:]]</nowiki>*(#|$)' /etc/kdump.conf</code> 기본 저장 경로는 일반적으로 다음 위치를 사용한다. <code>/var/crash/</code> 확인: <code>find /var/crash -maxdepth 3 -type f -ls</code> <code>kdump</code>는 로컬 장치, 파일시스템 또는 지원되는 네트워크 대상으로 덤프를 저장할 수 있다. ---- == 12.6 설정 검증 == <code>kdumpctl showmem kdumpctl status kdumpctl estimate</code> 서비스 로그: <code>journalctl -u kdump --no-pager</code> ---- == 12.7 강제 크래시 테스트 == === 매우 위험 === 다음 명령은 시스템을 의도적으로 커널 패닉 상태로 만들며 즉시 중단 또는 재부팅시킨다. <code>echo c > /proc/sysrq-trigger</code> 운영 서버에서는 실행하지 않는다. 실행 전 반드시 다음 조건을 만족해야 한다. * 모든 중요 데이터 저장 * 서비스 중단 승인 * 유지보수 시간 확보 * 콘솔 접속 가능 * kdump 저장 공간 확보 * 테스트 대상이 운영 시스템이 아님 Red Hat 문서에서도 해당 테스트가 커널을 강제로 크래시시키며 데이터 손실을 유발할 수 있다고 경고한다. ---- = 13. 커널 장애 분석 명령어 = == 13.1 커널 오류 키워드 검색 == 현재 부팅: <code>journalctl -k -b 0 | grep -iE \ 'panic|oops|bug:|call trace|segfault|hung task|soft lockup|hard lockup|watchdog'</code> 직전 부팅: <code>journalctl -k -b -1 | grep -iE \ 'panic|oops|bug:|call trace|segfault|hung task|soft lockup|hard lockup|watchdog'</code> ---- == 13.2 하드웨어 오류 검색 == <code>journalctl -k | grep -iE \ 'mce|machine check|hardware error|edac|ecc|aer|pcie bus error'</code> === 주요 의미 === * <code>MCE</code>, <code>Machine Check</code>: CPU가 감지한 하드웨어 오류 * <code>EDAC</code>, <code>ECC</code>: 메모리 오류 또는 오류 정정 관련 * <code>AER</code>: PCI Express 고급 오류 보고 * <code>PCIe Bus Error</code>: PCIe 링크 또는 장치 오류 ---- == 13.3 스토리지 오류 검색 == <code>journalctl -k | grep -iE \ 'nvme|scsi|ata|i/o error|blk_update_request|buffer i/o|reset|timeout'</code> 확인 포인트: * 디스크 I/O 오류 * 컨트롤러 reset * 명령 timeout * NVMe 장치 초기화 실패 * SCSI sense 오류 * 파일시스템 remount 또는 read-only 전환 ---- == 13.4 OOM 확인 == <code>journalctl -k | grep -iE \ 'out of memory|oom-killer|killed process'</code> 상세 확인: <code>journalctl -k -o short-iso | grep -i -A20 -B10 \ 'out of memory\|oom-killer\|killed process'</code> 확인 포인트: * 종료된 프로세스 이름 * 프로세스 PID * 메모리 사용량 * swap 사용량 * OOM 점수 * cgroup 또는 컨테이너 단위 제한 여부 ---- == 13.5 커널 taint 상태 확인 == === 기능 === 비표준 모듈, 강제 모듈 제거, 하드웨어 오류 또는 커널 경고 등으로 커널이 tainted 상태인지 확인한다. <code>cat /proc/sys/kernel/tainted</code> 정상 상태: <code>0</code> 0이 아닌 값이면 하나 이상의 taint 플래그가 설정된 것이다. 관련 커널 로그 확인: <code>journalctl -k | grep -i taint</code> 외부 모듈 확인: <code>lsmod</code> <code>for module in $(lsmod | awk 'NR>1 {print $1}'); do signer=$(modinfo -F signer "$module" 2>/dev/null) printf '%-30s %s\n' "$module" "${signer:-unsigned-or-unavailable}" done</code> ---- = 14. 실무 점검 명령어 모음 = == 14.1 기본 커널 상태 점검 == <code>echo "=== OS ===" cat /etc/redhat-release echo "=== Running kernel ===" uname -r echo "=== Default kernel ===" grubby --default-kernel echo "=== Installed kernels ===" rpm -q kernel kernel-core echo "=== Boot command line ===" cat /proc/cmdline echo "=== Boot partition ===" df -h /boot /boot/efi 2>/dev/null echo "=== Kernel errors ===" journalctl -k -b 0 -p err --no-pager</code> ---- == 14.2 커널 업데이트 전 점검 == <code>uname -r grubby --default-kernel grubby --info=ALL rpm -qa 'kernel*' | sort df -h /boot /boot/efi dnf check-update 'kernel*'</code> 확인할 사항: * <code>/boot</code> 여유 공간 * 정상 부팅 가능한 이전 커널 존재 여부 * 현재 커널과 기본 커널 일치 여부 * kdump 작동 여부 * 외부 또는 DKMS 계열 드라이버 사용 여부 ---- == 14.3 커널 업데이트 후 점검 == 재부팅 전: <code>rpm -q kernel grubby --info=ALL grubby --default-kernel ls -lh /boot/vmlinuz-* /boot/initramfs-*.img</code> 재부팅 후: <code>uname -r grubby --default-kernel systemctl --failed journalctl -k -b 0 -p err</code> 서비스 상태 확인: <code>systemctl --failed --no-pager</code> NIC 확인: <code>ip -br link ip -br addr</code> 스토리지 확인: <code>lsblk findmnt</code> ---- == 14.4 커널 모듈 장애 점검 == <code>module="모듈명" modinfo "$module" lsmod | grep "^${module}" modprobe -n -v "$module" journalctl -k -b 0 | grep -i "$module" find /lib/modules/$(uname -r) -type f -iname "*${module}*"</code> 확인할 사항: * 현재 커널용 모듈 파일 존재 여부 * 모듈 이름 오타 여부 * blacklist 또는 <code>install /bin/false</code> 설정 여부 * 의존 모듈 누락 여부 * Secure Boot로 인한 서명 거부 여부 * 커널 버전과 외부 모듈 빌드 버전 일치 여부 ---- = 15. 증상별 빠른 확인표 = == 15.1 커널 업데이트 후 이전 버전으로 계속 부팅됨 == 확인: <code>uname -r grubby --default-kernel grubby --info=ALL</code> 조치 예: <code>grubby --set-default /boot/vmlinuz-<신규커널버전> systemctl reboot</code> 검증: <code>uname -r</code> ---- == 15.2 <code>modprobe: FATAL: Module ... not found</code> == 확인: <code>uname -r modinfo 모듈명 find /lib/modules/$(uname -r) -iname '*모듈명*' rpm -qa 'kernel-modules*' | sort</code> 의심 구간: * 현재 커널용 모듈 패키지 미설치 * 모듈 이름 오류 * 커널 업데이트 후 미재부팅 * 외부 모듈 빌드 실패 * 모듈 의존성 정보 미갱신 조치 예: <code>depmod -a dnf reinstall kernel-modules-$(uname -r)</code> 패키지 존재 여부는 먼저 확인한다. <code>dnf list --installed kernel-modules-$(uname -r)</code> ---- == 15.3 <code>/boot</code> 용량 부족 == 확인: <code>df -h /boot du -sh /boot/* rpm -q kernel kernel-core grubby --info=ALL</code> 조치 방향: # 현재 실행 커널 확인 # 기본 부팅 커널 확인 # 직전 정상 커널 확보 # 오래된 커널 패키지 삭제 # <code>/boot</code> 여유 공간 재확인 <code>uname -r grubby --default-kernel dnf remove kernel-core-<오래된버전> df -h /boot</code> <code>/boot</code> 안의 커널 및 initramfs 파일을 <code>rm</code>으로 직접 삭제하기보다 RPM/DNF로 패키지를 제거하는 방식이 안전하다. ---- == 15.4 initramfs 손상 의심 == 확인: <code>ls -lh /boot/initramfs-*.img lsinitrd /boot/initramfs-$(uname -r).img journalctl -k -b 0</code> 백업: <code>cp -a \ /boot/initramfs-$(uname -r).img \ /boot/initramfs-$(uname -r).img.bak</code> 재생성: <code>dracut -f -v</code> 검증: <code>lsinitrd /boot/initramfs-$(uname -r).img | head</code> ---- = 16. 주요 명령어 요약 = {| class="wikitable" !명령어 !주요 기능 |- |<code>uname -r</code> |현재 실행 중인 커널 버전 확인 |- |<code>uname -a</code> |커널과 시스템 전체 정보 확인 |- |<code>hostnamectl</code> |OS, 커널, 아키텍처 통합 확인 |- |<code>rpm -q kernel</code> |설치된 커널 패키지 조회 |- |<code>rpm -qa 'kernel*'</code> |커널 관련 패키지 전체 조회 |- |<code>dnf check-update kernel</code> |커널 업데이트 여부 확인 |- |<code>dnf update kernel</code> |커널 업데이트 |- |<code>dnf repoquery --installonly</code> |installonly 패키지 조회 |- |<code>grubby --info=ALL</code> |설치된 부팅 커널 정보 확인 |- |<code>grubby --default-kernel</code> |기본 부팅 커널 확인 |- |<code>grubby --set-default</code> |기본 부팅 커널 변경 |- |<code>grubby --update-kernel</code> |커널 부팅 인수 추가 및 제거 |- |<code>cat /proc/cmdline</code> |현재 적용된 부팅 인수 확인 |- |<code>lsmod</code> |적재된 커널 모듈 확인 |- |<code>modinfo</code> |모듈 상세 정보 확인 |- |<code>modprobe</code> |모듈 적재 |- |<code>modprobe -r</code> |모듈 제거 |- |<code>depmod -a</code> |모듈 의존성 데이터 갱신 |- |<code>sysctl</code> |커널 런타임 파라미터 확인 |- |<code>sysctl -w</code> |커널 파라미터 일시 변경 |- |<code>sysctl --system</code> |sysctl 영구 설정 전체 적용 |- |<code>journalctl -k</code> |커널 저널 확인 |- |<code>journalctl -k -b -1</code> |이전 부팅의 커널 로그 확인 |- |<code>dmesg</code> |커널 링 버퍼 확인 |- |<code>lsinitrd</code> |initramfs 내용 확인 |- |<code>dracut -f</code> |initramfs 재생성 |- |<code>kdumpctl status</code> |kdump 작동 상태 확인 |- |<code>lscpu</code> |CPU 및 커널 인식 정보 확인 |- |<code>cat /proc/meminfo</code> |커널 메모리 관리 정보 확인 |} ---- = 17. 권장 문서 분리 방향 = 현재 문서는 커널 관리 명령어를 폭넓게 다루는 상위 문서로 사용한다. 내용이 많아질 경우 다음 문서로 분리한다. # RHEL 9 커널 버전 확인 및 업데이트 # RHEL 9 GRUB 및 기본 부팅 커널 관리 # RHEL 9 커널 모듈 관리 # RHEL 9 sysctl 커널 파라미터 관리 # RHEL 9 initramfs 및 dracut 관리 # RHEL 9 kdump 구성 및 vmcore 분석 # RHEL 9 커널 패닉 및 부팅 장애 분석 # RHEL 9 <code>/boot</code> 용량 부족 처리 # RHEL 9 커널 업데이트 후 네트워크 드라이버 장애 분석 ---- = 18. 참고사항 = Red Hat은 RHEL 커널을 RPM 패키지 형태로 제공하며, 커널 업데이트와 검증에는 패키지 관리 체계를 사용하는 것을 전제로 한다. Red Hat에서 제공하지 않은 별도 커널은 공식 지원 범위에 영향을 줄 수 있다. 본 문서의 명령어는 RHEL 9 일반 커널을 기준으로 한다. 다음 환경은 별도의 추가 확인이 필요하다. * RHEL for Real Time 커널 * SAP 전용 설정 * 커스텀 커널 * DKMS 또는 벤더 외부 드라이버 * Secure Boot 활성화 환경 * 클라우드 공급자 전용 커널 * 실시간 패치 또는 kpatch 적용 환경
RHEL 9 커널 관리 명령어 실무 가이드
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
associated-pages
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보