blob: 3fb133fb35158cb6ac569a97008fb3616eb862ad [file] [log] [blame]
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05001#! /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
11KDUMP_KVER="`uname -r`"
12KDUMP_KIMAGE="/boot/bzImage-${KDUMP_KVER}"
13KDUMP_CMDLINE="`cat /proc/cmdline`"
14KDUMP_CMDLINE_APPEND="kdump_needed maxcpus=1 irqpoll reset_devices"
15KDUMP_VMCORE_PATH="/var/crash/`date +"%Y-%m-%d"`"
16
17#get right kernel image
18march="`uname -m`"
19case ${march} in
20 x86*|i?86)
21 ;;
22 *)
23 KDUMP_KIMAGE="/boot/uImage-${KDUMP_KVER}"
24 ;;
25esac
26
27KEXEC=usr/sbin/kexec
28KEXEC_ARGS="-p"
29
30MAKEDUMPFILE=/usr/bin/makedumpfile
31MAKEDUMPFILE_ARGS="-E -d 1"
32
33LOGGER="logger -p info -t kdump"
34
35if [ -f /etc/sysconfig/kdump.conf ]; then
36 . /etc/sysconfig/kdump.conf
37fi
38
39do_check()
40{
41 #check makedumpfile
42 if [ ! -e ${MAKEDUMPFILE} -o ! -x ${MAKEDUMPFILE} ] ;then
43 echo "No makedumpfile found."
44 return 1;
45 fi
46
47 #check kexec
48 if [ ! -e ${KEXEC} -o ! -x ${KEXEC} ] ;then
49 echo "No kexec found."
50 return 1;
51 fi
52
53 #check whether kdump kernel image exists on the system
54 if [ ! -f ${KDUMP_KIMAGE} ]; then
55 echo "No kdump kernel image found."
56 return 1
57 fi
58}
59
60do_save_vmcore()
61{
62 mkdir -p ${KDUMP_VMCORE_PATH}
63 echo "Saving a vmcore to ${KDUMP_VMCORE_PATH}."
64
65 ${MAKEDUMPFILE} ${MAKEDUMPFILE_ARGS} /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`"
66# cp --sparse=always /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`"
67 rc=$?
68 if [ ${rc} == 0 ]; then
69 ${LOGGER} "Saved a vmcore to ${KDUMP_VMCORE_PATH}."
70 else
71 ${LOGGER} "Failed to save vmcore!"
72 fi
73 return ${rc}
74}
75
76do_start()
77{
78 #check file
79 do_check
80
81 #check whether the running kernel supports kdump.
82 if [ ! -e /sys/kernel/kexec_crash_loaded ]; then
83 echo "Kdump isn't supported on the running kernel!!!"
84 ${LOGGER} "Kdump isn't supported on the running kernel!!!"
85 return 1
86 fi
87
88 #check whether kdump kernel image has been loaded
89 rc=`cat /sys/kernel/kexec_crash_loaded`
90 if [ ${rc} != 0 ]; then
91 echo "Kdump is already running.";
92 ${LOGGER} "Kdump is already running."
93 return 0
94 fi
95
96 #check the running kernel cmdline option,insure "crashkenrel=" always set.
97 grep -q crashkernel= /proc/cmdline
98 if [ $? != 0 ]; then
99 echo "Kdump isn't supported on the running kernel,please check boot option!!!"
100 ${LOGGER} "Kdump isn't supported on the running kernel,please check boot option!!!"
101 return 1
102 fi
103
104 #handle kdump cmdline parameters, remove some useless options
105 kcmdline=""
106 for x in `cat /proc/cmdline`; do
107 case $x in
108 crashkernel*)
109 ;;
110 *)
111 kcmdline="${kcmdline} $x"
112 ;;
113 esac
114 done
115
116 KDUMP_CMDLINE="${kcmdline} ${KDUMP_CMDLINE_APPEND}"
117
118 #Load the kdump kernel image
119 ${KEXEC} ${KEXEC_ARGS} "${KDUMP_KIMAGE}" --append="${KDUMP_CMDLINE}"
120 if [ $? != 0 ]; then
121 echo "Failed to load kdump kernel!"
122 ${LOGGER} "Failed to load kdump kernel!"
123 return 1
124 fi
125
126 echo "Kdump started up."
127 ${LOGGER} "Kdump started up."
128}
129
130do_stop()
131{
132 ${KEXEC} -p -u 2>/dev/null
133 if [ $? == 0 ]; then
134 echo "Kdump has been stopped."
135 ${LOGGER} "Kdump has been stopped."
136 else
137 echo "Failed to stop kdump!"
138 ${LOGGER} "Failed to stop kdump!"
139 fi
140}
141
142case "$1" in
143 start)
144 if [ -s /proc/vmcore ]; then
145 do_save_vmcore
146 reboot
147 else
148 do_start
149 fi
150 ;;
151 restart)
152 do_stop
153 do_start
154 ;;
155 stop)
156 do_stop
157 ;;
158 *)
159 echo $"Usage: $0 {start|stop|restart}"
160 exit 1
161esac
162
163exit $?