#! /bin/sh # # kdump # # Description: The kdump script provides the support: # 1. Load a kdump kernel image into memory; # 2. Copy away vmcore when system panic. # #default KEXEC=/usr/sbin/kexec KEXEC_ARGS="-p" MAKEDUMPFILE=/usr/bin/makedumpfile MAKEDUMPFILE_ARGS="-E -d 1" LOGGER="logger -p info -t kdump" if [ -f /etc/sysconfig/kdump.conf ]; then . /etc/sysconfig/kdump.conf else echo "no /etc/sysconfig/kdump.conf" exit 1; fi do_check() { #check makedumpfile if [ ! -e ${MAKEDUMPFILE} -o ! -x ${MAKEDUMPFILE} ] ;then echo "No makedumpfile found." exit 0 fi #check kexec if [ ! -e ${KEXEC} -o ! -x ${KEXEC} ] ;then echo "No kexec found." exit 0 fi #check whether kdump kernel image exists on the system if [ -z "${KDUMP_KIMAGE}" -o ! -f "${KDUMP_KIMAGE}" ]; then echo "No kdump kernel image found." exit 0 fi if [ "${KDUMP_CMDLINE}"x = "x" ] ; then echo "KDUMP_CMDLINE is not configured" exit 0 fi } do_save_vmcore() { if [ ${KDUMP_VMCORE_PATH}x = x ]; then KDUMP_VMCORE_PATH="/var/crash/`date +"%Y-%m-%d"`" fi mkdir -p ${KDUMP_VMCORE_PATH} echo "Saving a vmcore to ${KDUMP_VMCORE_PATH}." ${MAKEDUMPFILE} ${MAKEDUMPFILE_ARGS} /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" # cp --sparse=always /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" rc=$? if [ ${rc} == 0 ]; then ${LOGGER} "Saved a vmcore to ${KDUMP_VMCORE_PATH}." else ${LOGGER} "Failed to save vmcore!" fi return ${rc} } do_start() { #check file do_check #check whether the running kernel supports kdump. if [ ! -e /sys/kernel/kexec_crash_loaded ]; then echo "Kdump isn't supported on the running kernel!!!" ${LOGGER} "Kdump isn't supported on the running kernel!!!" return 1 fi #check whether kdump kernel image has been loaded rc=`cat /sys/kernel/kexec_crash_loaded` if [ ${rc} != 0 ]; then echo "Kdump is already running."; ${LOGGER} "Kdump is already running." return 0 fi #check the running kernel cmdline option,insure "crashkernel=" always set. grep -q crashkernel= /proc/cmdline if [ $? != 0 ]; then echo "Kdump isn't supported on the running kernel,please check boot option!!!" ${LOGGER} "Kdump isn't supported on the running kernel,please check boot option!!!" return 1 fi #Load the kdump kernel image ${KEXEC} ${KEXEC_ARGS} "${KDUMP_KIMAGE}" --append="${KDUMP_CMDLINE}" if [ $? != 0 ]; then echo "Failed to load kdump kernel!" ${LOGGER} "Failed to load kdump kernel!" return 1 fi echo "Kdump started up." ${LOGGER} "Kdump started up." } do_stop() { ${KEXEC} -p -u 2>/dev/null if [ $? == 0 ]; then echo "Kdump has been stopped." ${LOGGER} "Kdump has been stopped." else echo "Failed to stop kdump!" ${LOGGER} "Failed to stop kdump!" fi } case "$1" in start) if [ -s /proc/vmcore ]; then do_save_vmcore reboot else do_start fi ;; restart) do_stop do_start ;; stop) do_stop ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac exit $?