Move and adjusted the code slightly to make it work within a seperate
file, no feature change.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
kdump-estimate.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++
kdumpctl | 94 +------------------------------------
kexec-tools.spec | 2 +
3 files changed, 120 insertions(+), 93 deletions(-)
create mode 100755 kdump-estimate.sh
diff --git a/kdump-estimate.sh b/kdump-estimate.sh
new file mode 100755
index 00000000..421aaaf9
--- /dev/null
+++ b/kdump-estimate.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
+. $dracutbasedir/dracut-functions.sh
+. /lib/kdump/kdump-lib.sh
+. /lib/kdump/kdump-logger.sh
+
+# These two variables will be overridden by prepare_kdump_bootinfo
+KDUMP_INITRD=""
+KDUMP_KERNEL=""
+
+if [[ -f /etc/sysconfig/kdump ]]; then
+ . /etc/sysconfig/kdump
+fi
+
+if ! dlog_init; then
+ echo "failed to initiate the kdump logger."
+ exit 1
+fi
+
+do_estimate_simple()
+{
+ local kdump_mods
+ local -A large_mods
+ local baseline
+ local kernel_size mod_size initrd_size baseline_size runtime_size reserved_size
estimated_size recommended_size
+ local size_mb=$((1024 * 1024))
+
+ kdump_mods="$(lsinitrd "$KDUMP_INITRD" -f
/usr/lib/dracut/hostonly-kernel-modules.txt | tr '\n' ' ')"
+ baseline=$(kdump_get_arch_recommend_size)
+ if [[ ${baseline: -1} == "M" ]]; then
+ baseline=${baseline%M}
+ elif [[ ${baseline: -1} == "G" ]]; then
+ baseline=$((${baseline%G} * 1024))
+ elif [[ ${baseline: -1} == "T" ]]; then
+ baseline=$((${baseline%Y} * 1048576))
+ fi
+
+ # The default pre-reserved crashkernel value
+ baseline_size=$((baseline * size_mb))
+ # Current reserved crashkernel size
+ reserved_size=$(< /sys/kernel/kexec_crash_size)
+ # A pre-estimated value for userspace usage and kernel
+ # runtime allocation, 64M should good for most cases
+ runtime_size=$((64 * size_mb))
+ # Kernel image size
+ kernel_size=$(get_kernel_size "$KDUMP_KERNEL")
+ # Kdump initramfs size
+ initrd_size=$(du -b "$KDUMP_INITRD" | awk '{print $1}')
+ # Kernel modules static size after loaded
+ mod_size=0
+ while read -r _name _size _; do
+ if [[ " $kdump_mods " != *" $_name "* ]]; then
+ continue
+ fi
+ mod_size=$((mod_size + _size))
+
+ # Mark module with static size larger than 2M as large module
+ if [[ $((_size / size_mb)) -ge 1 ]]; then
+ large_mods[$_name]=$_size
+ fi
+ done <<< "$(< /proc/modules)"
+
+ # Extra memory usage required for LUKS2 decryption
+ crypt_size=0
+ for _dev in $(get_all_kdump_crypt_dev); do
+ _crypt_info=$(cryptsetup luksDump "/dev/block/$_dev")
+ [[ $(echo "$_crypt_info" | sed -n "s/^Version:\s*\(.*\)/\1/p") ==
"2" ]] || continue
+ for _mem in $(echo "$_crypt_info" | sed -n
"s/\sMemory:\s*\(.*\)/\1/p" | sort -n); do
+ crypt_size=$((crypt_size + _mem * 1024))
+ break
+ done
+ done
+ [[ $crypt_size -ne 0 ]] && echo -e "Encrypted kdump target requires extra
memory, assuming using the keyslot with minimun memory requirement\n"
+
+ estimated_size=$((kernel_size + mod_size + initrd_size + runtime_size + crypt_size))
+ if [[ $baseline_size -gt $estimated_size ]]; then
+ recommended_size=$baseline_size
+ else
+ recommended_size=$estimated_size
+ fi
+
+ echo "Reserved crashkernel: $((reserved_size / size_mb))M"
+ echo "Recommended crashkernel: $((recommended_size / size_mb))M"
+ echo
+ echo "Kernel image size: $((kernel_size / size_mb))M"
+ echo "Kernel modules size: $((mod_size / size_mb))M"
+ echo "Initramfs size: $((initrd_size / size_mb))M"
+ echo "Runtime reservation: $((runtime_size / size_mb))M"
+ [[ $crypt_size -ne 0 ]] &&
+ echo "LUKS required size: $((crypt_size / size_mb))M"
+ echo -n "Large modules:"
+ if [[ ${#large_mods[@]} -eq 0 ]]; then
+ echo " <none>"
+ else
+ echo ""
+ for _mod in "${!large_mods[@]}"; do
+ echo " $_mod: ${large_mods[$_mod]}"
+ done
+ fi
+
+ if [[ $reserved_size -le $recommended_size ]]; then
+ echo "WARNING: Current crashkernel size is lower than recommended size
$((recommended_size / size_mb))M."
+ fi
+}
+
+if ! prepare_kdump_bootinfo; then
+ derror "Failed to get boot info"
+ return 1
+fi
+
+# If it's fadump, use the normal boot initramfs instead
+if is_fadump_capable; then
+ KDUMP_INITRD="$DEFAULT_INITRD"
+fi
+
+do_estimate_simple
diff --git a/kdumpctl b/kdumpctl
index d9843600..18b546d7 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -1204,98 +1204,6 @@ rebuild()
return $?
}
-do_estimate()
-{
- local kdump_mods
- local -A large_mods
- local baseline
- local kernel_size mod_size initrd_size baseline_size runtime_size reserved_size
estimated_size recommended_size
- local size_mb=$((1024 * 1024))
-
- setup_initrd
- if [[ ! -f $TARGET_INITRD ]]; then
- derror "kdumpctl estimate: kdump initramfs is not built yet."
- exit 1
- fi
-
- kdump_mods="$(lsinitrd "$TARGET_INITRD" -f
/usr/lib/dracut/hostonly-kernel-modules.txt | tr '\n' ' ')"
- baseline=$(kdump_get_arch_recommend_size)
- if [[ ${baseline: -1} == "M" ]]; then
- baseline=${baseline%M}
- elif [[ ${baseline: -1} == "G" ]]; then
- baseline=$((${baseline%G} * 1024))
- elif [[ ${baseline: -1} == "T" ]]; then
- baseline=$((${baseline%Y} * 1048576))
- fi
-
- # The default pre-reserved crashkernel value
- baseline_size=$((baseline * size_mb))
- # Current reserved crashkernel size
- reserved_size=$(< /sys/kernel/kexec_crash_size)
- # A pre-estimated value for userspace usage and kernel
- # runtime allocation, 64M should good for most cases
- runtime_size=$((64 * size_mb))
- # Kernel image size
- kernel_size=$(get_kernel_size "$KDUMP_KERNEL")
- # Kdump initramfs size
- initrd_size=$(du -b "$TARGET_INITRD" | awk '{print $1}')
- # Kernel modules static size after loaded
- mod_size=0
- while read -r _name _size _; do
- if [[ " $kdump_mods " != *" $_name "* ]]; then
- continue
- fi
- mod_size=$((mod_size + _size))
-
- # Mark module with static size larger than 2M as large module
- if [[ $((_size / size_mb)) -ge 1 ]]; then
- large_mods[$_name]=$_size
- fi
- done <<< "$(< /proc/modules)"
-
- # Extra memory usage required for LUKS2 decryption
- crypt_size=0
- for _dev in $(get_all_kdump_crypt_dev); do
- _crypt_info=$(cryptsetup luksDump "/dev/block/$_dev")
- [[ $(echo "$_crypt_info" | sed -n "s/^Version:\s*\(.*\)/\1/p") ==
"2" ]] || continue
- for _mem in $(echo "$_crypt_info" | sed -n
"s/\sMemory:\s*\(.*\)/\1/p" | sort -n); do
- crypt_size=$((crypt_size + _mem * 1024))
- break
- done
- done
- [[ $crypt_size -ne 0 ]] && echo -e "Encrypted kdump target requires extra
memory, assuming using the keyslot with minimun memory requirement\n"
-
- estimated_size=$((kernel_size + mod_size + initrd_size + runtime_size + crypt_size))
- if [[ $baseline_size -gt $estimated_size ]]; then
- recommended_size=$baseline_size
- else
- recommended_size=$estimated_size
- fi
-
- echo "Reserved crashkernel: $((reserved_size / size_mb))M"
- echo "Recommended crashkernel: $((recommended_size / size_mb))M"
- echo
- echo "Kernel image size: $((kernel_size / size_mb))M"
- echo "Kernel modules size: $((mod_size / size_mb))M"
- echo "Initramfs size: $((initrd_size / size_mb))M"
- echo "Runtime reservation: $((runtime_size / size_mb))M"
- [[ $crypt_size -ne 0 ]] &&
- echo "LUKS required size: $((crypt_size / size_mb))M"
- echo -n "Large modules:"
- if [[ ${#large_mods[@]} -eq 0 ]]; then
- echo " <none>"
- else
- echo ""
- for _mod in "${!large_mods[@]}"; do
- echo " $_mod: ${large_mods[$_mod]}"
- done
- fi
-
- if [[ $reserved_size -le $recommended_size ]]; then
- echo "WARNING: Current crashkernel size is lower than recommended size
$((recommended_size / size_mb))M."
- fi
-}
-
reset_crashkernel()
{
local kernel=$1 entry crashkernel_default
@@ -1394,7 +1302,7 @@ main()
show_reserved_mem
;;
estimate)
- do_estimate
+ exec /lib/kdump/kdump-estimate.sh "$@"
;;
reset-crashkernel)
reset_crashkernel "$2"
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 5dbf6255..8065c1af 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -44,6 +44,7 @@ Source33: 92-crashkernel.install
Source34: crashkernel-howto.txt
Source35: kdump-migrate-action.sh
Source36: kdump-restart.sh
+Source37: kdump-estimate.sh
#######################################
# These are sources for mkdumpramfs
@@ -199,6 +200,7 @@ install -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_mandir}/man8/mkdumprd.8
install -m 644 %{SOURCE25} $RPM_BUILD_ROOT%{_mandir}/man8/kdumpctl.8
install -m 755 %{SOURCE20} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib.sh
install -m 755 %{SOURCE23} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib-initramfs.sh
+install -m 755 %{SOURCE37} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-estimate.sh
install -m 755 %{SOURCE31} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-logger.sh
%ifarch ppc64 ppc64le
install -m 755 %{SOURCE35} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-migrate-action.sh
--
2.31.1