diff options
Diffstat (limited to 'debian/initramfs')
-rwxr-xr-x | debian/initramfs/scripts/local-block/mdadm | 61 | ||||
-rwxr-xr-x | debian/initramfs/scripts/local-bottom/mdadm | 3 |
2 files changed, 64 insertions, 0 deletions
diff --git a/debian/initramfs/scripts/local-block/mdadm b/debian/initramfs/scripts/local-block/mdadm new file mode 100755 index 0000000..214f24c --- /dev/null +++ b/debian/initramfs/scripts/local-block/mdadm @@ -0,0 +1,61 @@ +#!/bin/sh + +PREREQ="multipath" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. /scripts/functions + +# Poor man's mdadm-last-resort@.timer +# That kicks in 2/3rds into the ROOTDELAY + +if [ ! -f /run/count.mdadm.initrd ] +then + COUNT=0 + + # Unfortunately raid personalities can be registered _after_ block + # devices have already been added, and their rules processed, try + # triggering again. See #830770 + udevadm trigger --action=add -s block || true + wait_for_udev 10 +else + COUNT=$(cat /run/count.mdadm.initrd) +fi +COUNT=$((COUNT + 1)) + +echo $COUNT > /run/count.mdadm.initrd + +# Run pure assemble command, even though we default to incremental +# assembly it is supported for users to export variables via +# param.conf such as IMSM_NO_PLATFORM. See #830300 +mdadm -q --assemble --scan --no-degraded || true + +MAX=30 +if [ ${ROOTDELAY:-0} -gt $MAX ]; then + MAX=$ROOTDELAY +fi +MAX=$((MAX*2/3)) + +if [ "$COUNT" = "$MAX" ] +then + # Poor man's mdadm-last-resort@.service for incremental devices + mdadm -q --run /dev/md?* + + # And last try for all others + mdadm -q --assemble --scan --run + + rm -f /run/count.mdadm.initrd +fi + +exit 0 diff --git a/debian/initramfs/scripts/local-bottom/mdadm b/debian/initramfs/scripts/local-bottom/mdadm new file mode 100755 index 0000000..eda3b17 --- /dev/null +++ b/debian/initramfs/scripts/local-bottom/mdadm @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /run/count.mdadm.initrd +exit 0
\ No newline at end of file |