From: Arkadiusz Miƛkiewicz Date: Sat, 28 Jan 2006 13:40:26 +0000 (+0000) Subject: Always use mdassemble. X-Git-Tag: 6894^0 X-Git-Url: https://git.pld-linux.org/?a=commitdiff_plain;h=6cca3165133e8f5e17db501a993c24e5affa3b08;p=projects%2Fgeninitrd.git 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. svn-id: @6894 --- diff --git a/geninitrd b/geninitrd index 294c8ca..f0ebe30 100755 --- a/geninitrd +++ b/geninitrd @@ -1095,20 +1095,18 @@ EOF 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 @@ initrd_gen_softraid() { [ "$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 - - for f in $cr_dev_list $cr_rootdev ; do + 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 $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