1#! /bin/sh 2# 3# kdump 4# 5# Description: The kdump script provides the support: 6# 1. Load a kdump kernel image into memory; 7# 2. Copy away vmcore when system panic. 8# 9 10#default 11KEXEC=/usr/sbin/kexec 12KEXEC_ARGS="-p" 13 14MAKEDUMPFILE=/usr/bin/makedumpfile 15MAKEDUMPFILE_ARGS="-E -d 1" 16 17LOGGER="logger -p info -t kdump" 18 19if [ -f /etc/sysconfig/kdump.conf ]; then 20 . /etc/sysconfig/kdump.conf 21else 22 echo "no /etc/sysconfig/kdump.conf" 23 exit 1; 24fi 25 26do_check() 27{ 28 #check makedumpfile 29 if [ ! -e ${MAKEDUMPFILE} -o ! -x ${MAKEDUMPFILE} ] ;then 30 echo "No makedumpfile found." 31 exit 0 32 fi 33 34 #check kexec 35 if [ ! -e ${KEXEC} -o ! -x ${KEXEC} ] ;then 36 echo "No kexec found." 37 exit 0 38 fi 39 40 #check whether kdump kernel image exists on the system 41 if [ -z "${KDUMP_KIMAGE}" -o ! -f "${KDUMP_KIMAGE}" ]; then 42 echo "No kdump kernel image found." 43 exit 0 44 fi 45 46 if [ "${KDUMP_CMDLINE}"x = "x" ] ; then 47 echo "KDUMP_CMDLINE is not configured" 48 exit 0 49 fi 50} 51 52do_save_vmcore() 53{ 54 if [ ${KDUMP_VMCORE_PATH}x = x ]; then 55 KDUMP_VMCORE_PATH="/var/crash/`date +"%Y-%m-%d"`" 56 fi 57 58 mkdir -p ${KDUMP_VMCORE_PATH} 59 echo "Saving a vmcore to ${KDUMP_VMCORE_PATH}." 60 61 ${MAKEDUMPFILE} ${MAKEDUMPFILE_ARGS} /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" 62# cp --sparse=always /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" 63 rc=$? 64 if [ ${rc} == 0 ]; then 65 ${LOGGER} "Saved a vmcore to ${KDUMP_VMCORE_PATH}." 66 else 67 ${LOGGER} "Failed to save vmcore!" 68 fi 69 return ${rc} 70} 71 72do_start() 73{ 74 #check file 75 do_check 76 77 #check whether the running kernel supports kdump. 78 if [ ! -e /sys/kernel/kexec_crash_loaded ]; then 79 echo "Kdump isn't supported on the running kernel!!!" 80 ${LOGGER} "Kdump isn't supported on the running kernel!!!" 81 return 1 82 fi 83 84 #check whether kdump kernel image has been loaded 85 rc=`cat /sys/kernel/kexec_crash_loaded` 86 if [ ${rc} != 0 ]; then 87 echo "Kdump is already running."; 88 ${LOGGER} "Kdump is already running." 89 return 0 90 fi 91 92 #check the running kernel cmdline option,insure "crashkernel=" always set. 93 grep -q crashkernel= /proc/cmdline 94 if [ $? != 0 ]; then 95 echo "Kdump isn't supported on the running kernel,please check boot option!!!" 96 ${LOGGER} "Kdump isn't supported on the running kernel,please check boot option!!!" 97 return 1 98 fi 99 100 #Load the kdump kernel image 101 ${KEXEC} ${KEXEC_ARGS} "${KDUMP_KIMAGE}" --append="${KDUMP_CMDLINE}" 102 if [ $? != 0 ]; then 103 echo "Failed to load kdump kernel!" 104 ${LOGGER} "Failed to load kdump kernel!" 105 return 1 106 fi 107 108 echo "Kdump started up." 109 ${LOGGER} "Kdump started up." 110} 111 112do_stop() 113{ 114 ${KEXEC} -p -u 2>/dev/null 115 if [ $? == 0 ]; then 116 echo "Kdump has been stopped." 117 ${LOGGER} "Kdump has been stopped." 118 else 119 echo "Failed to stop kdump!" 120 ${LOGGER} "Failed to stop kdump!" 121 fi 122} 123 124case "$1" in 125 start) 126 if [ -s /proc/vmcore ]; then 127 do_save_vmcore 128 reboot 129 else 130 do_start 131 fi 132 ;; 133 restart) 134 do_stop 135 do_start 136 ;; 137 stop) 138 do_stop 139 ;; 140 *) 141 echo $"Usage: $0 {start|stop|restart}" 142 exit 1 143esac 144 145exit $? 146