summaryrefslogtreecommitdiff
path: root/debian/initramfs
diff options
context:
space:
mode:
authorMichael Tokarev <mjt@tls.msk.ru>2012-08-21 11:27:46 +0400
committerMichael Tokarev <mjt@tls.msk.ru>2012-08-23 21:53:21 +0400
commitea9f34c0b34f4c595010ba2ce61a3a6e423f2235 (patch)
tree73d87743945edc6103fd7fff01b81af3e6dd0f48 /debian/initramfs
parentcfe0c9acd3f76e9da7a3c44617fce46134905d70 (diff)
fixes for initramfs integration (#644389, #678262, #685161)
Diffstat (limited to 'debian/initramfs')
-rw-r--r--debian/initramfs/hook73
-rw-r--r--debian/initramfs/script.local-top31
2 files changed, 33 insertions, 71 deletions
diff --git a/debian/initramfs/hook b/debian/initramfs/hook
index 8181946f..42fa9d48 100644
--- a/debian/initramfs/hook
+++ b/debian/initramfs/hook
@@ -1,6 +1,7 @@
#!/bin/sh
#
-# Copyright © 2006-2008 Martin F. Krafft <madduck@debian.org>
+# 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.
#
@@ -74,7 +75,7 @@ INITRDSTART=all
[ -z "$INITRDSTART" ] && INITRDSTART=none
DESTMDADMCONF=$DESTDIR/etc/mdadm/mdadm.conf
-DESTCONFIG=$DESTDIR/conf/conf.d/md
+DESTCONFIG=$DESTDIR/conf/mdadm
if [ -f $CONFIG ]; then
homehost="$(sed -ne 's,^[[:space:]]*HOMEHOST[[:space:]]*,,p' $CONFIG)"
@@ -163,8 +164,9 @@ elif ! grep -q '^ARRAY' $DESTMDADMCONF; then
info "letting initramfs assemble auto-detected arrays."
exit 0
else
- # obtain dev:level pairs from config file, honouring multiline entries
- devpairs="$(
+ # obtain devices list from config file, honouring multiline entries
+ devices="$(
+ dev=
while read line; do
case "$line" in
(ARRAY*) :;;
@@ -173,21 +175,12 @@ else
for atom in $line; do
case "$atom" in
(/dev*) dev=$atom;;
- (level=raid*|level=linear|level=multipath) level=${atom#level=};;
- (level=*)
- err "invalid level specified in ARRAY statement in $CONFIG:"
- err " $line"
- err "levels should be either raid*, linear, or multipath."
- warn "falling back to emergency procedure in initramfs."
- exit 1
- ;;
- (*) :;;
esac
done
- [ -n "${dev:-}" ] || continue
# /dev/mdX and /dev/md/X are the same, really
case "$dev" in
+ "") continue ;;
(/dev/md/*) alt=/dev/md${dev##*/};;
(/dev/md*) alt=/dev/md/${dev#/dev/md};;
(*)
@@ -200,32 +193,20 @@ else
dev="$alt"
fi
- echo -n "${dev}:"
- if [ -n "${level:-}" ]; then
- echo -n "$level"
- else
- echo -n "$($MDADM --detail $dev | sed -rne 's,[[:space:]]+Raid Level : ,,p')"
- fi
- echo -n ' '
+ echo "$dev"
done < $DESTMDADMCONF)" || exit $?
fi
-uniquify()
-{
- for i in $@; do echo "$i"; done | sort -u
-}
+if [ "$INITRDSTART" != none ] && [ -n "$devices" ]; then
-if [ "$INITRDSTART" != none ] && [ -n "$devpairs" ]; then
- echo "MD_DEVPAIRS='${devpairs% }'" >> $DESTCONFIG
-
- devs= levels=
- for i in $devpairs; do
- dev=${i%:*}
- level=${i##*:}
- case "$INITRDSTART" in
- all|*${dev}*)
- devs="${devs:+$devs }$dev"
- levels="${levels:+$levels }$level"
+ devs=
+ for dev in $devices; do
+ case "$INITRDSTART " in
+ all|*${dev}[[:space:]]*)
+ case "$devs " in # uniquiness
+ (*${dev}\ *) :;;
+ (*) devs="${devs:+$devs }$dev" ;;
+ esac
;;
*) :;;
esac
@@ -244,7 +225,7 @@ if [ "$INITRDSTART" != none ] && [ -n "$devpairs" ]; then
done
for i in $INITRDSTART; do
- case "$INITRDSTART" in all|none|'') break;; *) :;; esac
+ case "$INITRDSTART" in all) break;; *) :;; esac
case "$devs" in
*${i}*) continue;;
*) :;;
@@ -257,29 +238,12 @@ if [ "$INITRDSTART" != none ] && [ -n "$devpairs" ]; then
break
done
- echo "MD_LEVELS='$levels'" >> $DESTCONFIG
if [ "$INITRDSTART" = all ]; then
echo "MD_DEVS=all" >> $DESTCONFIG
else
echo "MD_DEVS='$devs'" >> $DESTCONFIG
fi
- # handle module synonyms
- modules="$(echo $levels \
- | sed -re 's,\<[[:digit:]]+\>,raid&,g; # prefix digits with raid
- s,stripe,raid0,g; # striping is raid0
- s,mirror,raid1,g; # mirroring is raid1
- s,raid4,raid5,g; # use raid5 to handle raid4
- s,mp,multipath,g # mp is multipath
- ')"
-
- # if raid456 module is present, use it for raid[456]
- modprobe --set-version="$version" --show-depends raid456 >/dev/null 2>&1 \
- && modules="$(echo $modules | sed -e 's,raid[456],raid456,g')"
-
- modules="$(uniquify $modules | tr '\n' ' ')"
- echo "MD_MODULES='${modules% }'" >> $DESTCONFIG
-
if [ "$INITRDSTART" = all ]; then
info "will start all available MD arrays from the initial ramdisk."
else
@@ -299,7 +263,6 @@ if [ "$INITRDSTART" != none ] && [ -n "$devpairs" ]; then
else
echo "MD_DEVS=none" >> $DESTCONFIG
- echo "MD_MODULES=''" >> $DESTCONFIG
info "no MD arrays will be started from the initial ramdisk."
fi
diff --git a/debian/initramfs/script.local-top b/debian/initramfs/script.local-top
index 7ef6d4fb..53341e8b 100644
--- a/debian/initramfs/script.local-top
+++ b/debian/initramfs/script.local-top
@@ -1,6 +1,7 @@
#!/bin/sh
#
-# Copyright © 2006-2008 Martin F. Krafft <madduck@debian.org>
+# 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.
#
@@ -32,24 +33,25 @@ verbose()
}
MD_DEVS=all
-MD_MODULES='linear multipath raid0 raid1 raid456 raid5 raid6 raid10'
-[ -s /conf/conf.d/md ] && . /conf/conf.d/md
+[ -s /conf/md ] && . /conf/md
-verbose && log_begin_msg Loading MD modules
-for module in ${MD_MODULES:-}; do
- if modprobe -q "$module"; then
- verbose && log_success_msg "loaded module ${module}."
- else
- log_failure_msg "failed to load module ${module}."
- fi
-done
-log_end_msg
+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_failure_msg "failed to load module md_mod."
+fi
if [ ! -f /proc/mdstat ]; then
verbose && panic "cannot initialise MD subsystem (/proc/mdstat missing)"
exit 1
fi
+# prevent writes/syncs so that resuming works (#415441).
+echo 1 > /sys/module/md_mod/parameters/start_ro
+
# handle /dev/md/X nodes
mkdir -p /dev/md
@@ -69,9 +71,6 @@ if [ ! -e $CONFIG ]; then
MD_DEVS=all
fi
-# prevent writes/syncs so that resuming works (#415441).
-echo 1 > /sys/module/md_mod/parameters/start_ro
-
if [ "$MD_DEVS" = all ]; then
verbose && log_begin_msg "Assembling all MD arrays"
@@ -84,7 +83,7 @@ if [ "$MD_DEVS" = all ]; then
fi
verbose && log_end_msg
-elif [ "$MD_DEVS" != none ]; then
+else
for dev in $MD_DEVS; do
verbose && log_begin_msg "Assembling MD array $dev"