summaryrefslogtreecommitdiff
path: root/debian/mdadm-waitidle
diff options
context:
space:
mode:
Diffstat (limited to 'debian/mdadm-waitidle')
-rw-r--r--debian/mdadm-waitidle56
1 files changed, 56 insertions, 0 deletions
diff --git a/debian/mdadm-waitidle b/debian/mdadm-waitidle
new file mode 100644
index 00000000..920272c7
--- /dev/null
+++ b/debian/mdadm-waitidle
@@ -0,0 +1,56 @@
+#!/bin/sh
+# This script is not used when systemd is running
+### BEGIN INIT INFO
+# Provides: mdadm-waitidle
+# Required-Start:
+# Required-Stop:
+# Should-Stop: halt reboot kexec
+# X-Stop-After: umountroot
+# Default-Start:
+# Default-Stop: 0 6
+# Short-Description: Wait for MD arrays to become idle
+# Description: Waits until all MD arrays are in idle and synced state
+# before halt/reboot.
+### END INIT INFO
+#
+set -eu
+
+MDADM=/sbin/mdadm
+test -x "$MDADM" || exit 0
+test -f /proc/mdstat || exit 0
+
+. /lib/lsb/init-functions
+
+case "${1:-}" in
+
+ start|restart|force-reload)
+ # nothing, the only reason the script is here is to stop arrays
+ ;;
+
+ stop)
+ sync
+ wait=
+ for md in /sys/block/md*/md ; do
+ [ -d "$md" ] || continue
+ [ "$wait" ] || log_action_begin_msg "Waiting for MD arrays to become idle"
+ wait=y
+ [ -w $md/sync_action ] && echo idle > $md/sync_action
+ done
+ if [ "$wait" ]; then
+ # mdadm --wait-clean has a short internal timeout
+ if $MDADM --wait-clean --scan; then
+ log_action_end_msg 0
+ else
+ log_action_end_msg 1
+ sleep 1
+ fi
+ fi
+ ;;
+
+ *)
+ echo "Usage: ${0:-} stop" >&2
+ exit 1;;
+
+esac
+
+exit 0