[PATCH 1/2] pass mount info to dracut when default target is a separate disk

Baoquan He bhe at redhat.com
Wed Mar 12 14:36:03 UTC 2014


On 03/12/14 at 10:25am, Vivek Goyal wrote:
> On Wed, Mar 12, 2014 at 05:59:27PM +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.
> 
> Hi Bao,
> 
> What happens if /mnt/nfs is an NFS mount? I think logically if NFS volume
> is mounted on /mnt/xyz, we should be able to take care of that too? This
> would be similar to the case where root is NFS mounted and we still can
> dump to /var/crash directory over NFS.

Yeah, NFS need be considered. Will include it in v2.

> 
> > 
> > In this patch, pass mount info to dracut in this case if separate
> > disk is mounted on any tier of "path".
> > 
> > Signed-off-by: Baoquan He <bhe at redhat.com>
> > ---
> >  mkdumprd | 23 ++++++++++++++---------
> >  1 file changed, 14 insertions(+), 9 deletions(-)
> > 
> > diff --git a/mkdumprd b/mkdumprd
> > index 241a426..d792b42 100644
> > --- a/mkdumprd
> > +++ b/mkdumprd
> > @@ -355,12 +355,12 @@ 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 _ret
> >  
> >      _target=$(get_user_configured_dump_disk)
> 
> >      [ -n "$_target" ] && return
> > @@ -368,11 +368,16 @@ check_block_dump_target()
> >      _target=$(get_root_fs_device)
> >      if [ -b "$_target" ]; then
> 
> Why do we need to make sure that rootfs deivce is a block device?

If NFS cared, it should look like:

        if [ -n "$_target" ]; then

will change.

> 
> >          mkdir -p $SAVE_PATH
> > -        _mntpoint=`df $SAVE_PATH | tail -1 |  awk '{print $NF}'`
> > +        _ret=$?
> > +        if [ $_ret -ne 0 ]; then
> > +            perror_exit "mkdir failed on $SAVE_PATH"
> > +        fi
> 
> I think we should resuse mkdir_save_path_fs() here. So first we need
> to set dump disk and path relative to disk and then call
> mkdir_save_path_fs(). This will also take care of handling read only
> mounted disks.

I can't. Because "df" need be executed on existing path. E.g if /dev/vdb
is mounted on /mnt, and the "path" is /mnt/nfs. Then "mkdir -p /mnt/nfs"
need be executed firstly, otherwise "df /mnt/nfs" will fail if /mnt/nfs
does not exist.
> 
> > +        _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"
> > +            SAVE_PATH=$(echo $SAVE_PATH | sed "s,$_mntpoint,,")
> > +            _target=$(findmnt -k -f -n -o SOURCE $_mntpoint)
> 
> I guess when you did "df" previously on $SAVE_PATH, that will also give
> you mounted disk. So we can save _target there itself.
> 
> _mntpoint=$(df $SAVE_PATH | tail -1 |  awk '{print $NF}')
> _target=$(df $SAVE_PATH | tail -1 |  awk '{print $1}')

Yeah, this can be improved. Will do.

> 
> > +            add_mount "$_target"
> > +            check_size fs $_target
> >          fi
> >      fi
> >  }
> > @@ -500,8 +505,6 @@ check_crypt()
> >      return 1
> >  }
> >  
> > -check_block_dump_target
> > -
> >  if ! check_resettable; then
> >      exit 1
> >  fi
> > @@ -521,6 +524,8 @@ if [ "$(uname -m)" = "s390x" ]; then
> >      add_dracut_module "znet"
> >  fi
> >  
> > +handle_default_dump_target
> > +
> 
> I think any handling of default dump target should happpen after we have
> parsed the file. We seem to be doing some things in wrong order.
> Performing various checks and actions even before we parse the file.
> 
> So we should first parse the file, save relevant state and then see if
> user has specified a dump target or not. And if user has not specified
> a dump target, then set the dump target, path and add_mount() accordingly.

In logic, this should be better. Will change.

Baoquan
Thanks


> 
> Thanks
> Vivek


More information about the kexec mailing list