pass mount info to dracut when default target is a separate disk
When user does not specify dump target explicitly, it's better to dump to the "path" specified. That means after dump user enter into 1st kernel, can find vmcore in the "path". If that path is in root fs, vmcore is stored in root fs. If separate disk is mounted on any tier of "path", we just dump vmcore into the left path on the left separate disk. E.g in kdump.conf path /mnt/nfs in mount info, /dev/vdb on /mnt type ext4 (rw,relatime,seclabel,data=ordered) Then vmcore will be saved in /nfs of /dev/vdb. In this patch, pass mount info to dracut in this case if separate disk is mounted on any tier of "path". Meanwhile introduce a function in kdump-lib.sh to check if any target is specified. v4->v5: Per Vivek's comment, add a helper function is_fs_dump_target. Then is_user_configured_dump_target is rewrite with these helper functions. v5->v7: No v6 for this patch. Just use newly introduced function is_fs_type_nfs in handle_default_dump_target. Signed-off-by: Baoquan He <bhe@redhat.com> Acked-by: Vivek Goyal <vgoyal@redhat.com>
This commit is contained in:
parent
b2429dbd3d
commit
f8d7090b59
24
kdump-lib.sh
24
kdump-lib.sh
@ -29,6 +29,16 @@ is_fs_type_nfs()
|
||||
return 1
|
||||
}
|
||||
|
||||
is_fs_dump_target()
|
||||
{
|
||||
egrep -q "^ext[234]|^xfs|^btrfs|^minix" /etc/kdump.conf
|
||||
}
|
||||
|
||||
is_user_configured_dump_target()
|
||||
{
|
||||
return $(is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target || is_fs_dump_target)
|
||||
}
|
||||
|
||||
strip_comments()
|
||||
{
|
||||
echo $@ | sed -e 's/\(.*\)#.*/\1/'
|
||||
@ -67,20 +77,6 @@ get_user_configured_dump_disk()
|
||||
return
|
||||
}
|
||||
|
||||
is_user_configured_dump_target()
|
||||
{
|
||||
local _target
|
||||
|
||||
if is_ssh_dump_target || is_nfs_dump_target; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
_target=$(egrep "^ext[234]|^xfs|^btrfs|^minix|^raw" /etc/kdump.conf 2>/dev/null |awk '{print $2}')
|
||||
[ -n "$_target" ] && return 0
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_root_fs_device()
|
||||
{
|
||||
local _target
|
||||
|
31
mkdumprd
31
mkdumprd
@ -325,24 +325,29 @@ get_block_dump_target()
|
||||
[ -b "$_target" ] && echo $(to_dev_name $_target)
|
||||
}
|
||||
|
||||
# If no dump disk is specified make sure /var/crash is not mounted on a
|
||||
# separate disk.
|
||||
check_block_dump_target()
|
||||
#handle the case user does not specify the dump target explicitly
|
||||
handle_default_dump_target()
|
||||
{
|
||||
local _target
|
||||
local _mntpoint
|
||||
local _fstype
|
||||
|
||||
is_user_configured_dump_target && return
|
||||
|
||||
_target=$(get_root_fs_device)
|
||||
if [ -b "$_target" ]; then
|
||||
mkdir -p $SAVE_PATH
|
||||
_mntpoint=`df $SAVE_PATH | tail -1 | awk '{print $NF}'`
|
||||
if [ "$_mntpoint" != "/" ]; then
|
||||
perror "No dump target specified. Default dump target is rootfs block device."
|
||||
perror "But dump path $SAVE_PATH is not backed by rootfs block device. "
|
||||
perror_exit "Either explicitly specify a dump target or specify a dump path backed by rootfs block device"
|
||||
check_save_path_fs $SAVE_PATH
|
||||
|
||||
_mntpoint=$(get_mntpoint_from_path $SAVE_PATH)
|
||||
_target=$(get_target_from_path $SAVE_PATH)
|
||||
if [ "$_mntpoint" != "/" ]; then
|
||||
SAVE_PATH=${SAVE_PATH##"$_mntpoint"}
|
||||
_fstype=$(get_fs_type_from_target $_target)
|
||||
|
||||
if $(is_fs_type_nfs $_fstype); then
|
||||
add_dracut_module "nfs"
|
||||
fi
|
||||
|
||||
add_mount "$_target"
|
||||
check_size fs $_target
|
||||
fi
|
||||
}
|
||||
|
||||
@ -469,8 +474,6 @@ check_crypt()
|
||||
return 1
|
||||
}
|
||||
|
||||
check_block_dump_target
|
||||
|
||||
if ! check_resettable; then
|
||||
exit 1
|
||||
fi
|
||||
@ -548,6 +551,8 @@ do
|
||||
esac
|
||||
done < $conf_file
|
||||
|
||||
handle_default_dump_target
|
||||
|
||||
if [ -n "$extra_modules" ]
|
||||
then
|
||||
add_dracut_arg "--add-drivers" "$extra_modules"
|
||||
|
Loading…
Reference in New Issue
Block a user