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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#!/bin/sh -eu
# Copyright © 2001-2004 Mario Jou/3en <joussen@debian.org>
# Copyright © martin f. krafft <madduck@debian.org>
# Distributable under the terms of the GNU GPL version 2.
#
# $Id$
#
set +u # workaround for #369953
. /usr/share/debconf/confmodule
set -u
CONFIG=/etc/mdadm/mdadm.conf
ALTCONFIG=/etc/mdadm.conf
[ ! -f $CONFIG ] && [ -f $ALTCONFIG ] && CONFIG=$ALTCONFIG
DEBIANCONFIG=/etc/default/mdadm
DEBIANCONFIG_OLD=/etc/mdadm/debian.conf
if [ ! -e "$DEBIANCONFIG" ]; then
if [ -e "$DEBIANCONFIG_OLD" ]; then
DEBIANCONFIG="$DEBIANCONFIG_OLD"
fi
fi
INITRDSTART=''
if [ -s $DEBIANCONFIG ] ; then
AUTOSTART=true
AUTOCHECK=true
START_DAEMON=true
MAILADDR=root
[ -f $DEBIANCONFIG ] && . $DEBIANCONFIG
if [ -f $CONFIG ]; then
MAILADDR=$(sed -rne 's,^MAILADDR[[:space:]]*([^[:space:]]+).*,\1,p' $CONFIG)
fi
# if $MAIL_TO from $DEBIANCONFIG is set, give it priority. This is because
# it was used in the command line invocation of the mdadm monitor, and thus
# overruled any existing setting in /etc/mdadm/mdadm.conf.
# There's a slight chance of loss of a configuration setting (MAILADDR in
# /etc/mdadm/mdadm.conf), but it's only an email address, and it is likely
# unused anyway, thus we run the risk.
[ -n "${MAIL_TO:-}" ] && MAILADDR="$MAIL_TO"
[ -n "$AUTOSTART" ] && db_set mdadm/autostart "$AUTOSTART"
[ -n "$AUTOCHECK" ] && db_set mdadm/autocheck "$AUTOCHECK"
[ -n "$START_DAEMON" ] && db_set mdadm/start_daemon "$START_DAEMON"
[ -n "$MAILADDR" ] && db_set mdadm/mail_to "$MAILADDR"
fi
db_input high mdadm/warning || true
db_go
db_fget mdadm/initrdstart seen || true
if [ -z "$INITRDSTART" ] || [ "$RET $INITRDSTART" = "false all" ]; then
ROOTRAIDDEV="$(df / | sed -rne 's,^(/dev/[^[:space:]]+).*,\1,p')"
if ! mdadm --detail $ROOTRAIDDEV >/dev/null 2>&1; then
# you are using some funky setup. Let's be save...
# (could also happen during preconfigure, when no mdadm present)
INITRDSTART=all
else
INITRDSTART="$ROOTRAIDDEV"
fi
fi
[ -n "$INITRDSTART" ] && db_set mdadm/initrdstart "$INITRDSTART"
cnt=0
while true; do
db_input low mdadm/initrdstart || true
db_go
db_get mdadm/initrdstart
INITRDSTART="$(echo $RET | tr , ' ')"
case "$INITRDSTART" in
''|none) INITRDSTART=none; break;;
all) break;;
*)
ARRAYS=''
ERROR=0
for i in $INITRDSTART; do
# standardise by prefixing /dev/
i="/dev/${i#/dev/}"
if [ ! -e "$i" ]; then
echo "E: device node does not exist: $i" >&2
ERROR=1; break
fi
if [ ! -b "$i" ]; then
echo "E: not a block device: $i" >&2
ERROR=1; break
fi
if ! mdadm --detail "$i" >/dev/null 2>&1; then
echo "E: not a RAID array: $i" >&2
ERROR=1; break
fi
# remove partition from name of partitionable devices
i="${i%p[0-9]*}"
# uniquely add device name
echo $ARRAYS | egrep -q "\b${i}\b" || ARRAYS="${ARRAYS:+$ARRAYS }$i"
done
if [ $ERROR -eq 0 ]; then
INITRDSTART="$ARRAYS"
# exit the while true loop
break
fi
cnt=$((cnt + 1))
if [ $cnt -eq 3 ]; then
echo "W: unable to determine RAID arrays needed for boot." >&2
echo "W: falling back to starting all of them..." >&2
INITRDSTART=all
break
fi
;;
esac
done
db_set mdadm/initrdstart "$INITRDSTART"
if [ "$INITRDSTART" != all ]; then
db_input high mdadm/autostart || true
db_go
fi
db_input medium mdadm/autocheck || true
db_go
db_input medium mdadm/start_daemon || true
db_go
db_get mdadm/start_daemon
if [ "$RET" = true ]; then
db_input medium mdadm/mail_to || true
db_go
fi
|