On 06/30/2017 at 11:18 AM, Xunlei Pang wrote:
Resolves: bz1451717
https://bugzilla.redhat.com/1451717
When there is no crypt related kdump target, we can safely
omit "crypt" dracut module, this can avoid the pop asking
disk password during kdump boot in some cases.
We can continue omitting more dracut modules after this series is accepted,
to reduce kdump initramfs size(thus kdump memory), something like below
can save several MiB tested on my x86_64 fedora KVM:
diff --git a/mkdumprd b/mkdumprd
index 97722df..54d45c9 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -401,28 +401,55 @@ check_crypt()
return 1
}
+is_lvm()
+{
+ if [ -d "/sys/dev/block/$1/dm" ]; then
+ return 0
+ fi
+
+ return 1
+}
+
omit_dracut_modules()
{
local target majmin
- local has_crypt
+ local has_crypt has_lvm all_nfs_ssh
# Skip fadump case
[ -z "$KDUMP_TARGETS" ] && return
has_crypt=0
+ has_lvm=0
+ all_nfs_ssh=1
for target in $KDUMP_TARGETS; do
if [ -b "$target" ]; then
# Check "crypt"
majmin=$(get_maj_min $target)
check_block_and_slaves is_crypt $majmin && has_crypt=1
+
+ # Check "lvm"
+ check_block_and_slaves is_lvm $majmin && has_lvm=1
fi
+
+ # Check nfs/ssh dumping
+ [[ "$target" != "nfs" && "$target" !=
"ssh" ]] && all_nfs_ssh=0
done
# Omit "crypt", BZ1451717
if [ "$has_crypt" == "0" ]; then
add_dracut_arg "--omit" "crypt"
fi
+
+ # Further omit more modules in case of no lvm related target
+ if [ "$has_lvm" == "0" ]; then
+ add_dracut_arg "--omit" "lvm dm multipath dmraid"
+ fi
+
+ # Further omit more modules in case of nfs/ssh dumping
+ if [ "$all_nfs_ssh" == "1" ]; then
+ add_dracut_arg "--omit" "iscsi fcoe"
+ fi
}
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
mkdumprd | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/mkdumprd b/mkdumprd
index 45b185a..97722df 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -401,6 +401,30 @@ check_crypt()
return 1
}
+omit_dracut_modules()
+{
+ local target majmin
+ local has_crypt
+
+ # Skip fadump case
+ [ -z "$KDUMP_TARGETS" ] && return
+
+ has_crypt=0
+
+ for target in $KDUMP_TARGETS; do
+ if [ -b "$target" ]; then
+ # Check "crypt"
+ majmin=$(get_maj_min $target)
+ check_block_and_slaves is_crypt $majmin && has_crypt=1
+ fi
+ done
+
+ # Omit "crypt", BZ1451717
+ if [ "$has_crypt" == "0" ]; then
+ add_dracut_arg "--omit" "crypt"
+ fi
+}
+
if ! check_resettable; then
exit 1
fi
@@ -490,6 +514,8 @@ then
add_dracut_arg "--add-drivers" "$extra_modules"
fi
+omit_dracut_modules
+
dracut "${dracut_args[@]}" "$@"
_rc=$?
sync