Get the mount point correctly, if the device has several mount point
Any block device can be mounted multiply on the different mount point. Once a mount point is mounted in bind mode, the general mount point can be unmounted. Thus kdump would not find the general mount point[1] to handle the path. The mount point, which is as general mount point, will be got by "fintmnt" previously. But the mntpoint may be incorrect, if the mntpoint is bind mount. In order to fix it to support bind mounted in atomic, we will add a judgement to comfirm the mntpoint is bind mounted, or not. For general mount, returning path is like following, if we use "findmnt". The returning is same as "findmnt -v". -bash-4.2# findmnt /var | tail -n 1 | awk '{print $2}' /dev/mapper/atomicos-root But for bind mount, returning path is like following, if we use "fintmnt". -bash-4.2# findmnt /var | tail -n 1 | awk '{print $2}' /dev/mapper/atomicos-root[/ostree/deploy/rhel-atomic-host/var] Use "findmnt -v" is like this: -bash-4.2# findmnt -v /var | tail -n 1 | awk '{print $2}' /dev/mapper/atomicos-root So we can determine the bind mount, if the returning is different between "findmnt" and "findmnt -v". [1] general mount point is a directory without being in bind mounted mode, just a normal directory. Signed-off-by: Minfei Huang <mhuang@redhat.com> Acked-by: Dave Young <dyoung@redhat.com> Acked-by: Baoquan He <bhe@redhat.com>
This commit is contained in:
parent
4a468829e7
commit
c82a453c67
26
kdump-lib.sh
26
kdump-lib.sh
@ -133,9 +133,33 @@ get_fs_type_from_target()
|
||||
echo $(findmnt -k -f -n -r -o FSTYPE $1)
|
||||
}
|
||||
|
||||
# input: device path
|
||||
# output: the general mount point
|
||||
# find the general mount point, not the bind mounted point in atomic
|
||||
# As general system, Use the previous code
|
||||
#
|
||||
# ERROR and EXIT:
|
||||
# the device can be umounted the general mount point, if one of the mount point is bind mounted
|
||||
# For example:
|
||||
# mount /dev/sda /mnt/
|
||||
# mount -o bind /mnt/var /var
|
||||
# umount /mnt
|
||||
get_mntpoint_from_target()
|
||||
{
|
||||
echo $(findmnt -k -f -n -r -o TARGET $1)
|
||||
if is_atomic; then
|
||||
for _mnt in $(findmnt -k -n -r -o TARGET $1)
|
||||
do
|
||||
if ! is_bind_mount $_mnt; then
|
||||
echo $_mnt
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Mount $1 firstly, without the bind mode" >&2
|
||||
exit 1
|
||||
else
|
||||
echo $(findmnt -k -f -n -r -o TARGET $1)
|
||||
fi
|
||||
}
|
||||
|
||||
# get_option_value <option_name>
|
||||
|
8
mkdumprd
8
mkdumprd
@ -103,7 +103,7 @@ to_mount() {
|
||||
local _dev=$1 _source _target _fstype _options _mntopts _pdev
|
||||
|
||||
_source=$(findmnt -k -f -n -r -o SOURCE $_dev)
|
||||
_target=$(findmnt -k -f -n -r -o TARGET $_dev)
|
||||
_target=$(get_mntpoint_from_target $_dev)
|
||||
# mount under /sysroot if dump to root disk or mount under
|
||||
#/kdumproot/$_target in other cases in 2nd kernel. systemd
|
||||
#will be in charge to umount it.
|
||||
@ -147,10 +147,6 @@ to_mount() {
|
||||
echo "$_pdev $_mntopts"
|
||||
}
|
||||
|
||||
to_mount_point() {
|
||||
echo $(findmnt -k -f -n -r -o TARGET $1)
|
||||
}
|
||||
|
||||
is_readonly_mount() {
|
||||
local _mnt
|
||||
_mnt=$(findmnt -k -f -n -r -o OPTIONS $1)
|
||||
@ -204,7 +200,7 @@ mkdir_save_path_ssh()
|
||||
#Function: get_fs_size
|
||||
#$1=dump target
|
||||
get_fs_size() {
|
||||
local _mnt=$(to_mount_point $1)
|
||||
local _mnt=$(get_mntpoint_from_target $1)
|
||||
echo -n $(df -P "${_mnt}/$SAVE_PATH"|tail -1|awk '{print $4}')
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user