dracut-module-setup: Skip initrd-cleanup and initrd-parse-etc in kdump
When using multipath devices as the target for kdump, if user_friendly_name is also specified, devices default to names like "mpath*", e.g., mpatha. In dracut, we obtain a persistent device name via get_persistent_dev. However, dracut currently believes using /dev/mapper/mpath* could cause issues, thus alternatively names are used, here it's /dev/disk/by-uuid/<FS_UUID>. During the kdump boot progress, the /dev/disk/by-uuid/<FS_UUID> will exist as soon as one of the path devices exists, but it won't be usable by systemd, since multipathd will claim that device as a path device. Then multipathd will get stopped before it can create the multipath device. Without user_friendly_name, /dev/mapper/<WWID> is considered a persistent device name, avoiding the issue. The exit of multipathd is due to two dependencies in the current dracut module 90multipath/multipathd.service, "Before=initrd-cleanup.service" and "Conflicts=initrd-cleanup.service". As per man 5 systemd.unit, if A.service has "Conflicts=B.service", starting B.service will stop A.service. This is useful during normal boot. However, we will never switch-root after capturing vmcore in kdump. We need to ensure that multipathd is not killed due to such dependency issue. Without modifying multipathd.service, we add ConditionPathExists=!/proc/vmcore to skip initrd-cleanup.service in kdump. This approach is beneficial as it avoid the potential termination of other services that conflict with initrd-cleanup.service. Also skip initrd-parse-etc.service as it will try to start initrd-cleanup.service. Both of these services are used for switch root, so they can be safely skipped in kdump. Suggested-by: Benjamin Marzinski <bmarzins@redhat.com> Suggested-by: Dave Young <dyoung@redhat.com> Signed-off-by: Lichen Liu <lichliu@redhat.com> Reviewed-by: Philipp Rudo <prudo@redhat.com>
This commit is contained in:
parent
6943de2cdc
commit
468336700d
@ -1070,6 +1070,15 @@ install() {
|
|||||||
's/\(^[[:space:]]*reserved_memory[[:space:]]*=\)[[:space:]]*[[:digit:]]*/\1 1024/' \
|
's/\(^[[:space:]]*reserved_memory[[:space:]]*=\)[[:space:]]*[[:digit:]]*/\1 1024/' \
|
||||||
"${initdir}/etc/lvm/lvm.conf" &> /dev/null
|
"${initdir}/etc/lvm/lvm.conf" &> /dev/null
|
||||||
|
|
||||||
|
# Skip initrd-cleanup.service and initrd-parse-etc.service becasue we don't
|
||||||
|
# need to switch root. Instead of removing them, we use ConditionPathExists
|
||||||
|
# to check if /proc/vmcore exists to determine if we are in kdump.
|
||||||
|
sed -i '/\[Unit\]/a ConditionPathExists=!\/proc\/vmcore' \
|
||||||
|
"${initdir}/${systemdsystemunitdir}/initrd-cleanup.service" &> /dev/null
|
||||||
|
|
||||||
|
sed -i '/\[Unit\]/a ConditionPathExists=!\/proc\/vmcore' \
|
||||||
|
"${initdir}/${systemdsystemunitdir}/initrd-parse-etc.service" &> /dev/null
|
||||||
|
|
||||||
# Save more memory by dropping switch root capability
|
# Save more memory by dropping switch root capability
|
||||||
dracut_no_switch_root
|
dracut_no_switch_root
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user