Package: kdump-tools Version: 1.3.7-2 Starting from 2.6.24 kernel provides vmcoreinfo right in vmcore, so makedumpfile can produce filtered dumps without vmlinux or slecial vmcoreinfo.
attached patch drops DEBUG_KERNEL from scripts, configs and documentation. Also it adds to kdump-config automatical extracting kernel log buffer (dmesg) from vmcore, so kdump produce two files in /var/crash dump.XXX and dmesg.XXX with human-readable log from crashed kernel.
diff -urN makedumpfile-1.3.7.orig/debian/kdump-config makedumpfile-1.3.7/debian/kdump-config --- makedumpfile-1.3.7.orig/debian/kdump-config 2011-08-22 15:19:01.040953008 +0400 +++ makedumpfile-1.3.7/debian/kdump-config 2011-08-22 16:10:28.039050663 +0400 @@ -44,6 +44,7 @@ # Set up defaults KDUMP_SYSCTL=${KDUMP_SYSCTL:="kernel.panic_on_oops=1"} KDUMP_COREDIR=${KDUMP_COREDIR:=/var/crash} +MAKEDUMP_ARGS=${MAKEDUMP_ARGS:="-c -d 31"} KDUMP_CMDLINE_APPEND=${KDUMP_CMDLINE_APPEND:="irqpoll maxcpus=1 nousb"} [ -d $KDUMP_COREDIR ] || mkdir -p $KDUMP_COREDIR ; @@ -52,9 +53,6 @@ # Constants vmcore_file=/proc/vmcore sys_kexec_crash=/sys/kernel/kexec_crash_loaded -kernel_link=$KDUMP_COREDIR/kernel_link -systemmap_link=$KDUMP_COREDIR/system.map_link -kconfig_link=$KDUMP_COREDIR/config_link kexec_cmd_file=$KDUMP_COREDIR/kexec_cmd # Utility Functions @@ -90,9 +88,6 @@ echo "current state: Not ready to kdump"; fi echo - echo "kernel link: " - echo " "`readlink -n -s $kernel_link` - echo echo "kexec command:" echo -n " " if [ -e $kexec_cmd_file ] ; then @@ -113,8 +108,6 @@ echo " $KDUMP_KERNEL" echo "kdump initrd: " echo " $KDUMP_INITRD" - echo "debug kernel: " - echo " $DEBUG_KERNEL" echo "kexec command to be used:" echo " $KEXEC_CMD" } @@ -161,75 +154,6 @@ fi } -# We need to find debug kernel for makedumpfile file to use when -# processing the vmcore file. This will -# A) speed up the vmcore copy and -# B) make it much smaller (see A). -# When the kdump kernel boots, we have no idea what kernel just -# dumped, so we should determine this info whenever a normal (non-kdump) -# kernel boots. -# -# Use the following priorites in determining the debug kernel: -# 1. An explicit Debug kernel in the defaults file overrides all -# 2. Look for an installed debug kernel matching the current `uname -r` -# 3. Give up. Note, that a debug kernel is optional. -# -# Returns: 0/1 (success/fail) -# Sets: MAKEDUMP_CONFIG, DEBUG_KERNEL, DEBUG_CONFIG, DEBUG_MAP -function locate_debug_kernel() -{ - MAKEDUMP_CONFIG=$KDUMP_COREDIR/makedump-config-$KVER - - # 1: Is there an Explicit DEBUG_KERNEL in the defaults file? - if [ -n "$DEBUG_KERNEL" ] ; then - if [ ! -e "$DEBUG_KERNEL" ] ; then - log_failure_msg "$KDUMP_DEFAULTS: DEBUG_KERNEL " \ - "does not exist: $DEBUG_KERNEL" - logger -t $NAME "$KDUMP_DEFAULTS: DEBUG_KERNEL " \ - "does not exist: $DEBUG_KERNEL" - return 1; - fi - - # 2: Look for an installed debug kernel - elif [ -e /usr/lib/debug/boot/vmlinux-$KVER ] ; then - DEBUG_KERNEL=/usr/lib/debug/boot/vmlinux-$KVER - DEBUG_CONFIG=/boot/config-$KVER - DEBUG_MAP=/boot/System.map-$KVER - elif [ -e /usr/lib/debug/vmlinux-$KVER ] ; then - DEBUG_KERNEL=/usr/lib/debug/vmlinux-$KVER - DEBUG_CONFIG=/usr/lib/debug/config-$KVER - DEBUG_MAP=/usr/lib/debug/System.map-$KVER - - # FIXME: Look for a vmcoreinfo file - - # 3: give up :) - else - echo "Could not find an installed debug vmlinux image and" - echo "DEBUG_KERNEL is not specified in $KDUMP_DEFAULTS" - log_warning_msg "makedumpfile may be limited to -d 1" - return 1; - fi - - if [ $DRY_RUN ] ; then return 0; fi - - # Okay, now we know the name of the debug kernel and it exists... - if [ -e "$DEBUG_KERNEL" ] ; then - - rm -f $kernel_link $systemmap_link $kconfig_link - # Create Links to the stuff to preserve what we found. - # The kdump kernel won't be able to determine this on its own. - [ -e "$DEBUG_KERNEL" ] && ln -s $DEBUG_KERNEL $kernel_link - [ -e "$DEBUG_MAP" ] && ln -s $DEBUG_MAP $systemmap_link - [ -e "$DEBUG_CONFIG" ] && ln -s $DEBUG_CONFIG $kconfig_link - - return 0; - fi - - # This can't actually be reached... - log_failure_msg "Warning: no debug kernel found" - return 1; -} - # Find the kexec/kdump kernel and possibly a corresponding initrd. # A kdump kernel does not need to match the `uname -r` of the booted kernel. # @@ -385,32 +309,21 @@ # Sets: KDUMP_STAMPDIR, KDUMP_COREFILE function kdump_save_core() { - KDUMP_STAMPDIR="$KDUMP_COREDIR/"`date +"%Y%m%d%H%M"` + KDUMP_STAMP=`date +"%Y%m%d%H%M"` + KDUMP_STAMPDIR="$KDUMP_COREDIR/$KDUMP_STAMP" KDUMP_CORETEMP="$KDUMP_STAMPDIR/dump-incomplete" - KDUMP_COREFILE="$KDUMP_STAMPDIR/dump."`date +"%Y%m%d%H%M"` + KDUMP_COREFILE="$KDUMP_STAMPDIR/dump.$KDUMP_STAMP" + KDUMP_DMESGFILE="$KDUMP_STAMPDIR/dmesg.$KDUMP_STAMP" mkdir -p $KDUMP_STAMPDIR - DEBUG_KERNEL=`readlink -n -s $kernel_link` - if [ -e "$DEBUG_KERNEL" ] ; then - MAKEDUMP_ARGS=${MAKEDUMP_ARGS:="-c -d 31"} - MAKEDUMP_ARGS="$MAKEDUMP_ARGS -x $DEBUG_KERNEL" - else - MAKEDUMP_ARGS=${MAKEDUMP_ARGS:="-c -d 1"} - fi - - # Move previously linked kernel particulars into dump directory. - [ -e $kernel_link ] && mv $kernel_link $KDUMP_STAMPDIR - [ -e $kconfig_link ] && mv $kconfig_link $KDUMP_STAMPDIR - [ -e $systemmap_link ] && mv $systemmap_link $KDUMP_STAMPDIR - log_action_msg "running makedumpfile $MAKEDUMP_ARGS $vmcore_file $KDUMP_CORETEMP" makedumpfile $MAKEDUMP_ARGS $vmcore_file $KDUMP_CORETEMP if [ $? -ne 0 ] ; then log_failure_msg "$NAME: makedumpfile failed, falling back to 'cp'" logger -t $NAME "makedumpfile failed, falling back to 'cp'" KDUMP_CORETEMP="$KDUMP_STAMPDIR/vmcore-incomplete" - KDUMP_COREFILE="$KDUMP_STAMPDIR/vmcore."`date +"%Y%m%d%H%M"` + KDUMP_COREFILE="$KDUMP_STAMPDIR/vmcore.$KDUMP_STAMP" cp $vmcore_file $KDUMP_CORETEMP fi @@ -419,6 +332,8 @@ mv $KDUMP_CORETEMP $KDUMP_COREFILE log_success_msg "$NAME: saved vmcore in $KDUMP_STAMPDIR" logger -t $NAME "saved vmcore in $KDUMP_STAMPDIR" + log_action_msg "$NAME: extracting kernel log buffer to $KDUMP_DMESGFILE" + makedumpfile --dump-dmesg $KDUMP_COREFILE $KDUMP_DMESGFILE return 0; else log_failure_msg "$NAME: failed to save vmcore in $KDUMP_STAMPDIR" @@ -433,7 +348,6 @@ test) DRY_RUN="true" check_kdump_support; - locate_debug_kernel; locate_kdump_kernel; kdump_load; kdump_test @@ -445,7 +359,6 @@ ;; load) check_kdump_support; - locate_debug_kernel; locate_kdump_kernel; kdump_load; ;; diff -urN makedumpfile-1.3.7.orig/debian/kdump-config.8 makedumpfile-1.3.7/debian/kdump-config.8 --- makedumpfile-1.3.7.orig/debian/kdump-config.8 2011-08-22 15:19:01.039953021 +0400 +++ makedumpfile-1.3.7/debian/kdump-config.8 2011-08-22 15:39:26.560631904 +0400 @@ -121,19 +121,6 @@ .I /boot/grub/menu.lst file and reboot, before kdump will work. See installed READMEs for suggestions. .\" - -.RS 0 -.nf -.B could not find an installed debug vmlinux image and -.B DEBUG_KERNEL is not specified in /etc/default/kdump-tools -.B Warning: makedumpfile will be limited to -d 1. -.fi -.RS -A debug version of the currently booted kernel could not be -found. -.RE -.RE -.\" .TP .B KDUMP_KERNEL does not exist: $KDUMP_KERNEL A KDUMP_KERNEL was specified in diff -urN makedumpfile-1.3.7.orig/debian/kdump-tools.5 makedumpfile-1.3.7/debian/kdump-tools.5 --- makedumpfile-1.3.7.orig/debian/kdump-tools.5 2011-08-22 15:19:01.040953008 +0400 +++ makedumpfile-1.3.7/debian/kdump-tools.5 2011-08-22 15:41:26.038138229 +0400 @@ -87,12 +87,6 @@ .\" .\" .TP -.B DEBUG_KERNEL -A debug version of the running kernel. If not set, -.B kdump-config -will use /usr/lib/debug/vmlinux-$(uname-r) if it exists. Otherwise, kdump -will still work, but the dump will take longer and will be much larger. -.TP .B MAKEDUMP_ARGS Extra arguments passed to .BR makedumpfile (8). @@ -231,28 +225,6 @@ The kdump kernel must be configured with: .B CONFIG_CRASH_DUMP=y .\" -.\" -.IP 3. -.B Debug Kernel -\- An uncompressed debug kernel -.I should -be provided in order for makedumpfile to process the vmcore file. -Without a debug kernel, the transfer process is reduced to using -.RI \*(lq "makedumpfile -c -d 1" \*(rq. -If -.I /usr/lib/debug/vmlinux-$(uname -r) -exists, -.B kdump-tools -will automatically use that kernel. - -Otherwise, A) set -.B DEBUG_KERNEL -in -.I /etc/default/kdump-tools -to point to a debug version of the currently booted kernel or -B) do without - makedumpfile will still work, but the dumpfile will be larger -and take longer to save to disk. -.\" .\" # --------------------------------------------------------------------------- .\" .SH EXAMPLES diff -urN makedumpfile-1.3.7.orig/debian/kdump-tools.default makedumpfile-1.3.7/debian/kdump-tools.default --- makedumpfile-1.3.7.orig/debian/kdump-tools.default 2011-08-22 15:19:01.039953021 +0400 +++ makedumpfile-1.3.7/debian/kdump-tools.default 2011-08-22 15:35:08.346860022 +0400 @@ -40,14 +40,9 @@ # --------------------------------------------------------------------------- # Makedumpfile options: -# DEBUG_KERNEL - a debug version of the running kernel. If not set, -# kdump-config will use /usr/lib/debug/vmlinux-$(uname -r) if it is -# available. If it is not available, makedumpfile will be limited to -# dumping all pages in memory. # MAKEDUMP_ARGS - extra arguments passed to makedumpfile (8). The default, # if unset, is to pass '-c -d 31' telling makedumpfile to use compression # and reduce the corefile to in-use kernel pages only. -#DEBUG_KERNEL= #MAKEDUMP_ARGS="-c -d 31" diff -urN makedumpfile-1.3.7.orig/debian/kdump-tools.README.Debian makedumpfile-1.3.7/debian/kdump-tools.README.Debian --- makedumpfile-1.3.7.orig/debian/kdump-tools.README.Debian 2011-08-22 15:19:01.039953021 +0400 +++ makedumpfile-1.3.7/debian/kdump-tools.README.Debian 2011-08-22 15:37:15.834266207 +0400 @@ -46,23 +46,12 @@ You may also want to add 'nmi_watchdog=1' on certain systems. -4. Debug Kernel - You *should* have a debug kernel in order for makedumpfile to process - the vmcore file. Without a debug kernel, the transfer process is - reduced to using "makedumpfile -d 1". Options: - A) If /usr/lib/debug/boot/vmlinux-$(uname -r) exists, - kdump-tools will use that kernel. - B) Explicitly set DEBUG_KERNEL in /etc/default/kdump-tools to - point to your debug kernel. - C) None of the above. makedumpfile will still work, but your - dumpfile will be larger and take longer to save to disk. - -5. Local Configuration +4. Local Configuration The /etc/default/kdump-tools file can be modified to reflect your setup, if automatic detection fails, or if you need specific architectural settings. -6. Architectural considerations +5. Architectural considerations A) x86 && PAE && memory > 4 Gigabytes will need to use KDUMP_KEXEC_ARGS="--elf64-core-headers"