Save the final failure information to log file if saving vmcore failed

Currently, if saving vmcore failed, the final failure information won't
be saved to the kexec-dmesg.log, because the action of saving the log
occurs before the final log is printed, it has no chance to save the
log(marked it with the '^^^' below) to the log file(kexec-dmesg.log).
For example:

[1] console log:
[    3.589967] kdump[453]: saving vmcore-dmesg.txt to /sysroot//var/crash/127.0.0.1-2020-11-26-14:19:17/
[    3.627261] kdump[458]: saving vmcore-dmesg.txt complete
[    3.633923] kdump[460]: saving vmcore
[    3.661020] kdump[465]: saving vmcore failed
                           ^^^^^^^^^^^^^^^^^^^^
[2] kexec-dmesg.log:
Nov 26 14:19:17 kvm-06-guest25.hv2.lab.eng.bos.redhat.com kdump[453]: saving vmcore-dmesg.txt to /sysroot//var/crash/127.0.0.1-2020-11-26-14:19:17/
Nov 26 14:19:17 kvm-06-guest25.hv2.lab.eng.bos.redhat.com kdump[458]: saving vmcore-dmesg.txt complete
Nov 26 14:19:17 kvm-06-guest25.hv2.lab.eng.bos.redhat.com kdump[460]: saving vmcore

Let's improve it in order to avoid the loss of important information.

Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
Acked-by: Kairui Song <kasong@redhat.com>
This commit is contained in:
Lianbo Jiang 2020-12-14 17:01:42 +08:00 committed by Kairui Song
parent 7cb4be80cd
commit cd86148804
2 changed files with 41 additions and 24 deletions

View File

@ -105,10 +105,12 @@ dump_raw()
dump_ssh() dump_ssh()
{ {
local ret local _ret=0
local _exitcode=0 _exitcode2=0
local _opt="-i $1 -o BatchMode=yes -o StrictHostKeyChecking=yes" local _opt="-i $1 -o BatchMode=yes -o StrictHostKeyChecking=yes"
local _dir="$KDUMP_PATH/$HOST_IP-$DATEDIR" local _dir="$KDUMP_PATH/$HOST_IP-$DATEDIR"
local _host=$2 local _host=$2
local _vmcore="vmcore"
dinfo "saving to $_host:$_dir" dinfo "saving to $_host:$_dir"
@ -122,25 +124,36 @@ dump_ssh()
if [ "${CORE_COLLECTOR%%[[:blank:]]*}" = "scp" ]; then if [ "${CORE_COLLECTOR%%[[:blank:]]*}" = "scp" ]; then
scp -q $_opt /proc/vmcore "$_host:$_dir/vmcore-incomplete" scp -q $_opt /proc/vmcore "$_host:$_dir/vmcore-incomplete"
ret=$? _exitcode=$?
save_log
scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/"
if [ $ret -ne 0 ]; then
return 1
fi
ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore" || return 1
else else
$CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "dd bs=512 of=$_dir/vmcore-incomplete" $CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "dd bs=512 of=$_dir/vmcore-incomplete"
ret=$? _exitcode=$?
save_log _vmcore="vmcore.flat"
scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/" fi
if [ $ret -ne 0 ]; then
return 1 if [ $_exitcode -eq 0 ]; then
fi ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/$_vmcore"
ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore.flat" || return 1 _exitcode2=$?
if [ $_exitcode2 -ne 0 ]; then
derror "moving vmcore failed, _exitcode:$_exitcode2"
else
dinfo "saving vmcore complete"
fi
else
derror "saving vmcore failed, _exitcode:$_exitcode"
fi
save_log
scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/"
_ret=$?
if [ $_ret -ne 0 ]; then
derror "saving log file failed, _exitcode:$_ret"
fi
if [ $_exitcode -ne 0 ] || [ $_exitcode2 -ne 0 ];then
return 1
fi fi
dinfo "saving vmcore complete"
return 0 return 0
} }

View File

@ -115,7 +115,7 @@ save_log()
# dump_fs <mount point> # dump_fs <mount point>
dump_fs() dump_fs()
{ {
local ret local _exitcode
local _mp=$1 local _mp=$1
local _dev=$(get_mount_info SOURCE target $_mp -f) local _dev=$(get_mount_info SOURCE target $_mp -f)
local _op=$(get_mount_info OPTIONS target $_mp -f) local _op=$(get_mount_info OPTIONS target $_mp -f)
@ -159,16 +159,20 @@ dump_fs()
dinfo "saving vmcore" dinfo "saving vmcore"
$CORE_COLLECTOR /proc/vmcore $_dump_path/vmcore-incomplete $CORE_COLLECTOR /proc/vmcore $_dump_path/vmcore-incomplete
ret=$? _exitcode=$?
if [ $_exitcode -eq 0 ]; then
mv $_dump_path/vmcore-incomplete $_dump_path/vmcore
sync
dinfo "saving vmcore complete"
else
derror "saving vmcore failed, _exitcode:$_exitcode"
fi
save_log save_log
mv $KDUMP_LOG_FILE $_dump_path/ mv $KDUMP_LOG_FILE $_dump_path/
if [ $ret -ne 0 ]; then if [ $_exitcode -ne 0 ]; then
return 1 return 1
fi fi
mv $_dump_path/vmcore-incomplete $_dump_path/vmcore
sync
dinfo "saving vmcore complete"
# improper kernel cmdline can cause the failure of echo, we can ignore this kind of failure # improper kernel cmdline can cause the failure of echo, we can ignore this kind of failure
return 0 return 0