在 2019年01月10日 14:59, Bhupesh Sharma 写道:
Hi Kazu, Lianbo,
On Thu, Jan 10, 2019 at 10:00 AM lijiang <lijiang(a)redhat.com> wrote:
>
> 在 2019年01月10日 04:38, Kazuhito Hagio 写道:
>> If a crash occurs repeatedly after enabling kdump, the system goes
>> into a crash loop and the dump target may get filled up by vmcores.
>> This is likely to happen especially with early kdump.
>>
>> This patch introduces 'final_action' option to kdump.conf, in order
>> for users to be able to power off the system even after capturing
>> a vmcore successfully.
>>
>> Signed-off-by: Kazuhito Hagio <k-hagio(a)ab.jp.nec.com>
>> Cc: Dave Young <dyoung(a)redhat.com>
>> Cc: Lianbo Jiang <lijiang(a)redhat.com>
>> ---
>> kdump-lib-initramfs.sh | 13 +++++++++++++
>> kdump.conf | 5 +++++
>> kdump.conf.5 | 6 ++++++
>> kdumpctl | 22 +++++++++++++++++++++-
>> 4 files changed, 45 insertions(+), 1 deletion(-)
>>
>> diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
>> index f5155a4..9f482cd 100755
>> --- a/kdump-lib-initramfs.sh
>> +++ b/kdump-lib-initramfs.sh
>> @@ -70,6 +70,19 @@ get_kdump_confs()
>> ;;
>> esac
>> ;;
>> + final_action)
>> + case $config_val in
>> + reboot)
>> + FINAL_ACTION="systemctl reboot -f"
>> + ;;
>> + halt)
>> + FINAL_ACTION="halt"
>> + ;;
>> + poweroff)
>> + FINAL_ACTION="systemctl poweroff -f"
>> + ;;
>> + esac
>> + ;;
>> esac
>> done < $KDUMP_CONF
>>
> Thanks for your patch.
>
> Once dumping fails, it will switch to the kdump-error-handler.sh, but this script
always calls
> the do_default_action() first, and then executes the final action. Because the
default is always
> 'reboot' in case the 'default' is not set in
'/etc/kdump.conf', so the final action could have no
> chance to execute. Unless we set 'default poweroff' and 'final_action
poweroff' together.
Indeed.
> Not sure whether it would be more better like this:
>
> diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
> index 7ba99b6..953b8bc 100755
> --- a/kdump-lib-initramfs.sh
> +++ b/kdump-lib-initramfs.sh
> @@ -6,7 +6,7 @@ KDUMP_PATH="/var/crash"
> CORE_COLLECTOR=""
> DEFAULT_CORE_COLLECTOR="makedumpfile -l --message-level 1 -d 31"
> DMESG_COLLECTOR="/sbin/vmcore-dmesg"
> -DEFAULT_ACTION="systemctl reboot -f"
> +DEFAULT_ACTION=""
>
> do_default_action()
> {
> - echo "Kdump: Executing default action $DEFAULT_ACTION"
> - eval $DEFAULT_ACTION
> + if [ "$DEFAULT_ACTION" == "" ]; then
> + echo "Kdump: default action is not set."
> + else
> + echo "Kdump: Executing default action $DEFAULT_ACTION"
> + eval $DEFAULT_ACTION
> + fi
> }
>
> It makes sure that the final action can be called in case user doesn't set the
'default poweroff'
> and dumping failure.
Perhaps its only me but I find using two terms - 'default action' and
'final action' confusing when used together.
Shouldn't the default action be practically the final action in normal cases?
I understand that perhaps this is useful for early dump, but in that
case shouldn't we be making the default action as power-off instead.
Normal kdump could face the same problem(crash loop), the 'poweroff' option would
still make sense for normal
kdump.
Thanks.
Lianbo
> Just my personal p-o-v.
>
> Thanks,
> Bhupesh
>
>> Thanks
>> Lianbo
>>
>>> diff --git a/kdump.conf b/kdump.conf
>>> index 286ad27..6643e87 100644
>>> --- a/kdump.conf
>>> +++ b/kdump.conf
>>> @@ -110,6 +110,11 @@
>>> # reboot. Useful when non-root dump target is
specified.
>>> # The default option is "reboot".
>>> #
>>> +# final_action <reboot | halt | poweroff>
>>> +# - Action to perform in case dumping succeeds.
>>> +# Each action is same as the "default" directive
above.
>>> +# The default is "reboot".
>>> +#
>>> # force_rebuild <0 | 1>
>>> # - By default, kdump initrd will only be rebuilt when necessary.
>>> # Specify 1 to force rebuilding kdump initrd every time when
kdump
>>> diff --git a/kdump.conf.5 b/kdump.conf.5
>>> index 990076e..72995c4 100644
>>> --- a/kdump.conf.5
>>> +++ b/kdump.conf.5
>>> @@ -160,6 +160,12 @@ target is specified, the default action can be set as
dump_to_rootfs. That mean
>>> dumping to target fails, dump vmcore to rootfs from initramfs context and
reboot.
>>> .RE
>>>
>>> +.B final_action <reboot | halt | poweroff>
>>> +.RS
>>> +Action to perform in case dumping to the intended target succeeds. The
default is
>>> +"reboot". Each action is same as the "default" directive
above.
>>> +.RE
>>> +
>>> .B force_rebuild <0 | 1>
>>> .RS
>>> By default, kdump initrd will only be rebuilt when necessary.
>>> diff --git a/kdumpctl b/kdumpctl
>>> index ca47705..992aaa8 100755
>>> --- a/kdumpctl
>>> +++ b/kdumpctl
>>> @@ -228,7 +228,7 @@ check_config()
>>> case "$config_opt" in
>>> \#* | "")
>>> ;;
>>> -
raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|default|force_rebuild|force_no_rebuild|dracut_args|fence_kdump_args|fence_kdump_nodes)
>>> +
raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|default|final_action|force_rebuild|force_no_rebuild|dracut_args|fence_kdump_args|fence_kdump_nodes)
>>> # remove inline comments after the end of a directive.
>>> config_val=$(strip_comments $config_val)
>>> [ -z "$config_val" ] && {
>>> @@ -248,6 +248,7 @@ check_config()
>>> done < $KDUMP_CONFIG_FILE
>>>
>>> check_default_config || return 1
>>> + check_final_action_config || return 1
>>>
>>> check_fence_kdump_config || return 1
>>>
>>> @@ -954,6 +955,25 @@ check_default_config()
>>> fi
>>> }
>>>
>>> +check_final_action_config()
>>> +{
>>> + local final_action
>>> +
>>> + final_action=$(awk '$1 ~ /^final_action$/ {print $2;}'
$KDUMP_CONFIG_FILE)
>>> + if [ -z "$final_action" ]; then
>>> + return 0
>>> + else
>>> + case "$final_action" in
>>> + reboot|halt|poweroff)
>>> + return 0
>>> + ;;
>>> + *)
>>> + echo $"Usage kdump.conf: final_action
{reboot|halt|poweroff}"
>>> + return 1
>>> + esac
>>> + fi
>>> +}
>>> +
>>> start()
>>> {
>>> check_dump_feasibility
>>>
>> _______________________________________________
>> kexec mailing list -- kexec(a)lists.fedoraproject.org
>> To unsubscribe send an email to kexec-leave(a)lists.fedoraproject.org
>> Fedora Code of Conduct:
https://getfedora.org/code-of-conduct.html
>> List Guidelines:
https://fedoraproject.org/wiki/Mailing_list_guidelines
>> List Archives:
https://lists.fedoraproject.org/archives/list/kexec@lists.fedoraproject.org