Kernel kdump install
posted on 02 Jun 2020 under category note
아래 커맨드를 사용하여 kexec-tools를 설치합니다.
$ sudo yum install kexec-tools
/etc/default/grub 파일에 ‘crashkernel=<RAM 예약 사이즈>’를 GRUB_CMDLINE_LINUX 값에 아래와 같이 추가합니다. 아래와 같이 다른 값은 수정하지 말고 crashkernel=128M 만 추가합니다.
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=128M vconsole.keymap=us rhgb quiet"
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
위 설정을 모드 마친 후 재부팅합니다.( 콘솔창에서 권장)
Crash 덤프 또는 vmcore 파일을 저장하려면 ‘/etc/kdump.conf’를 수정해야 합니다. 아래 같이 설정하면 덤프 파일은 /var/crash 위치에 저장하는데 이때 /var/crash 파일 시스템의 여유공간이 RAM 사이즈보다 크거나 같아야 합니다. 그리고 ‘core_collector’옵션을 사용해서 dump정보를 압축하는 명령어입니다. 마지막 라인은 dump 정보를 지정된 위치에 저장하지 못하는 경우 default 가 수행되는데 이 경우는 재부팅입니다.
$ sudo vi /etc/kdump.conf
path /var/crash
core_collector makedumpfile -c
default reboot
$ sudo systemctl start kdump.service
$ sudo systemctl enable kdump.service
Crash 하기 전에 아래 명령어를 사용해서 kdump service가 정상 실행 중인지 확인합니다.
$ sudo systemctl is-active kdump.service
$ sudo service kdump status
수동으로 crash 발생시켜서 kdump를 테스트합니다.
# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger
그럼 /var/crash 위치에 dump file (vmcore)이 생성됩니다.
$ ls -la /var/crash
drwxr-xr-x. 2 root root 42 Dec 4 17:42 127.0.0.1-2019-12-28-17:42:53
/var/crash/127.0.0.1-2019-12-28-17:42:53:
total 135924
-rw-------. 1 root root 139147524 Dec 28 17:42 vmcore
-rw-r--r--. 1 root root 112470 Dec 28 17:42 vmcore-dmesg.txt
[root@cloud ~]#
crash 명령어는 crash dump 또는 vmcore 파일을 분석하는 데 사용되는 명령어입니다.
$ sudo yum install crash
$ sudo debuginfo-install kernel
crash 명령어를 사용해서 crash가 발생했을 때 정보를 확인할 수 있습니다.
$ crash /var/crash/127.0.0.1-2020-05-07-13\:45\:58/vmcore /usr/lib/debug/lib/modules/4.14.165-131.185.amzn2.x86_64/vmlinux
crash 커맨드 라인 창이 뜨면 아래 명령어 들로 정보를 확인할 수 있습니다. 명령 수행 시 아래와 같은 형태로 실행됩니다.
[root@ip-10-0-1-68 crash]# crash /var/crash/127.0.0.1-2020-05-07-13\:45\:58/vmcore /usr/lib/debug/lib/modules/4.14.165-131.185.amzn2.x86_64/vmlinux
crash 7.2.8-1.amzn2.0.1
Copyright (C) 2002-2020 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 NEC Corporation
Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, 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) 7.6
Copyright (C) 2013 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-unknown-linux-gnu"...
KERNEL: /usr/lib/debug/lib/modules/4.14.165-131.185.amzn2.x86_64/vmlinux
DUMPFILE: /var/crash/127.0.0.1-2020-05-07-13:45:58/vmcore
CPUS: 2
DATE: Thu May 7 13:45:55 2020
UPTIME: 00:27:23
LOAD AVERAGE: 0.00, 0.06, 0.05
TASKS: 118
NODENAME: ip-10-0-1-68.ap-northeast-2.compute.internal
RELEASE: 4.14.165-131.185.amzn2.x86_64
VERSION: #1 SMP Wed Jan 15 14:19:56 UTC 2020
MACHINE: x86_64 (2199 Mhz)
MEMORY: 1 GB
PANIC: "sysrq: SysRq : Trigger a crash"
PID: 2979
COMMAND: "bash"
TASK: ffff888038edcc00 [THREAD_INFO: ffff888038edcc00]
CPU: 0
STATE: TASK_RUNNING (SYSRQ)
crash>
커멘트창에서 실행할 수 있는 명령어
sys - 시스템의 일반적인 정보를 출력해 준다.
bt - Backtrace 명령. 스택의 내용들을 순차적으로 출력해준다.
ps - Process list 출력.
free - Memory 및 스왑 상태 출력.
mount - 마운트 상태 출력
irq - 각 장치의 ( irq ) 상태를 출력.
kmem - 메모리 상태 출력 ( kmalloc, valloc 등 메모리 할당 상태도 보여줌 )
log - dmesg 의 내용을 출력.
mod - 로딩된 모듈 리스트 출력.
net - Network 상태 출력.
runq - 실행중인 task 리스트 출력.
task - 작업목록 출력.
rd - 메모리 번지수에 대한 상세정보 출력.
foreach - 모든 task, process 등 디버깅 정보에 대한 상세한 출력이 가능함.
set - 설정된 주소 및 PID 등을 기본 컨텍스트로 설정.
struct - 구조화된 메모리 내부의 변수들을 출력해 준다.
files - task 가 열고있는 파일디스크립터들을 출력해준다.
업데이트 예정