summaryrefslogtreecommitdiff
path: root/user/mdadm/mdadm-raid.initd
blob: 368860ae014440553d1a03244389c6a7e1072d71 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 $?
}