kdump란?
kexec가 베이스가 되기 때문에 kexec를 먼저 알아보고 kdump를 설명하려고 합니다.
kexec는 커널 패닉 발생시 BIOS를 거치지 않고 빠르게 Secondary Kernel로 부팅시키는 역할을 합니다.
kdump(The kexec-based Crash Dumping Solution)는 커널 패닉(OS 행)이 발생한 당시에 시스템의 메모리 상태를 vmcore 파일로 생성하는 작업을 해줍니다.
vmcore 파일은 binary 형태로 vim이나 cat으로 열 수 없습니다.
kdump를 사용하는 궁극적인 이유는 OS 행이 걸린 원인을 분석하고 추적하여 같은 문제로 재발하는 것을 방지하기 위해서 사용합니다. 서버가 계속해서 행이 걸린다면 서비스에 문제가 생길 것이고 기업의 입장에서는 돈으로 직결되는 문제이기 때문에 kdump 솔루션은 리눅스에 없어서는 안될 기술입니다.
kexec 및 kdump 과정
먼저 문제의 커널에서 kexec -l가 시스템 부팅시에 메모리에 Secondary Kernel이 들어갈 공간을 예약합니다.
kexec -l의 작업이 완료되었다면 kexec -e로 Secondary Kernel로 부팅을 합니다.
※ 저는 Secondary Kernel의 이미지를 준비한적이 없는데요?
기본적으로 "/boot" 디렉토리에 initamfs-*.kdump.img가 준비되어 있습니다. 커널 패닉이나 OS 행시 해당 부팅 이미지를 통해 로딩이 됩니다.
앞의 과정은 kexec의 동작 과정이였습니다.
kdump의 과정은 아래와 같습니다.
kexec -p를 이용해서 커널 패닉시 자동으로 kexec -e(Secondary Kernel로 부팅)를 수행합니다.
kdump의 설정파일에 지정된 값들로 kdump가 진행이 되고 완료되면 멈추고 vmcore라는 파일을 생성합니다.
kdump 설정 파일
kdump의 설정 파일을 기준으로 해서 kdump 작업이 진행됩니다. 설정 파일은 "/etc/kdump.conf"입니다.
기본 설정은 다 주석이 되어있는 상태이고 아래의 두개만 활성 상태입니다.
# grep -v "#" /etc/kdump.conf
path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31
vmcore가 생성될 디렉토리는 "/var/crash"이고 캡쳐된 데이터를 압축하고 캡쳐된 코어 파일에서 불필요한 정보를 필터링합니다.
FULL DUMP를 할 경우에는 필요없는 정보들까지 너무 많이 들어와서 -d 31을 이용해서 가장 적은 양의 덤프를 떠오게 합니다. (RHEL 기본값 기준)
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"
위와 같이 바꿔주고 "grub2-mkconfig -o /boot/grub2/grub.cfg" 명령어를 입력후 서버를 재기동 해줍니다.
'Linux > Linux' 카테고리의 다른 글
Linux) 리눅스의 Log에 대한 이야기(1) - Log (0) | 2021.05.01 |
---|---|
Linux) Kdump 활용해서 원인 분석하기(2) (0) | 2021.05.01 |
Linux) 리눅스 부팅 과정 (0) | 2021.04.27 |
Linux) Disk Rescan 스크립트 (RHEL 7.X 기본 제공) (0) | 2021.04.26 |
Linux) Online 상태에서 스토리지 추가 (0) | 2021.04.26 |