diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | systemd/mdadm.shutdown | 4 | ||||
-rw-r--r-- | systemd/mdmon@.service | 12 | ||||
-rw-r--r-- | udev-md-raid-arrays.rules | 4 |
4 files changed, 19 insertions, 2 deletions
@@ -288,6 +288,7 @@ install-systemd: systemd/mdmon@.service $(INSTALL) -D -m 644 systemd/mdmonitor.service $(DESTDIR)$(SYSTEMD_DIR)/mdmonitor.service $(INSTALL) -D -m 644 systemd/mdadm-last-resort@.timer $(DESTDIR)$(SYSTEMD_DIR)/mdadm-last-resort@.timer $(INSTALL) -D -m 644 systemd/mdadm-last-resort@.service $(DESTDIR)$(SYSTEMD_DIR)/mdadm-last-resort@.service + $(INSTALL) -D -m 755 systemd/mdadm.shutdown $(DESTDIR)$(SYSTEMD_DIR)-shutdown/mdadm.shutdown if [ -f /etc/SuSE-release -o -n "$(SUSE)" ] ;then $(INSTALL) -D -m 755 systemd/SUSE-mdadm_env.sh $(DESTDIR)$(SYSTEMD_DIR)/../scripts/mdadm_env.sh ;fi uninstall: diff --git a/systemd/mdadm.shutdown b/systemd/mdadm.shutdown new file mode 100644 index 00000000..1bbbb6f8 --- /dev/null +++ b/systemd/mdadm.shutdown @@ -0,0 +1,4 @@ +#!/bin/sh +# We need to ensure all md arrays with external metadata +# (e.g. IMSM, DDF) are clean before completing the shutdown. +/sbin/mdadm --wait-clean --scan diff --git a/systemd/mdmon@.service b/systemd/mdmon@.service index 304b26e8..af0a2a33 100644 --- a/systemd/mdmon@.service +++ b/systemd/mdmon@.service @@ -14,7 +14,15 @@ Before=initrd-switch-root.target # mdmon should never complain due to lack of a platform, # that is mdadm's job if at all. Environment=IMSM_NO_PLATFORM=1 -ExecStart=/sbin/mdmon %I +# The mdmon starting in the initramfs (with dracut at least) +# cannot see sysfs after root is mounted, so we will have to +# 'takeover'. As the '--offroot --takeover' don't hurt when +# not necessary, are are useful with root-on-md in dracut, +# have them always present. +ExecStart=/sbin/mdmon --offroot --takeover %I Type=forking -PIDFile=/run/mdadm/%I.pid +# Don't set the PIDFile. It isn't necessary (systemd can work +# it out) and systemd will remove it when transitioning from +# initramfs to rootfs. +#PIDFile=/run/mdadm/%I.pid KillMode=none diff --git a/udev-md-raid-arrays.rules b/udev-md-raid-arrays.rules index 4abbe354..92aec36e 100644 --- a/udev-md-raid-arrays.rules +++ b/udev-md-raid-arrays.rules @@ -34,4 +34,8 @@ ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service" +# Tell systemd to run mdmon for our container, if we need it. +ENV{MD_LEVEL}=="raid[1-9]*", ENV{MD_CONTAINER}=="?*", PROGRAM="/usr/bin/readlink $env{MD_CONTAINER}", ENV{MD_MON_THIS}="%c" +ENV{MD_MON_THIS}=="?*", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@%c.service" + LABEL="md_end" |