From dcb0f390c92ebfce83fcea8dc4d676d3ea4eb54ea2d066dd495b486bf589d67a Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Thu, 11 Mar 2010 12:13:21 +0000 Subject: [PATCH 1/7] Accepting request 34602 from home:michal-m:branches:Base:System Copy from home:michal-m:branches:Base:System/mdadm via accept of submit request 34602 revision 3. Request was accepted with message: Thanks! OBS-URL: https://build.opensuse.org/request/show/34602 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=15 --- 64-md-raid.rules | 35 +++++++++++++++++++++++++++++++++++ mdadm.changes | 21 +++++++++++++++++++++ mdadm.spec | 8 ++++++-- mkinitrd-setup.sh | 7 +++++-- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 64-md-raid.rules diff --git a/64-md-raid.rules b/64-md-raid.rules new file mode 100644 index 0000000..deccce4 --- /dev/null +++ b/64-md-raid.rules @@ -0,0 +1,35 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="block", GOTO="md_end" +ACTION!="add|change", GOTO="md_end" + +# import data from a raid member and activate it +ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" +# import data from a raid set +KERNEL!="md*", GOTO="md_end" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" +LABEL="md_ignore_state" + +IMPORT{program}="/sbin/mdadm --detail --export $tempnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" + +ENV{DEVTYPE}!="partition", GOTO="md_vol_id" +IMPORT{program}="/sbin/mdadm --detail --export %r/$parent" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +LABEL="md_vol_id" +IMPORT{program}="/sbin/blkid -o udev -p $tempnode" +OPTIONS+="link_priority=100" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +LABEL="md_end" diff --git a/mdadm.changes b/mdadm.changes index 322d019..5b5d3f3 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,4 +1,25 @@ ------------------------------------------------------------------- +Thu Mar 11 10:18:18 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Use blkid instead of vol_id. + +------------------------------------------------------------------- +Thu Mar 11 09:58:21 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Allow --incremental assembly if "AUTO -all" is + given in mdadm.conf (fate#307478). + +------------------------------------------------------------------- +Tue Mar 9 16:15:41 CET 2010 - mmarek@suse.cz + +- Install udev rules in /lib/udev/rules.d (fate#307478). + +------------------------------------------------------------------- +Mon Feb 22 15:14:03 CET 2010 - mmarek@suse.cz + +- mkinitrd-setup.sh: call mdadm --scan only if necessary + (bnc#581769). + Fri Jan 15 17:37:26 CET 2010 - mmarek@suse.cz - fix modprobe invocation in boot.md (bnc#565293). diff --git a/mdadm.spec b/mdadm.spec index 4f7ef6f..75c1ef1 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -37,6 +37,7 @@ Source3: mdadmd Source4: boot.md Source5: mkinitrd-setup.sh Source6: mkinitrd-boot.sh +Source7: 64-md-raid.rules %description Mdadm is a program that can be used to control Linux md devices. It is @@ -73,8 +74,8 @@ ln -sf ../../etc/init.d/mdadmd $RPM_BUILD_ROOT/%{_sbindir}/rcmdadmd rm -rf $RPM_BUILD_ROOT/var/run/mdadm mkdir -p $RPM_BUILD_ROOT/var/run ln -s mdadm $RPM_BUILD_ROOT/var/run/mdadm -# remove here, using the one in the udev package -rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/64-md-raid.rules +install -d $RPM_BUILD_ROOT/lib/udev/rules.d +install -m 644 %_sourcedir/64-md-raid.rules $RPM_BUILD_ROOT/lib/udev/rules.d %post [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup @@ -117,5 +118,8 @@ rm -rf $RPM_BUILD_ROOT %dir /lib/mkinitrd/scripts /lib/mkinitrd/scripts/setup-md.sh /lib/mkinitrd/scripts/boot-md.sh +%dir /lib/udev +%dir /lib/udev/rules.d +/lib/udev/rules.d/64-md-raid.rules %changelog diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh index 750508c..5f25c80 100644 --- a/mkinitrd-setup.sh +++ b/mkinitrd-setup.sh @@ -6,7 +6,7 @@ mdblockdev= # Full mdadm.conf generated by mdadm. # Contains all created MD RAIDs -mdadm_conf=$(mdadm --examine --brief --scan) +mdadm_conf= cont_list= md_devs= @@ -64,7 +64,10 @@ for bd in $blockdev ; do mdconf="$(mdadm -Db "$container")\\n$mdconf" ;; [0-9a-f]*[0-9a-f]) - mdconf="$(mdadm -Ebs | grep "UUID=$container")\\n$mdconf" + if test -z "$mdadm_conf"; then + mdadm_conf=$(mdadm --examine --brief --scan) + fi + mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" ;; *) echo "unrecognized container for $md_dev: $container" From dbd397ce47f560afe14de0fd9ed89cf5ba343ece2e559b8df6aff87cc4e8b0cf Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 18 Mar 2010 15:08:42 +0000 Subject: [PATCH 2/7] Updating link to change in openSUSE:Factory/mdadm revision 38.0 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=16d5e781e3048c6591156ba0dc5ce554 --- ready | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ready diff --git a/ready b/ready deleted file mode 100644 index 473a0f4..0000000 From a750dc78476bcec7b19951989a065c2bc0c178df6cd1eab73c0d4a0fafd0577f Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Thu, 18 Mar 2010 23:31:30 +0000 Subject: [PATCH 3/7] Accepting request 35265 from Base:System checked in (request 35265) OBS-URL: https://build.opensuse.org/request/show/35265 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=16 --- 64-md-raid.rules | 35 ----------------------------------- mdadm.changes | 21 --------------------- mdadm.spec | 8 ++------ mkinitrd-setup.sh | 7 ++----- 4 files changed, 4 insertions(+), 67 deletions(-) delete mode 100644 64-md-raid.rules diff --git a/64-md-raid.rules b/64-md-raid.rules deleted file mode 100644 index deccce4..0000000 --- a/64-md-raid.rules +++ /dev/null @@ -1,35 +0,0 @@ -# do not edit this file, it will be overwritten on update - -SUBSYSTEM!="block", GOTO="md_end" -ACTION!="add|change", GOTO="md_end" - -# import data from a raid member and activate it -ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" -# import data from a raid set -KERNEL!="md*", GOTO="md_end" - -# container devices have a metadata version of e.g. 'external:ddf' and -# never leave state 'inactive' -ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" -ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" -LABEL="md_ignore_state" - -IMPORT{program}="/sbin/mdadm --detail --export $tempnode" -ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" -ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" -ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" - -ENV{DEVTYPE}!="partition", GOTO="md_vol_id" -IMPORT{program}="/sbin/mdadm --detail --export %r/$parent" -ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" -ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" -ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" -ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" - -LABEL="md_vol_id" -IMPORT{program}="/sbin/blkid -o udev -p $tempnode" -OPTIONS+="link_priority=100" -ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" -ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" - -LABEL="md_end" diff --git a/mdadm.changes b/mdadm.changes index 5b5d3f3..322d019 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,25 +1,4 @@ ------------------------------------------------------------------- -Thu Mar 11 10:18:18 CET 2010 - mmarek@suse.cz - -- 64-md-raid.rules: Use blkid instead of vol_id. - -------------------------------------------------------------------- -Thu Mar 11 09:58:21 CET 2010 - mmarek@suse.cz - -- 64-md-raid.rules: Allow --incremental assembly if "AUTO -all" is - given in mdadm.conf (fate#307478). - -------------------------------------------------------------------- -Tue Mar 9 16:15:41 CET 2010 - mmarek@suse.cz - -- Install udev rules in /lib/udev/rules.d (fate#307478). - -------------------------------------------------------------------- -Mon Feb 22 15:14:03 CET 2010 - mmarek@suse.cz - -- mkinitrd-setup.sh: call mdadm --scan only if necessary - (bnc#581769). - Fri Jan 15 17:37:26 CET 2010 - mmarek@suse.cz - fix modprobe invocation in boot.md (bnc#565293). diff --git a/mdadm.spec b/mdadm.spec index 75c1ef1..4f7ef6f 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -37,7 +37,6 @@ Source3: mdadmd Source4: boot.md Source5: mkinitrd-setup.sh Source6: mkinitrd-boot.sh -Source7: 64-md-raid.rules %description Mdadm is a program that can be used to control Linux md devices. It is @@ -74,8 +73,8 @@ ln -sf ../../etc/init.d/mdadmd $RPM_BUILD_ROOT/%{_sbindir}/rcmdadmd rm -rf $RPM_BUILD_ROOT/var/run/mdadm mkdir -p $RPM_BUILD_ROOT/var/run ln -s mdadm $RPM_BUILD_ROOT/var/run/mdadm -install -d $RPM_BUILD_ROOT/lib/udev/rules.d -install -m 644 %_sourcedir/64-md-raid.rules $RPM_BUILD_ROOT/lib/udev/rules.d +# remove here, using the one in the udev package +rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/64-md-raid.rules %post [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup @@ -118,8 +117,5 @@ rm -rf $RPM_BUILD_ROOT %dir /lib/mkinitrd/scripts /lib/mkinitrd/scripts/setup-md.sh /lib/mkinitrd/scripts/boot-md.sh -%dir /lib/udev -%dir /lib/udev/rules.d -/lib/udev/rules.d/64-md-raid.rules %changelog diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh index 5f25c80..750508c 100644 --- a/mkinitrd-setup.sh +++ b/mkinitrd-setup.sh @@ -6,7 +6,7 @@ mdblockdev= # Full mdadm.conf generated by mdadm. # Contains all created MD RAIDs -mdadm_conf= +mdadm_conf=$(mdadm --examine --brief --scan) cont_list= md_devs= @@ -64,10 +64,7 @@ for bd in $blockdev ; do mdconf="$(mdadm -Db "$container")\\n$mdconf" ;; [0-9a-f]*[0-9a-f]) - if test -z "$mdadm_conf"; then - mdadm_conf=$(mdadm --examine --brief --scan) - fi - mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" + mdconf="$(mdadm -Ebs | grep "UUID=$container")\\n$mdconf" ;; *) echo "unrecognized container for $md_dev: $container" From 431b5a0d2ab11887488024fc928ce7c53ff2aeddc40a39876eafe4ef6d3a1e9b Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Tue, 23 Mar 2010 15:23:39 +0000 Subject: [PATCH 4/7] Accepting request 35548 from home:michal-m:branches:Base:System Copy from home:michal-m:branches:Base:System/mdadm via accept of submit request 35548 revision 3. Request was accepted with message: OBS-URL: https://build.opensuse.org/request/show/35548 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=17 --- 64-md-raid.rules | 35 +++++++++++++++++++++++++++++++++++ mdadm.changes | 28 ++++++++++++++++++++++++++++ mdadm.spec | 10 +++++++--- mkinitrd-boot.sh | 6 ++++++ mkinitrd-setup.sh | 13 ++++++++++--- ready | 0 6 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 64-md-raid.rules create mode 100644 ready diff --git a/64-md-raid.rules b/64-md-raid.rules new file mode 100644 index 0000000..deccce4 --- /dev/null +++ b/64-md-raid.rules @@ -0,0 +1,35 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="block", GOTO="md_end" +ACTION!="add|change", GOTO="md_end" + +# import data from a raid member and activate it +ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" +# import data from a raid set +KERNEL!="md*", GOTO="md_end" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" +LABEL="md_ignore_state" + +IMPORT{program}="/sbin/mdadm --detail --export $tempnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" + +ENV{DEVTYPE}!="partition", GOTO="md_vol_id" +IMPORT{program}="/sbin/mdadm --detail --export %r/$parent" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +LABEL="md_vol_id" +IMPORT{program}="/sbin/blkid -o udev -p $tempnode" +OPTIONS+="link_priority=100" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +LABEL="md_end" diff --git a/mdadm.changes b/mdadm.changes index 322d019..1924950 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,4 +1,32 @@ ------------------------------------------------------------------- +Tue Mar 23 14:49:38 CET 2010 - mmarek@suse.cz + +- mkinitrd-*.sh: Assemble md arrays even if the root= or resume= + option doesn't directly refer to md (bnc#589676, bnc#586837, + bnc#583424). + +------------------------------------------------------------------- +Thu Mar 11 10:18:18 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Use blkid instead of vol_id. + +------------------------------------------------------------------- +Thu Mar 11 09:58:21 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Allow --incremental assembly if "AUTO -all" is + given in mdadm.conf (fate#307478). + +------------------------------------------------------------------- +Tue Mar 9 16:15:41 CET 2010 - mmarek@suse.cz + +- Install udev rules in /lib/udev/rules.d (fate#307478). + +------------------------------------------------------------------- +Mon Feb 22 15:14:03 CET 2010 - mmarek@suse.cz + +- mkinitrd-setup.sh: call mdadm --scan only if necessary + (bnc#581769). + Fri Jan 15 17:37:26 CET 2010 - mmarek@suse.cz - fix modprobe invocation in boot.md (bnc#565293). diff --git a/mdadm.spec b/mdadm.spec index 4f7ef6f..2848587 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -20,7 +20,7 @@ Name: mdadm Version: 3.0.3 -Release: 2 +Release: 3 BuildRequires: sgmltool PreReq: %fillup_prereq %insserv_prereq Obsoletes: raidtools @@ -37,6 +37,7 @@ Source3: mdadmd Source4: boot.md Source5: mkinitrd-setup.sh Source6: mkinitrd-boot.sh +Source7: 64-md-raid.rules %description Mdadm is a program that can be used to control Linux md devices. It is @@ -73,8 +74,8 @@ ln -sf ../../etc/init.d/mdadmd $RPM_BUILD_ROOT/%{_sbindir}/rcmdadmd rm -rf $RPM_BUILD_ROOT/var/run/mdadm mkdir -p $RPM_BUILD_ROOT/var/run ln -s mdadm $RPM_BUILD_ROOT/var/run/mdadm -# remove here, using the one in the udev package -rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/64-md-raid.rules +install -d $RPM_BUILD_ROOT/lib/udev/rules.d +install -m 644 %_sourcedir/64-md-raid.rules $RPM_BUILD_ROOT/lib/udev/rules.d %post [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup @@ -117,5 +118,8 @@ rm -rf $RPM_BUILD_ROOT %dir /lib/mkinitrd/scripts /lib/mkinitrd/scripts/setup-md.sh /lib/mkinitrd/scripts/boot-md.sh +%dir /lib/udev +%dir /lib/udev/rules.d +/lib/udev/rules.d/64-md-raid.rules %changelog diff --git a/mkinitrd-boot.sh b/mkinitrd-boot.sh index a5c7019..5bfe0c5 100644 --- a/mkinitrd-boot.sh +++ b/mkinitrd-boot.sh @@ -42,6 +42,9 @@ md_assemble() { local dev=$1 mdconf container + if test -e "$dev"; then + return + fi case "$dev" in /dev/md[0-9]*p[0-9]*) dev=${dev%p[0-9]*} @@ -84,5 +87,8 @@ if [ -n "$need_mdadm" ]; then if [ -n "$md_dev" ] ; then md_assemble "$md_dev" fi + for dev in $md_devs; do + md_assemble "$dev" + done wait_for_events fi diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh index 750508c..e46c257 100644 --- a/mkinitrd-setup.sh +++ b/mkinitrd-setup.sh @@ -6,7 +6,7 @@ mdblockdev= # Full mdadm.conf generated by mdadm. # Contains all created MD RAIDs -mdadm_conf=$(mdadm --examine --brief --scan) +mdadm_conf= cont_list= md_devs= @@ -64,7 +64,10 @@ for bd in $blockdev ; do mdconf="$(mdadm -Db "$container")\\n$mdconf" ;; [0-9a-f]*[0-9a-f]) - mdconf="$(mdadm -Ebs | grep "UUID=$container")\\n$mdconf" + if test -z "$mdadm_conf"; then + mdadm_conf=$(mdadm --examine --brief --scan) + fi + mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" ;; *) echo "unrecognized container for $md_dev: $container" @@ -84,6 +87,10 @@ if [ -n "$root_md" ] ; then eval echo -e \"\$md_conf_$md\" >> $tmp_mnt/etc/mdadm.conf done fi +# Remember which arrays are needed for the root or swap device and assemble +# them all during boot. The root= or resume= option might not directly refer to +# the array. +md_devs=$(printf '/dev/%s ' $md_devs) save_var need_mdadm -save_var root_md +save_var md_devs diff --git a/ready b/ready new file mode 100644 index 0000000..473a0f4 From 254889ca3a6f74a5810cfea3e9b7a18456a18397951225e45ba979b6ff257bc7 Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Wed, 24 Mar 2010 16:43:18 +0000 Subject: [PATCH 5/7] Accepting request 35699 from home:michal-m:branches:Base:System Copy from home:michal-m:branches:Base:System/mdadm via accept of submit request 35699 revision 2. Request was accepted with message: Reviewed ok OBS-URL: https://build.opensuse.org/request/show/35699 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=18 --- 64-md-raid.rules | 2 +- mdadm.changes | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/64-md-raid.rules b/64-md-raid.rules index deccce4..a2fe2d0 100644 --- a/64-md-raid.rules +++ b/64-md-raid.rules @@ -4,7 +4,7 @@ SUBSYSTEM!="block", GOTO="md_end" ACTION!="add|change", GOTO="md_end" # import data from a raid member and activate it -ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" +ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="/bin/grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" # import data from a raid set KERNEL!="md*", GOTO="md_end" diff --git a/mdadm.changes b/mdadm.changes index 1924950..8922746 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Mar 24 17:37:27 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Use absolute path to grep, otherwise udev will + only search in /lib/udev (bnc#590832). + ------------------------------------------------------------------- Tue Mar 23 14:49:38 CET 2010 - mmarek@suse.cz From 8b39662d22ebc9530f5aa5037bb0acf1456e1ef46ded873398e5d05e9964b3a7 Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Fri, 26 Mar 2010 00:36:14 +0000 Subject: [PATCH 6/7] Accepting request 35700 from Base:System checked in (request 35700) OBS-URL: https://build.opensuse.org/request/show/35700 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=19 --- 64-md-raid.rules | 35 ----------------------------------- mdadm.changes | 34 ---------------------------------- mdadm.spec | 10 +++------- mkinitrd-boot.sh | 6 ------ mkinitrd-setup.sh | 13 +++---------- ready | 0 6 files changed, 6 insertions(+), 92 deletions(-) delete mode 100644 64-md-raid.rules delete mode 100644 ready diff --git a/64-md-raid.rules b/64-md-raid.rules deleted file mode 100644 index a2fe2d0..0000000 --- a/64-md-raid.rules +++ /dev/null @@ -1,35 +0,0 @@ -# do not edit this file, it will be overwritten on update - -SUBSYSTEM!="block", GOTO="md_end" -ACTION!="add|change", GOTO="md_end" - -# import data from a raid member and activate it -ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="/bin/grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" -# import data from a raid set -KERNEL!="md*", GOTO="md_end" - -# container devices have a metadata version of e.g. 'external:ddf' and -# never leave state 'inactive' -ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" -ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" -LABEL="md_ignore_state" - -IMPORT{program}="/sbin/mdadm --detail --export $tempnode" -ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" -ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" -ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" - -ENV{DEVTYPE}!="partition", GOTO="md_vol_id" -IMPORT{program}="/sbin/mdadm --detail --export %r/$parent" -ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" -ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" -ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" -ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" - -LABEL="md_vol_id" -IMPORT{program}="/sbin/blkid -o udev -p $tempnode" -OPTIONS+="link_priority=100" -ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" -ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" - -LABEL="md_end" diff --git a/mdadm.changes b/mdadm.changes index 8922746..322d019 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,38 +1,4 @@ ------------------------------------------------------------------- -Wed Mar 24 17:37:27 CET 2010 - mmarek@suse.cz - -- 64-md-raid.rules: Use absolute path to grep, otherwise udev will - only search in /lib/udev (bnc#590832). - -------------------------------------------------------------------- -Tue Mar 23 14:49:38 CET 2010 - mmarek@suse.cz - -- mkinitrd-*.sh: Assemble md arrays even if the root= or resume= - option doesn't directly refer to md (bnc#589676, bnc#586837, - bnc#583424). - -------------------------------------------------------------------- -Thu Mar 11 10:18:18 CET 2010 - mmarek@suse.cz - -- 64-md-raid.rules: Use blkid instead of vol_id. - -------------------------------------------------------------------- -Thu Mar 11 09:58:21 CET 2010 - mmarek@suse.cz - -- 64-md-raid.rules: Allow --incremental assembly if "AUTO -all" is - given in mdadm.conf (fate#307478). - -------------------------------------------------------------------- -Tue Mar 9 16:15:41 CET 2010 - mmarek@suse.cz - -- Install udev rules in /lib/udev/rules.d (fate#307478). - -------------------------------------------------------------------- -Mon Feb 22 15:14:03 CET 2010 - mmarek@suse.cz - -- mkinitrd-setup.sh: call mdadm --scan only if necessary - (bnc#581769). - Fri Jan 15 17:37:26 CET 2010 - mmarek@suse.cz - fix modprobe invocation in boot.md (bnc#565293). diff --git a/mdadm.spec b/mdadm.spec index 2848587..2b84225 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -20,7 +20,7 @@ Name: mdadm Version: 3.0.3 -Release: 3 +Release: 4 BuildRequires: sgmltool PreReq: %fillup_prereq %insserv_prereq Obsoletes: raidtools @@ -37,7 +37,6 @@ Source3: mdadmd Source4: boot.md Source5: mkinitrd-setup.sh Source6: mkinitrd-boot.sh -Source7: 64-md-raid.rules %description Mdadm is a program that can be used to control Linux md devices. It is @@ -74,8 +73,8 @@ ln -sf ../../etc/init.d/mdadmd $RPM_BUILD_ROOT/%{_sbindir}/rcmdadmd rm -rf $RPM_BUILD_ROOT/var/run/mdadm mkdir -p $RPM_BUILD_ROOT/var/run ln -s mdadm $RPM_BUILD_ROOT/var/run/mdadm -install -d $RPM_BUILD_ROOT/lib/udev/rules.d -install -m 644 %_sourcedir/64-md-raid.rules $RPM_BUILD_ROOT/lib/udev/rules.d +# remove here, using the one in the udev package +rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/64-md-raid.rules %post [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup @@ -118,8 +117,5 @@ rm -rf $RPM_BUILD_ROOT %dir /lib/mkinitrd/scripts /lib/mkinitrd/scripts/setup-md.sh /lib/mkinitrd/scripts/boot-md.sh -%dir /lib/udev -%dir /lib/udev/rules.d -/lib/udev/rules.d/64-md-raid.rules %changelog diff --git a/mkinitrd-boot.sh b/mkinitrd-boot.sh index 5bfe0c5..a5c7019 100644 --- a/mkinitrd-boot.sh +++ b/mkinitrd-boot.sh @@ -42,9 +42,6 @@ md_assemble() { local dev=$1 mdconf container - if test -e "$dev"; then - return - fi case "$dev" in /dev/md[0-9]*p[0-9]*) dev=${dev%p[0-9]*} @@ -87,8 +84,5 @@ if [ -n "$need_mdadm" ]; then if [ -n "$md_dev" ] ; then md_assemble "$md_dev" fi - for dev in $md_devs; do - md_assemble "$dev" - done wait_for_events fi diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh index e46c257..750508c 100644 --- a/mkinitrd-setup.sh +++ b/mkinitrd-setup.sh @@ -6,7 +6,7 @@ mdblockdev= # Full mdadm.conf generated by mdadm. # Contains all created MD RAIDs -mdadm_conf= +mdadm_conf=$(mdadm --examine --brief --scan) cont_list= md_devs= @@ -64,10 +64,7 @@ for bd in $blockdev ; do mdconf="$(mdadm -Db "$container")\\n$mdconf" ;; [0-9a-f]*[0-9a-f]) - if test -z "$mdadm_conf"; then - mdadm_conf=$(mdadm --examine --brief --scan) - fi - mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" + mdconf="$(mdadm -Ebs | grep "UUID=$container")\\n$mdconf" ;; *) echo "unrecognized container for $md_dev: $container" @@ -87,10 +84,6 @@ if [ -n "$root_md" ] ; then eval echo -e \"\$md_conf_$md\" >> $tmp_mnt/etc/mdadm.conf done fi -# Remember which arrays are needed for the root or swap device and assemble -# them all during boot. The root= or resume= option might not directly refer to -# the array. -md_devs=$(printf '/dev/%s ' $md_devs) save_var need_mdadm -save_var md_devs +save_var root_md diff --git a/ready b/ready deleted file mode 100644 index 473a0f4..0000000 From 2ee23aeee55ee5a9549eb792b06010c470db144b059cbdb373e0c8e052db5fb1 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Fri, 26 Mar 2010 00:36:15 +0000 Subject: [PATCH 7/7] Updating link to change in openSUSE:Factory/mdadm revision 41.0 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=90e9a90faa8ceb3c9e0776a3da560cc8 --- 64-md-raid.rules | 35 +++++++++++++++++++++++++++++++++++ mdadm.changes | 34 ++++++++++++++++++++++++++++++++++ mdadm.spec | 10 +++++++--- mkinitrd-boot.sh | 6 ++++++ mkinitrd-setup.sh | 13 ++++++++++--- 5 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 64-md-raid.rules diff --git a/64-md-raid.rules b/64-md-raid.rules new file mode 100644 index 0000000..a2fe2d0 --- /dev/null +++ b/64-md-raid.rules @@ -0,0 +1,35 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="block", GOTO="md_end" +ACTION!="add|change", GOTO="md_end" + +# import data from a raid member and activate it +ENV{ID_FS_TYPE}=="linux_raid_member", PROGRAM="/bin/grep -qs '^AUTO -all' /etc/mdadm.conf", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}" +# import data from a raid set +KERNEL!="md*", GOTO="md_end" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" +LABEL="md_ignore_state" + +IMPORT{program}="/sbin/mdadm --detail --export $tempnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" + +ENV{DEVTYPE}!="partition", GOTO="md_vol_id" +IMPORT{program}="/sbin/mdadm --detail --export %r/$parent" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +LABEL="md_vol_id" +IMPORT{program}="/sbin/blkid -o udev -p $tempnode" +OPTIONS+="link_priority=100" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +LABEL="md_end" diff --git a/mdadm.changes b/mdadm.changes index 322d019..8922746 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,4 +1,38 @@ ------------------------------------------------------------------- +Wed Mar 24 17:37:27 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Use absolute path to grep, otherwise udev will + only search in /lib/udev (bnc#590832). + +------------------------------------------------------------------- +Tue Mar 23 14:49:38 CET 2010 - mmarek@suse.cz + +- mkinitrd-*.sh: Assemble md arrays even if the root= or resume= + option doesn't directly refer to md (bnc#589676, bnc#586837, + bnc#583424). + +------------------------------------------------------------------- +Thu Mar 11 10:18:18 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Use blkid instead of vol_id. + +------------------------------------------------------------------- +Thu Mar 11 09:58:21 CET 2010 - mmarek@suse.cz + +- 64-md-raid.rules: Allow --incremental assembly if "AUTO -all" is + given in mdadm.conf (fate#307478). + +------------------------------------------------------------------- +Tue Mar 9 16:15:41 CET 2010 - mmarek@suse.cz + +- Install udev rules in /lib/udev/rules.d (fate#307478). + +------------------------------------------------------------------- +Mon Feb 22 15:14:03 CET 2010 - mmarek@suse.cz + +- mkinitrd-setup.sh: call mdadm --scan only if necessary + (bnc#581769). + Fri Jan 15 17:37:26 CET 2010 - mmarek@suse.cz - fix modprobe invocation in boot.md (bnc#565293). diff --git a/mdadm.spec b/mdadm.spec index 2b84225..c1d8186 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -20,7 +20,7 @@ Name: mdadm Version: 3.0.3 -Release: 4 +Release: 5 BuildRequires: sgmltool PreReq: %fillup_prereq %insserv_prereq Obsoletes: raidtools @@ -37,6 +37,7 @@ Source3: mdadmd Source4: boot.md Source5: mkinitrd-setup.sh Source6: mkinitrd-boot.sh +Source7: 64-md-raid.rules %description Mdadm is a program that can be used to control Linux md devices. It is @@ -73,8 +74,8 @@ ln -sf ../../etc/init.d/mdadmd $RPM_BUILD_ROOT/%{_sbindir}/rcmdadmd rm -rf $RPM_BUILD_ROOT/var/run/mdadm mkdir -p $RPM_BUILD_ROOT/var/run ln -s mdadm $RPM_BUILD_ROOT/var/run/mdadm -# remove here, using the one in the udev package -rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/64-md-raid.rules +install -d $RPM_BUILD_ROOT/lib/udev/rules.d +install -m 644 %_sourcedir/64-md-raid.rules $RPM_BUILD_ROOT/lib/udev/rules.d %post [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup @@ -117,5 +118,8 @@ rm -rf $RPM_BUILD_ROOT %dir /lib/mkinitrd/scripts /lib/mkinitrd/scripts/setup-md.sh /lib/mkinitrd/scripts/boot-md.sh +%dir /lib/udev +%dir /lib/udev/rules.d +/lib/udev/rules.d/64-md-raid.rules %changelog diff --git a/mkinitrd-boot.sh b/mkinitrd-boot.sh index a5c7019..5bfe0c5 100644 --- a/mkinitrd-boot.sh +++ b/mkinitrd-boot.sh @@ -42,6 +42,9 @@ md_assemble() { local dev=$1 mdconf container + if test -e "$dev"; then + return + fi case "$dev" in /dev/md[0-9]*p[0-9]*) dev=${dev%p[0-9]*} @@ -84,5 +87,8 @@ if [ -n "$need_mdadm" ]; then if [ -n "$md_dev" ] ; then md_assemble "$md_dev" fi + for dev in $md_devs; do + md_assemble "$dev" + done wait_for_events fi diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh index 750508c..e46c257 100644 --- a/mkinitrd-setup.sh +++ b/mkinitrd-setup.sh @@ -6,7 +6,7 @@ mdblockdev= # Full mdadm.conf generated by mdadm. # Contains all created MD RAIDs -mdadm_conf=$(mdadm --examine --brief --scan) +mdadm_conf= cont_list= md_devs= @@ -64,7 +64,10 @@ for bd in $blockdev ; do mdconf="$(mdadm -Db "$container")\\n$mdconf" ;; [0-9a-f]*[0-9a-f]) - mdconf="$(mdadm -Ebs | grep "UUID=$container")\\n$mdconf" + if test -z "$mdadm_conf"; then + mdadm_conf=$(mdadm --examine --brief --scan) + fi + mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" ;; *) echo "unrecognized container for $md_dev: $container" @@ -84,6 +87,10 @@ if [ -n "$root_md" ] ; then eval echo -e \"\$md_conf_$md\" >> $tmp_mnt/etc/mdadm.conf done fi +# Remember which arrays are needed for the root or swap device and assemble +# them all during boot. The root= or resume= option might not directly refer to +# the array. +md_devs=$(printf '/dev/%s ' $md_devs) save_var need_mdadm -save_var root_md +save_var md_devs