(From OE-Core rev: 0027c8078fc3d98c7ecaab03d4e637b1fa07778e) (From OE-Core rev: a0d5816ba410e393fa03f5644008625944c1d719) Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2.9 KiB
Executable File
#! /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 $?