kernel-5.14.0-362.13.0.1.el9_3 커널패닉 및 디버깅

1.
Rocky Linux 9.3을 설치한 서버에서 Kernel Panic이 발생하였습니다. 시험중인 서버라 이런저런 작업을 설 이전부터 했습니다. 생소한 분야라서 공부를 하면서 분석을 해야 했습니다. 물론 전문적인 분석은 아니고 이해수준의 작업입니다. 아래는 작업과정의 기록입니니다.

우선 Rocky Linux 9.3를 설치한 후 Update를 하면 시점에 따라 두개의 커널버전을 설치합니다.

kernel-5.14.0-362.13.1.el9_3.x86_64
kernel-5.14.0-362.18.1.el9_3.x86_64

위 서버는 5.14.0-362.13.1.el9_3.x86_64이었습니다. 살펴보니까 /var/crash 디텍토리밑에 vmcore 파일이 있더군요. 갑자기 궁금해집니다. 어떻게 하면 vmcore파일을 생성할 수 있는지 알아보았습니다. 저는 아래의 사이트를 참조하였습니다.Redhat과 Oracle Linux의 자료입니다.

Chapter 7. Kernel crash dump guide
9.2 Using the crash Debugger

사실 위와 같은 작업을 할 필요는 없습니다. 최초 OS를 설치할 때 설치선택중 kdump와 관련한 부분이 있습니다.

2.
vmcore가 만들었졌다는 전제하에서 다음을 알아보도록 하겠습니다. 앞서 Redhat문서를 보면 crash, kernel-debuginfo를 설치하여야 합니다.

crash 패키지는 설치할 때 아무런 문제가 없습니다. 우선 debuginfo-install이라는 명령어가 생소합니다.

debuginfo-install is a program which installs the RPMs needed to debug the specified package. The package argument can be a wildcard, but will only match installed packages. debuginfo-install will then enable any debuginfo repositories, and install the relevant debuginfo rpm.

debuginfo-install:Utilities based around the yum package manager을 보면 설치방법을 OS별로 자세히 소개하고 있습니다. 또한 Debuginfo 설치와 관련하여 How can I download or install kernel debuginfo packages for RHEL systems? 에서도 자세한 정보를 얻을 수있습니다.

debuginfo-install 명령어를 이용하여 설치하려고 하지만 Kernel-debuginfo에서 오류가 발생하였습니다. kernel-5.14.0-362.13.1.el9_3.x86_64을 사용하는 Linux(Redhat, Almalinux, Rocky Linux 모두)가 제공하는 레포지토리에서 찾을 수 없었습니다.

그래서 facebook에 도움을 요청하니까 아래의 사이트를 소개하네요.

Open Source Projects at Oracle

Oracle Linux9이 RHEL 9과 같은 커널을 사용하므로 https://oss.oracle.com/ol9/debuginfo/ 에서 커널버전별 Debuginfo와 관련한 RPM 패키지를 구할 수 있었습니다. Oracle Linux가 권장하는 debuginfo 설치방법은 아래에 있습니다.

Installing the crash Packages

처음 debug와 debuginfo를 구별하지 못하였습니다. 그래서 kernel-debug를 아래와 같이 설치한 후 crash명령어를 실행하였지만 vmlinux를 찾을 수 없다고 나왔습니다.

Debug와 Debuginfo의 차이가 궁금해졌습니다. 구글링해도 마땅한 풀이가 없어서 Chatgpt에 물었습니다.

In Linux, both kernel-debug and kernel-debuginfo packages are related to debugging the Linux kernel, but they serve different purposes:

  1. kernel-debug Package:
    • The kernel-debug package typically contains the kernel binary with additional debugging symbols compiled into it.
    • These debugging symbols provide detailed information about functions, variables, and data structures within the kernel, aiding in debugging kernel-related issues.
    • The kernel-debug package is often used in development and testing environments where detailed debugging information is necessary to diagnose and fix kernel-related problems.
  2. kernel-debuginfo Package:
    • The kernel-debuginfo package, on the other hand, contains separate debugging symbols for the kernel binaries.
    • Unlike the kernel-debug package, which includes the debugging symbols directly in the kernel binary, the kernel-debuginfo package keeps the debugging symbols in separate files.
    • These separate debugging symbol files are useful for debugging kernel crashes or performance issues using tools like gdb (GNU Debugger) or perf.
    • The kernel-debuginfo package is commonly used in production environments where the kernel binary itself doesn’t include debugging symbols, but these symbols can be fetched from the corresponding kernel-debuginfo package when needed for troubleshooting.

In summary, while both kernel-debug and kernel-debuginfo packages provide debugging information for the Linux kernel, the former includes debugging symbols within the kernel binary itself, while the latter provides separate debugging symbol files that can be used with debugging tools as needed.

 

3.
이런저런 방식으로 debuginfo패키지를 설치한 후 crash 명령어를 실행하였습니다.

crash 명령어를 사용하기 위하여 가상환경을 만들어서 긴 시간을 투자했는데 결과가 허망합니다. p2m_top이 무엇과 연관되어 있는지 알아보니까.. 아래와 같은 내용이 있네요.

Additionally, during that work I realized that p2m_top (xen_p2m_addr in latest Linux kernel) and p2m_top_mfn differs. As I saw p2m_top represents all stuff (memory, missing, identity, etc.) found in PV guest address space. However, p2m_top_mfn is just limited to memory and missing things. Taking into account that p2m_top_mfn is used just
for migration and crash tool it looks that it is sufficient.
p2m stuff and crash tool중에서

또다른 글을 보면 p2m_top은 p2m.c 의 주석입니다.

Xen leaves the responsibility for maintaining p2m mappings to the guests themselves, but it must also access and update the p2m array during suspend/resume when all the pages are reallocated. The p2m table is logically a flat array, but we implement it as a three-level tree to allow the address space to be sparse.

이상을 좀더 상세히 정리한 부분은 X86 Paravirtualised Memory Management입니다.결론적으로 VM내부에서 발생한 일듯 합니다.

vmcore는 가상환경에서 만들어진 것이 아니라서 그런 건지 무언가 맞지 않는 듯 합니다. 가상환경이 아닌 환경을 구축해서 하면 다른 결과를 보여줄 듯 하지만 자원의 부족으로 가상환경의 시험에 만족합니다.

crash를 이용하여 커널패닉을 분석할 때 도움을 주는 사이트입니다.

What to do in case of a Linux kernel panic
Analyzing the Core Dump
Analyzing the Core Dump
커널 패닉,행업,크래쉬 kernel panic crash hangup 분석
The Linux Kernel As An Exquisitely Sensitive Stability Test For an overclocked system.

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.