#!/bin/sh
# Starts md arrays degraded that udev assembled incompletely and that are still
# inactive 30 s later, like mdadm-last-resort@.timer. Without mdadm nothing to do.
command -v mdadm >/dev/null 2>&1 || exit 0
[ -r /proc/mdstat ] || exit 0
udevadm settle -t 20 || :

inactive() {
	while read -r md colon state rest; do
		[ "$colon" = : ] && [ "$state" = inactive ] && echo "$md"
	done </proc/mdstat
}
[ -n "$(inactive)" ] || exit 0

i=0
while [ $i -lt 30 ] && [ -n "$(inactive)" ]; do
	sleep 1
	i=$((i + 1))
done
r=0
for md in $(inactive); do
	echo "md-last-resort: starting /dev/$md degraded"
	mdadm --run "/dev/$md" || r=1
done
exit $r
