[Patch v4 3/6] pass mount info to dracut when default target is a separate disk

Vivek Goyal vgoyal at redhat.com
Thu Mar 20 14:24:01 UTC 2014


On Thu, Mar 20, 2014 at 04:33:56PM +0800, Baoquan He wrote:
> 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.
> 
> Signed-off-by: Baoquan He <bhe at redhat.com>

Looks good to me.

Acked-by: Vivek Goyal <vgoyal at redhat.com>

Vivek

> ---
>  kdump-lib.sh | 14 ++++++++++++++
>  mkdumprd     | 34 +++++++++++++++++++---------------
>  2 files changed, 33 insertions(+), 15 deletions(-)
> 
> diff --git a/kdump-lib.sh b/kdump-lib.sh
> index 6803cb6..712868a 100755
> --- a/kdump-lib.sh
> +++ b/kdump-lib.sh
> @@ -53,6 +53,20 @@ 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
> diff --git a/mkdumprd b/mkdumprd
> index 2bd25ee..246a133 100644
> --- a/mkdumprd
> +++ b/mkdumprd
> @@ -325,25 +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
>  
> -    _target=$(get_user_configured_dump_disk)
> -    [ -n "$_target" ] && return
> +    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 [ "$_fstype" = "nfs" ]; then
> +            add_dracut_module "nfs"
>          fi
> +
> +        add_mount "$_target"
> +        check_size fs $_target
>      fi
>  }
>  
> @@ -470,8 +474,6 @@ check_crypt()
>      return 1
>  }
>  
> -check_block_dump_target
> -
>  if ! check_resettable; then
>      exit 1
>  fi
> @@ -549,6 +551,8 @@ do
>      esac
>  done < $conf_file
>  
> +handle_default_dump_target
> +
>  if [ -n "$extra_modules" ]
>  then
>      add_dracut_arg "--add-drivers" "$extra_modules"
> -- 
> 1.8.5.3


More information about the kexec mailing list