geninitrd/trunk/geninitrd

arekm cvs at pld-linux.org
Sat Jan 28 14:40:30 CET 2006


Author: arekm
Date: Sat Jan 28 14:40:26 2006
New Revision: 6894

Modified:
   geninitrd/trunk/geninitrd
Log:
Always use mdassemble.
By default put UUID based config (so devices can now change without affecting an array).
Copy all devices matching /etc/mdadm.conf in case when disks layout is modified in system.


Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd	(original)
+++ geninitrd/trunk/geninitrd	Sat Jan 28 14:40:26 2006
@@ -1095,20 +1095,18 @@
 initrd_gen_softraid() {
 	[ -n "$verbose" ] && echo "Setting up mdadm..."
 	
-	if [ ! -x /sbin/initrd-mdadm -a ! -x /sbin/initrd-mdassemble ] ; then
-	    	echo "/sbin/initrd-mdadm and /sbin/initrd-mdassemble are missing !"
+	if [ ! -x /sbin/mdadm -o ! -x /sbin/initrd-mdassemble ] ; then
+	    	echo "/sbin/mdadm or /sbin/initrd-mdassemble is missing !"
 		exit 1
 	fi
 
-	if [ -x /sbin/initrd-mdassemble ] ; then
-    	    do_mdassemble=1
-	    inst /sbin/initrd-mdassemble "$MNTIMAGE/bin/mdassemble"
-	else
-	    do_mdassemble=0
-	    inst /sbin/initrd-mdadm "$MNTIMAGE/bin/mdadm"
-	fi
-	    
+	inst /sbin/initrd-mdassemble "$MNTIMAGE/bin/mdassemble"
+
 	# LVM on RAID case
+	dev_list_extra=$(awk '/^DEVICE / { for (i=2; i<=NF; i++) { printf "%s ", $i; }; } ' /etc/mdadm.conf)
+	for ex_dev in $dev_list_extra; do
+		echo "DEVICE $ex_dev" >> "$MNTIMAGE/etc/mdadm.conf"
+	done
         do_md0=1
 	for nr in `seq 1 $rootdev_nr`; do
 	    eval cr_rootdev="\$rootdev${nr}"
@@ -1117,26 +1115,26 @@
 
 	    [ "$cr_rootdev" = "/dev/md0" ] && do_md0=0
 	    
-	    if [ "$do_mdassemble" -eq 1 ] ; then
-	    	echo "DEVICE $cr_dev_list" >> "$MNTIMAGE/etc/mdadm.conf"
-		cr_dev_list_md="$(echo "$cr_dev_list" | xargs | awk ' { gsub(/ +/,",",$0); print $0; }')"
-	    	echo "ARRAY $cr_rootdev devices=$cr_dev_list_md" >> "$MNTIMAGE/etc/mdadm.conf"
-    	    else
-    		echo "mdadm --assemble $cr_rootdev $cr_dev_list" >> "$s"
-    	    fi
+	    echo "DEVICE $cr_dev_list" >> "$MNTIMAGE/etc/mdadm.conf"
+	    cr_dev_list_md="$(echo "$cr_dev_list" | xargs | awk ' { gsub(/ +/,",",$0); print $0; }')"
+	    cr_md_conf=$(/sbin/mdadm --detail --brief --config=/etc/mdadm.conf $cr_rootdev)
+	    if [ -n "$cr_md_conf" ]; then
+		    echo "$cr_md_conf" >> "$MNTIMAGE/etc/mdadm.conf"
+	    else
+		    echo "ARRAY $cr_rootdev devices=$cr_dev_list_md" >> "$MNTIMAGE/etc/mdadm.conf"
+	    fi
 
-	    for f in $cr_dev_list $cr_rootdev ; do
+	    for f in $cr_dev_list $cr_rootdev $dev_list_extra; do
 		# mkdir in case of devfs name
 		mkdir -p $MNTIMAGE/`my_dirname $f`
+		[ -e "$MNTIMAGE/$f" ] && continue
 		[ -n "$verbose" ] && echo "copying $f"
 		# this works fine with and without devfs
 		cp -HR $f $MNTIMAGE/$f
 	    done
 	done
 
-	if [ "$do_mdassemble" -eq 1 ] ; then
-	    echo "mdassemble" >> "$s"
-	fi
+	echo "mdassemble" >> "$s"
 
 	# needed to determine md-version
 	if [ "$do_md0" -eq 1 ] ; then


More information about the pld-cvs-commit mailing list