On 09/27/2019 06:58 PM, Kairui Song wrote:
This helps to reduce the risk of boot failure, and may also help
speed
up the boot by a bit.
And currently there is a failure that caused by some mount handling
bug with kernel and systemd that is failing the system booting:
[FAILED] Failed to mount /kdumproot/home.
See 'systemctl status kdumproot-home.mount' for details.
[DEPEND] Dependency failed for Local File Systems.
[ OK ] Reached target Remote File Systems (Pre).
[ OK ] Reached target Remote File Systems.
Starting udev Coldplug all Devices...
Starting Create Volatile Files and Directories...
Starting Kdump Emergency...
This patch can bypass it. The fix of root cause is still WIP, but this
patch itself is a nice to have optimization so it's reasonable to do so.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
kdump-lib-initramfs.sh | 30 +++++++++++++++++++++++++-----
mkdumprd | 5 +++++
2 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
index 608dc6e..0a2429b 100755
--- a/kdump-lib-initramfs.sh
+++ b/kdump-lib-initramfs.sh
@@ -96,16 +96,31 @@ get_kdump_confs()
# dump_fs <mount point| device>
dump_fs()
{
-
+ local _do_umount
local _dev=$(findmnt -k -f -n -r -o SOURCE $1)
local _mp=$(findmnt -k -f -n -r -o TARGET $1)
local _op=$(findmnt -k -f -n -r -o OPTIONS $1)
- echo "kdump: dump target is $_dev"
-
if [ -z "$_mp" ]; then
- echo "kdump: error: Dump target $_dev is not mounted."
- return 1
+ _dev=$(findmnt -s -f -n -r -o SOURCE $1)
+ _mp=$(findmnt -s -f -n -r -o TARGET $1)
+ _op=$(findmnt -s -f -n -r -o OPTIONS $1)
+
+ if [ -n "$_dev" ] && [ -n "$_mp" ]; then
+ echo "kdump: dump target $_dev is not mounted, trying to
mount..."
+ mkdir -p $_mp
+ mount -o $_op $_dev $_mp
+
+ if [ $? -ne 0 ]; then
+ echo "kdump: mounting failed (mount point: $_mp, option:
$_op)"
+ return 1
+ fi
+ _do_umount=1
+ else
+ echo "kdump: error: Dump target $_dev is not usable"
+ fi
+ else
+ echo "kdump: dump target is $_dev"
fi
# Remove -F in makedumpfile case. We don't want a flat format dump here.
@@ -129,6 +144,11 @@ dump_fs()
sync
echo "kdump: saving vmcore complete"
+
+ if [ $_do_umount ]; then
+ umount $_mp || echo "kdump: warn: failed to umount target"
+ fi
+
# improper kernel cmdline can cause the failure of echo, we can ignore this kind of
failure
return 0
}
diff --git a/mkdumprd b/mkdumprd
index cf3533f..2526351 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -115,6 +115,11 @@ to_mount() {
_options=$(echo $_options | sed 's/\(^\|,\)nofail\($\|,\)/\1/g')
_options=$(echo $_options | sed 's/\(^\|,\)nobootwait\($\|,\)/\1/g')
+ # Only for fadump, don't mount the dump target unless needed.
+ if is_fadump_capable; then
+ _options="$_options,noauto"
+ fi
+
_mntopts="$_target $_fstype $_options"
#for non-nfs _dev converting to use udev persistent name
if [ -b "$_source" ]; then
Discussed with Kairui offline. I think this is a smart method to step
around the systemd mount bug.
Acked-by: Pingfan Liu <piliu(a)redhat.com>