Hello community, here is the log from the commit of package mdadm for openSUSE:Factory checked in at Mon Jan 11 15:50:55 CET 2010. -------- --- mdadm/mdadm.changes 2009-12-15 20:27:11.000000000 +0100 +++ /mounts/work_src_done/STABLE/mdadm/mdadm.changes 2010-01-11 14:40:44.000000000 +0100 @@ -1,0 +2,6 @@ +Wed Jan 6 15:47:03 CET 2010 - mmarek@suse.cz + +- mkinitrd-*.sh: fix booting from partitionable md devices and + from container devices (bnc#565219). + +------------------------------------------------------------------- @@ -4,0 +11,13 @@ + +------------------------------------------------------------------- +Fri Dec 4 18:00:40 CET 2009 - mmarek@suse.cz + +- Support for partitionable md devices in mkinitrd scripts + (fate#305883). + +------------------------------------------------------------------- +Tue Nov 3 11:03:54 CET 2009 - mmarek@suse.cz + +- update to 3.0.3 (fate#307159) + * mdmon improvements (needed for fate#306823) + * other fixes calling whatdependson for head-i586 Old: ---- 0001-Add-missing-space-in-detail-brief-output.patch 0002-Fix-null-dereference-in-set_member_info.patch mdadm-3.0.2.tar.bz2 New: ---- mdadm-3.0.3.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mdadm.spec ++++++ --- /var/tmp/diff_new_pack.QNulBz/_old 2010-01-11 15:46:30.000000000 +0100 +++ /var/tmp/diff_new_pack.QNulBz/_new 2010-01-11 15:46:30.000000000 +0100 @@ -1,7 +1,7 @@ # -# spec file for package mdadm (Version 3.0.2) +# spec file for package mdadm (Version 3.0.3) # -# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,8 +19,8 @@ Name: mdadm -Version: 3.0.2 -Release: 3 +Version: 3.0.3 +Release: 1 BuildRequires: sgmltool PreReq: %fillup_prereq %insserv_prereq Obsoletes: raidtools @@ -31,8 +31,6 @@ Summary: Utility for Configuring MD Setup BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: %{name}-%{version}.tar.bz2 -Patch1: 0001-Add-missing-space-in-detail-brief-output.patch -Patch2: 0002-Fix-null-dereference-in-set_member_info.patch Source1: Software-RAID.HOWTO.tar.bz2 Source2: sysconfig.mdadm Source3: mdadmd @@ -53,8 +51,6 @@ %prep %setup -q -a1 -%patch1 -p1 -%patch2 -p1 %build %{suse_update_config -f} ++++++ mdadm-3.0.2.tar.bz2 -> mdadm-3.0.3.tar.bz2 ++++++ ++++ 2309 lines of diff (skipped) ++++++ mkinitrd-boot.sh ++++++ --- /var/tmp/diff_new_pack.QNulBz/_old 2010-01-11 15:46:31.000000000 +0100 +++ /var/tmp/diff_new_pack.QNulBz/_new 2010-01-11 15:46:31.000000000 +0100 @@ -1,7 +1,7 @@ #!/bin/bash #%stage: softraid #%programs: /sbin/mdadm /sbin/mdmon -#%modules: raid0 raid1 raid456 +#%modules: raid0 raid1 raid10 raid456 #%if: -n "$need_mdadm" # ##### MD (Software-)Raid @@ -33,36 +33,41 @@ echo 1 > /sys/module/md_mod/parameters/start_ro fi -if [ -n "$need_mdadm" ]; then - - if [ -f /etc/mdadm.conf ] ; then - mdconf="-Ac /etc/mdadm.conf" - [ -z "$md_dev" ] && md_dev="--scan" +md_assemble() +{ + local dev=$1 mdconf container + + case "$dev" in + /dev/md[0-9]*p[0-9]*) + dev=${dev%p[0-9]*} + esac + if test -f /etc/mdadm.conf; then + mdconf="-c /etc/mdadm.conf" + container=$( \ + sed -rn "s:^ARRAY +$dev .*container=([^ ]*).*:\\1:p" \ + /etc/mdadm.conf) + else + mdconf="-c partitions" + fi + if test -n "$container"; then + mdadm -A $mdconf --uuid="$container" /dev/md/container fi + mdadm -A $mdconf $mdarg "$dev" +} + +if [ -n "$need_mdadm" ]; then if [ -n "$md_uuid" ] ; then mdarg="--uuid=$md_uuid" - elif [ -n "$md_uuid" ] ; then - mdarg="$mdarg --uuid=$md_uuid" - fi - if [ -n "$md_minor" ] ; then - mdarg="$mdarg --super-minor=$md_minor" - md_dev="/dev/md$md_minor" - elif [ -z "$md_minor" -a -n "$md_minor" ] ; then - mdarg="$mdarg --super-minor=$md_minor" fi case $resumedev in - /dev/md*) - echo 1 > /sys/module/md_mod/parameters/start_ro - resume_minor="${resumedev#/dev/md}" - mdadm -Ac partitions -m $resume_minor --auto=md $resumedev - ;; + /dev/md*) + md_assemble "$resumedev" esac - if [ "$md_dev" ] ; then - /sbin/mdadm $mdconf --auto=md $md_dev || /sbin/mdadm -Ac partitions $mdarg --auto=md $md_dev + if [ -n "$md_dev" ] ; then + md_assemble "$md_dev" fi wait_for_events fi - ++++++ mkinitrd-setup.sh ++++++ --- /var/tmp/diff_new_pack.QNulBz/_old 2010-01-11 15:46:31.000000000 +0100 +++ /var/tmp/diff_new_pack.QNulBz/_new 2010-01-11 15:46:31.000000000 +0100 @@ -4,40 +4,95 @@ # mdblockdev= +# Full mdadm.conf generated by mdadm. +# Contains all created MD RAIDs +mdadm_conf=$(mdadm --examine --brief --scan) + +cont_list= +md_devs= + +# blockdev contains real devices (/dev/X) for root, resume, journal, dumb +echo "blockdev: $blockdev" for bd in $blockdev ; do - # get information about the current blockdev - update_blockdev $bd - mdconf=$(mdadm -Db $bd 2> /dev/null | sed -n "s@/dev/md[0-9]*@/dev/md$blockminor@p") - if [ -n "$mdconf" ] ; then + is_part_dev=false + case $bd in + /dev/md[0-9]*p[0-9]*) + # Partitionable MD RAID. This is partition on RAID. Get the RAID + bd=${bd%%p[0-9]*} + is_part_dev=true + ;; + /dev/md[0-9]*) + ;; + *) + mdblockdev="$mdblockdev $bd" + continue + ;; + esac + # Check if this device is already added (possible for partitionable). + md_dev=${bd##/dev/} + dup_found=false + for dup in $md_devs; do + if [ x"$dup" = x"$md_dev" ]; then + dup_found=true + break + fi + done + if $dup_found; then + if ! $is_part_dev; then + echo "setup-md.sh: $md_dev found multiple times" >&2 + fi + continue + fi + # Get UUID of block device + tmp_uuid=$(mdadm -D $bd --export 2>/dev/null | grep UUID=) + if [ -n "$tmp_uuid" ]; then md_tmpblockdev=$(mdadm -Dbv $bd 2> /dev/null | sed -n "1D;s/,/ /g;s/^ *devices=\(.*\)/\1/p") - md_dev=${bd##/dev/} - dup_found=0 - for dup in $md_devs; do - if [ x"$dup" = x"$md_dev" ]; then - dup_found=1 - break + uuid=${tmp_uuid##MD_} + # Get the corresponding line from config + arr_line=$(echo "$mdadm_conf" | grep "$uuid") + if test -z "$arr_line"; then + continue + fi + # Check for container + cont_line= + cont=$(echo "$arr_line" | sed -n "s/.*container=\([0-9a-z]\{8\}:[0-9a-z]\{8\}:[0-9a-z]\{8\}:[0-9a-z]\{8\}\).*/\1/p") + if [ -n "$cont" ]; then + cnt_dup=0 + for cnt in $cont_list; do + if [ x"$cont"= x"$cnt" ]; then + cnt_dup=1 fi - done - if [ $dup_found -eq 0 ]; then - mdblockdev="$mdblockdev $md_tmpblockdev" - eval md_conf_${md_dev}=\"$mdconf\" - md_devs="$md_devs $md_dev" - root_md=1 - else - echo "setup-md.sh: $md_dev found multiple times" >&2 + done + if [ $cnt_dup -eq 0 ]; then + cont_list="$cont_list $cont" + cont_line=$(echo "$mdadm_conf" | grep "UUID=$cont") + cont_line="$cont_line\n" + fi + fi + # add a line with the "real" md device name so that boot-md.sh finds it + cfg_dev=$(echo "$arr_line" | sed -rn 's/^ARRAY +([^ ]*).*/\1/p; T; q') + real_dev=$(readlink -f "$cfg_dev") + if test -n "$real_dev" -a "$real_dev" != "$cfg_dev"; then + arr_line="$arr_line$(echo -e "\\n$arr_line" | \ + sed -r "s:^(ARRAY +)$cfg_dev:\\1$real_dev:")" fi - else - mdblockdev="$mdblockdev $bd" + mdblockdev="$mdblockdev $md_tmpblockdev" + # Add ARRAY line (with container line before if needed). + cfg_line=$(echo -e "$cont_line$arr_line") + eval md_conf_${md_dev}=\""$cfg_line"\" + md_devs="$md_devs $md_dev" + root_md=1 fi done +# Any 'md' device is replaced by it's component disks. blockdev="$mdblockdev" if [ -n "$root_md" ] ; then need_mdadm=1 - echo "DEVICE partitions" > $tmp_mnt/etc/mdadm.conf + echo -n "" > $tmp_mnt/etc/mdadm.conf for md in $md_devs; do - eval echo \$md_conf_$md >> $tmp_mnt/etc/mdadm.conf + eval echo -e \"\$md_conf_$md\" >> $tmp_mnt/etc/mdadm.conf done fi ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org