On 04/17/15 at 04:26pm, Minfei Huang wrote:
kdump will raise the warning in Atomic, if the path is bind mounted
directory. The reason why causes this issue is kdump cannt parse the
bind mounted directory.
To correct dumping target, we can construct the real dumping path in
Atomic, which contains two part, one bind mounted path, the other
specified dump target.
Following is an example:
-bash-4.2# cat /etc/kdump.conf | grep ^path
path /var/crash
-bash-4.2# findmnt /var | tail -n 1 | awk '{print $2}'
/dev/mapper/atomicos-root[/ostree/deploy/rhel-atomic-host/var]
-bash-4.2# findmnt -v /var | tail -n 1 | awk '{print $2}'
/dev/mapper/atomicos-root
Then we can found it that the real path of dumping vmcore is
/ostree/deploy/rhel-atomic-host/var/crash.
To fix this issue, we can replace the target path as the real path which
is from above parsing.
Signed-off-by: Minfei Huang <mhuang(a)redhat.com>
---
kdump-lib.sh | 5 ++++-
mkdumprd | 22 +++++++++++++++++++++-
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/kdump-lib.sh b/kdump-lib.sh
index 5333fe4..2abb513 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -182,7 +182,10 @@ make_absolute_save_path()
local _mnt
[ -n $_target ] && _mnt=$(get_mntpoint_from_target $1)
- echo "${_mnt}/$SAVE_PATH"
+ _mnt="${_mnt}/$SAVE_PATH"
+
+ # strip the duplicated "/"
+ echo "$_mnt" | tr -s /
}
check_save_path_fs()
diff --git a/mkdumprd b/mkdumprd
index 14ec70f..8cf3c7b 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -362,6 +362,17 @@ handle_default_dump_target()
_mntpoint=$(get_mntpoint_from_path $SAVE_PATH)
_target=$(get_target_from_path $SAVE_PATH)
+
+ if is_atomic && is_bind_mount $_mntpoint; then
+ SAVE_PATH=${SAVE_PATH##"$_mntpoint"}
+ # the real dump path in the 2nd kernel, if the mount point is bind mounted.
+ SAVE_PATH=$(get_bind_mount_directory $_mntpoint)/$SAVE_PATH
+ _mntpoint=$(get_mntpoint_from_target $_target)
+
+ # the absolute path in the 1st kernel
+ SAVE_PATH=$_mntpoint/$SAVE_PATH
+ fi
+
if [ "$_mntpoint" != "/" ]; then
SAVE_PATH=${SAVE_PATH##"$_mntpoint"}
_fstype=$(get_fs_type_from_target $_target)
@@ -533,8 +544,17 @@ do
if [ "$config_opt" = "nfs" ]; then
add_dracut_module "nfs"
fi
+
+ _absolute_save_path=$(make_absolute_save_path $config_val)
What the use of below section? They are redundant?
+ _mntpoint=$(get_mntpoint_from_path $_absolute_save_path)
+ if is_atomic && is_bind_mount $_mntpoint; then
+ SAVE_PATH=${_absolute_save_path##"$_mntpoint"}
+ # the real dump path in the 2nd kernel, if the mount point is bind mounted.
+ SAVE_PATH=$(get_bind_mount_directory $_mntpoint)/$SAVE_PATH
+ fi
+
add_mount "$config_val"
- check_save_path_fs $(make_absolute_save_path $config_val)
+ check_save_path_fs $_absolute_save_path
check_size fs $config_val
;;
raw)
--
1.9.3