KDump란 무엇인가?
본투비루트를 하면서 kdump라는게 있어서 알아보다가 정리한 글을 공유합니다.
Kdump는 Kernel 이 crash 발생했을 때, crash dump 정보를 캡처하는 데 사용하는 kernel의 기능이다.
커널 패닉 이벤트 시에 충돌 덤프를 생성하는 리눅스 커널의 한 부분이다.
kdump는 kexec를 바탕으로 한 ‘커널 크래쉬 덤핑 메카니즘’이다. 이는 커널 패닉이 발생했을 때 시스템의 메모리 상태를 vmcore(메모리이미지)라는 파일 형태로 생성하는 작업이다.
이는 디버깅 목적으로 분석 될 수 있고 충돌의 원인을 결정할 수 있는 메모리 이미지인 Vmcore를 생성하는것이다.
Kernel이 실행 중에 crash가 발생하게 되면 'kexec'가 실행되고 예약된 메모리에서 kdump 커널을 로드한 후
RAM 및 스왑 내용이 로컬 디스크의 vmcore파일에 복사되고 재부팅되게 됩니다.
kexec란?
커널 패닉 발생 시 BIOS를 거치지 않고 빠르게 Secondary kernel로 부팅시키는 역활을 한다.
kexec로 새로운 캡쳐 커널을 사용하는 이유는 기존에 패닉이 발생한 상태에서의 커널이 아니라 새로운 커널이기 때문에 덤프를 하는 부분에서 좀더 완전하게 덤프를 생성할 수 있기 때문입니다.
kdump가 필요한 이유
윈도우에 블루스크린이 있는것처럼 리눅스에도 커널패닉이라는 것이 존재합니다.
데스크탑같은 경우는 그냥 재부팅 해버리거나 포맷해버리면 그만이지만,
서버와 같은 경우는 장애가 발생했을 때 재부팅을 하는것도 리스크가 있는 작업이고,
장애가 발생했을 때 그 원인을 찾아내서 같은 장애가 나타나지 않도록 하는 것이 중요합니다.
그 원인을 찾을 수 있는 실마리를 제공하는 것이 vmcore 라는 코어 파일이며, 코어파일을 생성하는 것이 kdump라고 생각하면 됩니다.
kdump를 사용하는 궁극적인 이유는 OS 행이 걸린 원인을 분석하고 추적하여 같은 문제로 재발하는 것을 방지하기 위해서 사용합니다.서버가 계속해서 행이 걸린다면 서비스에 문제가 생길 것이고 기업의 입장에서는 돈으로 직결되는 문제이기 때문에 kdump 솔루션은 리눅스 없어서는 안될 기술이다.
vmcore 파일은 binary 형태로 vim이나 cat으로 열 수 없습니다.
Plain Text
복사
kdump와 kexec의 구동원리
kexec의 작동원리
kexec는 kdump의 핵심 기술입니다.
부트로더의 실행 없이 현재 실행 중인 커널로 부팅할 수 있는 것이 kexec의 능력이다.
kexec가 정확히 하는 역할은 시스템이 부팅시에 캡쳐 커널을 현재 커널에 정의 합니다.
메모리에 캡쳐 커널이 들어갈 곳을 예약한다고 보시면 됩니다.이 과정이 그림에서 kexec -l입니다.
그 다음 역할은 예약되어 있던 메모리에서 실제로 캡쳐커널을 부팅하는 역할입니다.
이 과정이 kexec -e 입니다. kexec -l 로 덤프커널이 메모리에 로드되었다면,
kexec -e 명령어로 언제든지 덤프커널로 부팅이 가능합니다.
Secondary Kernel의 이미지를 준비한적이 없다고 해도…!
기본적으로 "/boot" 디렉토리에 initamfs-*.kdump.img가 준비되어 있습니다. 커널 패닉이나 OS 행시 해당 부팅 이미지를 통해 로딩이 됩니다.
kdump의 작동원리
kdump는 시스템이 처음 부팅할때 시스템이 예약된 곳에 캡쳐커널이 로드됩니다.
여기서는 kexec -p 라는 명령어로 로드가 되게 됩니다.
kexec -p 는 커널 패닉을 위한 캡쳐 커널을 로드하는 옵션이라고 적혀있습니다.
아마도 kexec -l 이 그냥 캡쳐커널을 로드하는 작업이라면 kexec -p는 패닉이 발생시 자동으로 kexec -e 를 수행하여 바로 캡쳐 커널로 부팅이 되게 하는 명령어라고 생각하시면 될거 같습니다.
이렇게 kexec -e 로 캡쳐 커널이 부팅이 되면, kdump.conf에 설정되어 있는 값으로 kdump 프로세스가 진행이됩니다.
간단히 말해 kexec -p를 이용해서 커널 패닉시 자동으로 kexec -e(Secondary Kernel로 부팅)를 수행합니다.
kdump의 설정파일에 지정된 값들로 kdump가 진행이 되고 완료되면 멈추고 vmcore라는 파일을 생성합니다.
Kdump
설정파일을 기준으로 해서 kdump작업이 진행되는데 설정파일은 "/etc/kdump.conf” 입니다.
kdump.service fail Issue
OS를 처음 설치하고 나서 kdump가 Active 상태가 아닌 fail 상태로 떠 있는 경우입니다.
이의 경우는 자신의 서버의 Memory가 2G 이하인데 crashkernel의 값이 auto로 잡혀있기 때문
해결법
#vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=128M rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true"
Plain Text
복사
이렇게 바꿔주고
"grub2-mkconfig -o /boot/grub2/grub.cfg" 명령어를 입력후 서버를 재기동한다!
Plain Text
복사