On 05/27/22 at 08:20am, Vivek Goyal wrote:
On Fri, May 27, 2022 at 02:45:14PM +0800, Tao Liu wrote:
> If lvm2 thinp is enabled in kdump, lvm2-monitor.service is needed for
> monitor and autoextend the size of thin pool. Otherwise the vmcore
> dumped to a no-enough-space target will be incomplete and unable for
> further analysis.
>
> In this patch, lvm2-monitor.service will be started before kdump-capture
> .service for 2nd kernel, then be stopped in kdump post.d phase. So
> the thin pool monitoring and size-autoextend can be ensured during kdump.
>
> Signed-off-by: Tao Liu <ltao(a)redhat.com>
> ---
> dracut-lvm2-monitor.service | 15 +++++++++++++++
> dracut-module-setup.sh | 16 ++++++++++++++++
> kexec-tools.spec | 2 ++
> 3 files changed, 33 insertions(+)
> create mode 100644 dracut-lvm2-monitor.service
>
> diff --git a/dracut-lvm2-monitor.service b/dracut-lvm2-monitor.service
This seems to be a copy of /lib/systemd/system/lvm2-monitor.service.
Wondering if we can dirctly include that file in initramfs when generating
image. But I am fuzzy on details of dracut implementation. It has been
too long since I played with it. So Bao and kdump team will be best
to comment on this.
Thanks for looking into this series, Vivek. Seems I don't set the filter
of this ML correctly, so this mail didn't go into my inbox, sorry for
the late reponse.
This service file is different than
/lib/systemd/system/lvm2-monitor.service, its 'Before' and 'After' is
customized for kdump. So including the lvm2 service should not work as
expected.
Vivek
> new file mode 100644
> index 0000000..88e79e1
> --- /dev/null
> +++ b/dracut-lvm2-monitor.service
> @@ -0,0 +1,15 @@
> +[Unit]
> +Description=Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress
polling
> +Documentation=man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8)
> +After=initrd.target initrd-parse-etc.service sysroot.mount
> +After=dracut-initqueue.service dracut-pre-mount.service dracut-mount.service
dracut-pre-pivot.service
> +Before=initrd-cleanup.service kdump-capture.service shutdown.target
local-fs-pre.target
> +DefaultDependencies=no
> +Conflicts=shutdown.target
> +
> +[Service]
> +Type=oneshot
> +Environment=LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES=1
> +ExecStart=/usr/sbin/lvm vgchange --monitor y
> +ExecStop=/usr/sbin/lvm vgchange --monitor n
> +RemainAfterExit=yes
> \ No newline at end of file
> diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
> index c319fc2..19c0f46 100755
> --- a/dracut-module-setup.sh
> +++ b/dracut-module-setup.sh
> @@ -1016,6 +1016,20 @@ remove_cpu_online_rule() {
> sed -i '/SUBSYSTEM=="cpu"/d' "$file"
> }
>
> +kdump_install_lvm2_monitor_service()
> +{
> + inst "$moddir/lvm2-monitor.service"
"$systemdsystemunitdir/lvm2-monitor.service"
> + systemctl -q --root "$initdir" add-wants initrd.target
lvm2-monitor.service
> +
> + # We should stop lvm2-monitor service after kdump. SIGTERM is ignored
> + # by dmeventd when device is monitored. So before stopping dmevend, devices
> + # shall be unmonitored. This can save the waiting time between
systemd-shutdown
> + # Sending SIGTERM and SIGKILL to remaining processes.
> + mkdir -p "${initdir}/etc/kdump/post.d"
> + echo "systemctl stop lvm2-monitor" >
"${initdir}/etc/kdump/post.d/stop-lvm2-monitor.sh"
> + chmod +x "${initdir}/etc/kdump/post.d/stop-lvm2-monitor.sh"
> +}
> +
> install() {
> local arch
>
> @@ -1058,6 +1072,8 @@ install() {
> inst "$moddir/kdump.sh" "/usr/bin/kdump.sh"
> inst "$moddir/kdump-capture.service"
"$systemdsystemunitdir/kdump-capture.service"
> systemctl -q --root "$initdir" add-wants initrd.target
kdump-capture.service
> + is_lvm2_thinp_dump_target &&
> + kdump_install_lvm2_monitor_service
> # Replace existing emergency service and emergency target
> cp "$moddir/kdump-emergency.service"
"$initdir/$systemdsystemunitdir/emergency.service"
> cp "$moddir/kdump-emergency.target"
"$initdir/$systemdsystemunitdir/emergency.target"
> diff --git a/kexec-tools.spec b/kexec-tools.spec
> index 6673000..5f4344d 100644
> --- a/kexec-tools.spec
> +++ b/kexec-tools.spec
> @@ -60,6 +60,7 @@ Source109: dracut-early-kdump-module-setup.sh
>
> Source200: dracut-fadump-init-fadump.sh
> Source201: dracut-fadump-module-setup.sh
> +Source202: dracut-lvm2-monitor.service
>
> %ifarch ppc64 ppc64le
> Requires(post): servicelog
> @@ -240,6 +241,7 @@ cp %{SOURCE102}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpb
> cp %{SOURCE104}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE104}}
> cp %{SOURCE106}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE106}}
> cp %{SOURCE107}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE107}}
> +cp %{SOURCE202}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE202}}
> chmod 755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE100}}
> chmod 755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE101}}
> mkdir -p -m755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99earlykdump
> --
> 2.33.1
>