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를 설치하여야 합니다.
1 |
yum install crash</code> <code class="literal command">debuginfo-install kernel |
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 설치방법은 아래에 있습니다.
처음 debug와 debuginfo를 구별하지 못하였습니다. 그래서 kernel-debug를 아래와 같이 설치한 후 crash명령어를 실행하였지만 vmlinux를 찾을 수 없다고 나왔습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
[root@localhost debug]# dnf install kernel-debug-$(uname -r) 마지막 메타자료 만료확인(0:36:01 이전): 2024년 02월 08일 (목) 오전 11시 05분 50초. 종속성이 해결되었습니다. =================================================================================================================================================================================================================== 꾸러미 구조 버전 저장소 크기 =================================================================================================================================================================================================================== 설치 중: kernel-debug x86_64 5.14.0-362.13.1.el9_3 baseos 5.0 M 종속 꾸러미 설치 중: kernel-debug-core x86_64 5.14.0-362.13.1.el9_3 baseos 32 M kernel-debug-modules x86_64 5.14.0-362.13.1.el9_3 baseos 62 M kernel-debug-modules-core x86_64 5.14.0-362.13.1.el9_3 baseos 48 M 연결 요약 =================================================================================================================================================================================================================== 설치 4 꾸러미 전체 내려받기 크기: 147 M 설치된 크기 : 188 M 진행할까요? [y/N]: y 꾸러미 내려받기 중: (1/4): kernel-debug-5.14.0-362.13.1.el9_3.x86_64.rpm 19 MB/s | 5.0 MB 00:00 (2/4): kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64.rpm 17 MB/s | 32 MB 00:01 (3/4): kernel-debug-modules-core-5.14.0-362.13.1.el9_3.x86_64.rpm 17 MB/s | 48 MB 00:02 (4/4): kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64.rpm 16 MB/s | 62 MB 00:03 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 합계 33 MB/s | 147 MB 00:04 연결 확인 실행 중 연결 확인에 성공했습니다. 연결 시험 실행 중 연결 시험에 성공했습니다. 연결 실행 중 준비 중 : 1/1 설치 중 : kernel-debug-modules-core-5.14.0-362.13.1.el9_3.x86_64 1/4 설치 중 : kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64 2/4 구현 중 : kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64 2/4 설치 중 : kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64 3/4 구현 중 : kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64 3/4 설치 중 : kernel-debug-5.14.0-362.13.1.el9_3.x86_64 4/4 구현 중 : kernel-debug-modules-core-5.14.0-362.13.1.el9_3.x86_64 4/4 구현 중 : kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64 4/4 구현 중 : kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64 4/4 구현 중 : kernel-debug-5.14.0-362.13.1.el9_3.x86_64 4/4 확인 중 : kernel-debug-5.14.0-362.13.1.el9_3.x86_64 1/4 확인 중 : kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64 2/4 확인 중 : kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64 3/4 확인 중 : kernel-debug-modules-core-5.14.0-362.13.1.el9_3.x86_64 4/4 설치되었습니다: kernel-debug-5.14.0-362.13.1.el9_3.x86_64 kernel-debug-core-5.14.0-362.13.1.el9_3.x86_64 kernel-debug-modules-5.14.0-362.13.1.el9_3.x86_64 kernel-debug-modules-core-5.14.0-362.13.1.el9_3.x86_64 완료되었습니다! [root@localhost debug]# ls |
Debug와 Debuginfo의 차이가 궁금해졌습니다. 구글링해도 마땅한 풀이가 없어서 Chatgpt에 물었습니다.
3.
이런저런 방식으로 debuginfo패키지를 설치한 후 crash 명령어를 실행하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[root@localhost crash]# crash /usr/lib/debug/lib/modules/5.14.0-362.13.0.1.el9_3.x86_64/vmlinux /var/crash/vmcore crash 8.0.4-1.0.1.el9 Copyright (C) 2002-2022 Red Hat, Inc. Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation Copyright (C) 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K. Copyright (C) 2005, 2011, 2020-2022 NEC Corporation Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc. Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. Copyright (C) 2015, 2021 VMware, Inc. This program is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Enter "help copying" to see the conditions. This program has absolutely no warranty. Enter "help warranty" for details. GNU gdb (GDB) 10.2 Copyright (C) 2021 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... crash: cannot resolve "p2m_top" |
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.