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@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
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@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@redhat.com
Hi Pingfan, thanks for the review, I've sent V2 that use ondemand mount for both kdump and fadump, please have a look.
On Fri, Sep 27, 2019 at 10:02 PM piliu piliu@redhat.com wrote:
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@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@redhat.com