Kdump
: advanced crash dumping mechanism.
1. Kdump란?
- kdump는 kexec를 바탕으로 한 "커널 크래쉬 덤핑 메카니즘" 이다. 이는 커널 패닉(Kernel Panic)이 발생 하였을때, 시스템의 메모리 상태를 vmcore라는 파일 형태로 생성하는 역할을 하는 프로세스.
- /etc/kdump.conf 파일을 가지고 있으며, 서버의 panic 상황을 지켜는 보는 역할을 한다.
2. 그렇다면 kexec는 무엇인가?
- kexec는 kdump의 핵심이다. kexec는 커널 패닉이 발생하였을 때, BIOS를 거치지 않고 빠르게 새로운 커널로 부팅시키는 역할을 하는 프로세스이다. kdump가 동작하게 하는 프로세스이며, kexec로 새로운 캡쳐 커널을 사용하는 이유는 기존에 패닉이 발생한 상태에서의 커널이 아니라 새로운 커널이기 때문에 덤프를 하는 부분에서 좀더 완전하게 덤프를 생성 할 수 있기 때문이다.
- kexec는 부팅시에 메모리 커널을 정지 시키고 debug용 커널로 동작시키는 역할을 한다.
3. kdump가 필요한 이유는?
- 윈도우에 블루스크린이 있는 것처럼 리눅스에도 커널패닉이라는 것이 존재한다. 우리가 평소에 사용하는 랩탑이나 데스크탑 같은 경우, 블루스크린이 발생하면 재부팅 또는포맷을 하면 블루 스크린 문제가 해결된다. 하지만, 서버(Sever)와 같은 경우는 장애가 발생했을 때 재부팅을 하는 것도 리스트가 있는 작업이고, 장애가 발생했을 때 그 원인을 찾아내서 동일한 증상의 장애가 나타나지 않도록 원인을 찾아 조치하는 것이 매우 중요하다. 그 원인을 찾을 수 있는 단서를 제공하는 것이 vmcore 라는 코어 파일이며, 코어파일은 kdump가 생성하며, kdump의 핵심이라고 생각하면 된다.
4. kdump Operation Flow
: dump 생성 동작 단계
1 system panic
2 kdump kernel로 Booting
3 kdump initramsf Loading 및 Init
4 /etc/kdump.conf에 덤프 타켓이 설정되어 있는지 확인
5 /etc/kdump.conf 설정에 따라 dump capture
6 /etc/kdump.conf 설정 중 default_action=halt일 경우
7 /etc/kdump.conf 설정 중 default_action=reboot일 경우
8 root filesystem을 mount, pivot_root(change root file system), /sbin/init 진행
9 kdump 서비스 시작
10 capture core는 CP /proc/vmcore /var/crash/<host-addr><date>/vmcore로 생성
(core파일은 Local 저장할 수 도 있지만, 원격지에 있는 로그서버나, 스토리지에 송신할 수 있
11 reboot
12 shell drop
13 system halted.
5. kdump Install and Configuration
Step1 Install Package
: kexec-tools PKG 설치 진행
# yum install kexec-tools
Step2 Update the GRUB2 file to Reserve Memory for Kdump Kernel
: Kdump kernel이 Load될 메모리 공간 확보(예약)를 위해서 GRUB2 file에 추가
# vi /etc/default/grub
# GRUB_CMDLINE)_LINUX변수 부분에 "crashkernel=128M" 추가 설정
crashkernel 권장용량은 128M이며, 메모리가 1TB 증가시, 64M 추가 필요로 권장하고 있다.
RHEL 6.x 버전 이상부터는 auto로 설정해놓으면 OS에서 알아서 계산해준다.
# grub2-mkconfig -o /booting/grub2/grub.cfg
grub2 설정 적용
# shutdown -r now
Rebooting하게 되면 메모리영역에 Kdump kernel이 Loading될 공간이 할당된다.
Step3 Update the. dump location & default action in the file(/etc/kdump.conf)
: kdump 설정 파일 수정
# vi /etc/kdump.conf
# path /var/crash
dump 파일이 저장되는 위치 설정
# kump_pre <binary or script>
dump 생성 프로세스 이전에 사용자가 지정한 실행 파일이나 스크립트 실행
# touch /root/kdump_pre.sh
# chmod 4744 /root/kdump_pre.sh
해당하는 부분을 설정하면 꼭! 설정한 Directory에 .sh 파일을 생성해야함
나는 kump_pre /root/kdump_pre.sh로 설정했기 때문에 root 디렉토리에 생성하고 권한 4700번으로 꼭 변경해줘야함
Step4 Kdump.service ENABLE and START
: kdump 서비스 활성화 및 실행
# systemctl enable kdump
# systemctl start kdump
# systemctl status kdump
grub2 Kernel Memory Reserve 및 kdump-pre.sh 설정 관련 부분에서 해당하는 부분이 없으면 실행 에러 발생함
Step5 Now Test Kdump by manually crashing the system
: 강제로 System을 Crashing(Panic)을 발생하게 하여 Kdump 테스트를 진행
# echo c > /proc/sysrq-trigger
crash dump파일은 정의한 디스크에 /var/crash/ 디렉토리에 생성됨
# Linux Single Mode로 진입
Single Mode로 진입하기 때문에 Console에서 진행해야한다.
# ls -al /var/crash/
자동 재부팅(Panic이 걸린 Kernel이 아닌 새로운 Kdump Kernel) 후 vmcore 파일 확인, 파일 위치는 /etc/kdump.conf에 설정한 path에 생성됨
Step6 Use ‘crash’ command to analyze and debug crash dumps
: CMD 'crash'를 이용해서 생성된 vmcore를 분석하고 디버깅
# yum install -y crash
crash 명령어를 이용하기 위해 PKG 설치 진행
# yum install -y kernel-debuginfo
# wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-3.10.0-957.el7.x86_64.rpm
# wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-3.10.0-957.el7.x86_64.rpm
vmcore파일을 디버깅하기 위해서 필요한 Tool로써, OS kernel version에 맞춰서 설치 진행을 하면됨
나는 Centos#7 3.10.0-957.el7.x86_64을 사용하고 있어서 Google에서 검색해서 다운로드 함
# rpm -Uvh kernel-debuginfo-common-x86_64-3.10.0-957.el7.x86_64.rpm
kernel-debuginfo dependency 때문에 설치 필요
# rpm -Uvh kernel-debuginfo-3.10.0-957.el7.x86_64.rpm
# crash /var/crash/127.0.0.1-2019-03-20-20\:13\:18/vmcore /usr/lib/debug/lib/modules/3.10.0-957.el7.x86_64/vmlinux
crash디렉토리 아래에 있는 127.0.0.1 디렉토리는 사용자마다 다름
crash를 통한 vmcore 분석 이미지
'Linux' 카테고리의 다른 글
심볼릭 링크(Symbolic Link) (0) | 2019.03.21 |
---|---|
[CentOS#7.x]RPM Repository 저장소 구축 (0) | 2019.03.20 |
Local Repo 생성 및 설정 (0) | 2019.03.20 |