--- mkinitrd.orig	2009-06-02 02:02:32.385427675 +0200
+++ mkinitrd	2009-06-02 02:07:33.757551470 +0200
@@ -339,7 +339,7 @@ findstoragedriverinsys () {
         *) handleddevices="$handleddevices $sysfs" ;;
     esac
 
-    if [[ "$sysfs" =~ '^/sys/.*block/md[0-9]+$' ]]; then
+    if [[ "$sysfs" =~ '^/sys/.*block/md([0-9]+|/)$' ]]; then
         local raid=${sysfs##*/}
         vecho "Found MDRAID component $raid"
         handleraid $raid
@@ -602,7 +602,15 @@ handleraid() {
         return 0
     fi
 
-    levels=$(awk "/^$1[	 ]*:/ { print\$4 }" /proc/mdstat)
+    if [ -L /dev/$1 ]; then
+	name_dev=$1
+	real_dev=$(ls -l /dev/$1 | awk '{print $10}' | sed -e 's#/dev/##')
+    else
+	name_dev=$1
+	real_dev=$1
+    fi
+
+    levels=$(awk "/^$real_dev[	 ]*:/ { print\$4 }" /proc/mdstat)
 
     for level in $levels ; do
         case $level in
@@ -628,7 +636,7 @@ handleraid() {
         esac
     done
     if [ "$start" = 1 ]; then
-        raiddevices="$raiddevices $1"
+        raiddevices="$raiddevices $name_dev"
     fi
     return $start
 }
@@ -1190,6 +1198,14 @@ vecho "Building initrd in $MNTIMAGE"
 inst /sbin/nash "$MNTIMAGE" /bin/nash
 inst /sbin/modprobe "$MNTIMAGE" /bin/modprobe
 inst /sbin/rmmod "$MNTIMAGE" /bin/rmmod
+inst /bin/bash "$MNTIMAGE" /bin/bash
+if [ -n "$raiddevices" ]; then
+    inst /sbin/mdadm "$MNTIMAGE" /sbin/mdadm
+    if [ -f /etc/mdadm.conf ]; then
+        inst /etc/mdadm.conf "$MNTIMAGE" /etc/mdadm.conf
+    fi
+fi
+
 
 if [ -e /etc/fstab.sys ]; then
     inst /etc/fstab.sys "$MNTIMAGE"
@@ -1245,13 +1261,6 @@ mknod $MNTIMAGE/dev/tty c 5 0
 mknod $MNTIMAGE/dev/console c 5 1
 mknod $MNTIMAGE/dev/ptmx c 5 2
 
-if [ -n "$raiddevices" ]; then
-    inst /sbin/mdadm "$MNTIMAGE"
-    if [ -f /etc/mdadm.conf ]; then
-        inst /etc/mdadm.conf "$MNTIMAGE"
-    fi
-fi
-
 if [ "$root" == "dhcp" ]; then
     inst "/usr/sbin/nbd-client" "$MNTIMAGE" /sbin/nbd-client
 fi
