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
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..f7d1202 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