diff options
Diffstat (limited to 'user/mdadm/mdadm-raid.initd')
-rw-r--r-- | user/mdadm/mdadm-raid.initd | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/user/mdadm/mdadm-raid.initd b/user/mdadm/mdadm-raid.initd new file mode 100644 index 000000000..368860ae0 --- /dev/null +++ b/user/mdadm/mdadm-raid.initd @@ -0,0 +1,48 @@ +#!/sbin/openrc-run + +# script to start raid devices described in /etc/mdadm.conf. +depend() { + before checkfs fsck swap + after modules +} + +array_devices() { + awk '/^ARRAY/ {print $2}' /etc/mdadm.conf +} + +start() { + [ -f /etc/mdadm.conf ] || return 0 + # start all devices that are not already started + [ -f /proc/mdstat ] || modprobe md > /dev/null 2>&1 + local tostart= + for i in $(array_devices); do + [ -b "$i" ] && continue + tostart="$tostart $i" + done + [ -z "$tostart" ] && return 0 + + ebegin "Starting RAID devices" + mdadm --assemble --scan --quiet $tostart + eend $? +} + +is_mounted_as() { + local mnt + for mnt in $(awk "\$1 == \"$1\" {print \$2}" /proc/mounts); do + [ "$mnt" = "$2" ] && return 0 + done + return 1 +} + +stop() { + # stop all raid devices except anything mounted as / + [ -f /etc/mdadm.conf ] || return 0 + ebegin "Stopping RAID devices" + local tostop= + for i in $(array_devices); do + is_mounted_as $i / && continue + tostop="$tostop $i" + done + mdadm --stop --quiet $tostop + eend $? +} |