summaryrefslogtreecommitdiff
path: root/debian/initramfs/script.local-top
blob: 9450bb72e840506be06fe8dd5eefb0f0c6445c7e (plain)
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
#!/bin/sh
#
# Copyright © 2006-2008 Martin F. Krafft <madduck@debian.org>,
#             2012 Michael Tokarev <mjt@tls.msk.ru>
# based on the scripts in the initramfs-tools package.
# released under the terms of the Artistic Licence.
#
set -eu

case ${1:-} in
  prereqs) echo "multipath"; exit 0;;
esac

. /scripts/functions

maybe_break pre-mdadm

if [ -e /scripts/local-top/md ]; then
  log_warning_msg "old md initialisation script found, getting out of its way..."
  exit 0
fi

MDADM=/sbin/mdadm
[ -x "$MDADM" ] || exit 0

verbose()
{
  case "$quiet" in y*|Y*|1|t*|T*)
    return 1;;
  *)
    return 0;;
  esac
}

MD_DEVS=all
[ -s /conf/mdadm ] && . /conf/mdadm

if [ "$MD_DEVS" = none ]; then
  verbose &&
    log_warning_msg "INITRDSTART set to \"none\" in /etc/default/mdadm, not assembling raid arrays"
  exit 0
fi

if [ ! -f /proc/mdstat ] && ! modprobe -q md_mod; then
  verbose && log_warning_msg "failed to load module md_mod."
fi
if [ ! -f /proc/mdstat ]; then
  verbose && log_warning_msg "cannot initialise MD subsystem (/proc/mdstat missing)"
  exit 0
fi

# handle /dev/md/X nodes
mkdir -p /dev/md

CONFIG=/etc/mdadm/mdadm.conf
# in case the hook failed to install a configuration file, this is our last
# attempt... the "emergency procedure"... <drumroll>
if [ ! -e $CONFIG ]; then
  log_warning_msg "missing mdadm.conf file, trying to create one..."
  mkdir -p ${CONFIG%/*}
  echo DEVICE partitions > $CONFIG
  $MDADM --examine --scan >> $CONFIG
  if [ -s $CONFIG ]; then
    verbose && log_success_msg "mdadm.conf created."
  else
    verbose && log_failure_msg "could not create mdadm.conf, the boot will likely fail."
  fi
  MD_DEVS=all
fi

if [ "$MD_DEVS" = all ]; then

  verbose && log_begin_msg "Assembling all MD arrays"
  extra_args=''
  [ -n "${MD_HOMEHOST:-}" ] && extra_args="--homehost=$MD_HOMEHOST"
  if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args}; then
    verbose && log_success_msg "assembled all arrays."
  else
    log_failure_msg "failed to assemble all arrays."
  fi
  verbose && log_end_msg

else
  for dev in $MD_DEVS; do

    verbose && log_begin_msg "Assembling MD array $dev"
    if $MDADM --assemble --scan --run --auto=yes $dev; then
      verbose && log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
    verbose && log_end_msg

  done
fi

wait_for_udev 10

maybe_break post-mdadm

exit 0