#!/bin/bash
#
# Storage initialization

WITHOUT_RC_COMPAT=1
. /etc/init.d/functions

MODPROBE=/sbin/modprobe
MULTIPATH=/sbin/multipath
KPARTX=/sbin/kpartx
DMSETUP=/sbin/dmsetup
DMRAID=/sbin/dmraid
MDADM=/sbin/mdadm
VGSCAN=/sbin/vgscan
VGCHANGE=/sbin/vgchange

if ! grep -iwqs nompath /proc/cmdline && [ -f /etc/multipath.conf -a -x "$MULTIPATH" ]; then
	"$MODPROBE" dm-multipath > /dev/null 2>&1
	"$MULTIPATH" -v 0
	if [ -x "$KPARTX" ]; then
		"$DMSETUP" ls --target multipath --exec "$KPARTX -a -p p" >/dev/null
	fi
fi

if ! grep -iwqs nodmraid /proc/cmdline && [ -x "$DMRAID" ]; then
	"$MODPROBE" dm-mirror  > /dev/null 2>&1
	dmraidsets=$(LC_ALL=C "$DMRAID" -s -c -i)
	if [ "$?" = "0" ]; then
		for dmname in $dmraidsets; do
			if [[ "$dmname" == isw_* ]] && \
			   ! grep -iwqs noiswmd /proc/cmdline; then
				continue
			fi
			if [ -x "$KPARTX" ]; then
			"$DMRAID" -ay -i --rm_partitions -p "$dmname" >/dev/null 2>&1
			"$KPARTX" -a -p p "/dev/mapper/$dmname" >/dev/null
			fi
		done
	fi
fi

if ! grep -iwqs noraidtab /proc/cmdline && [ -f /proc/mdstat -a -x "$MDADM" ] && grep -qs '^ARRAY[[:space:]]' /etc/mdadm.conf ; then
	action: "Starting up RAID devices:" "$MDADM" --assemble --scan
fi

if [ -x "$VGCHANGE" -a -x "$VGSCAN" -a -s /etc/lvm/lvm.conf -a -c /dev/mapper/control ]; then
	"$MODPROBE" dm-mod >/dev/null 2>&1
	"$VGSCAN" --mknodes >/dev/null 2>&1
	action "Setting up LVM2:" "$VGCHANGE" -a y --sysinit
fi
