"(b) grab upstream mdadm.udev rules and drop them into /etc/udev/rules.d/ with same file name as the one in /lib/udev/rules.d/"
Taking upstream as git://neil.brown.name/mdadm, it contains two udev rules. Combining them in a way which matches the Ubuntu ones, I get the differences pasted below.
Some of this seems reasonable, but what about the change from $tempnode to $devnode? Would it be better just to change the ENV{ID_FS_TYPE} line and leave everything else alone?
# handle potential components of arrays (the ones supported by md)
-ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="md_inc"
+ENV{ID_FS_TYPE}=="ddf_raid_member|isw_raid_member|linux_raid_member", GOTO="md_inc"
GOTO="md_inc_skip"
LABEL="md_inc"
# remember you can limit what gets auto/incrementally assembled by
# mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY'
-ACTION=="add", RUN+="/sbin/mdadm --incremental $tempnode"
+ACTION=="add", RUN+="/sbin/mdadm --incremental $devnode --offroot"
ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If $name"
@@ -27,11 +27,11 @@
# 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"
-TEST!="md/array_state", GOTO="md_end"
-ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
+TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end"
+ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end"
LABEL="md_ignore_state"
In comment #9, xnox says:
"(b) grab upstream mdadm.udev rules and drop them into /etc/udev/rules.d/ with same file name as the one in /lib/udev/rules.d/"
Taking upstream as git://neil. brown.name/ mdadm, it contains two udev rules. Combining them in a way which matches the Ubuntu ones, I get the differences pasted below.
Some of this seems reasonable, but what about the change from $tempnode to $devnode? Would it be better just to change the ENV{ID_FS_TYPE} line and leave everything else alone?
A google suggests that only very recent versions of udev have $devnode: bugs.funtoo. org/browse/ FL-720
http://
Regards,
Brian.
--- udev-orig 2013-10-08 14:42:32.504173249 +0100 ="block" , GOTO="md_end"
+++ udev-combined 2013-10-08 14:54:23.958998034 +0100
@@ -3,14 +3,14 @@
SUBSYSTEM!
# handle potential components of arrays (the ones supported by md) FS_TYPE} =="linux_ raid_member" , GOTO="md_inc" FS_TYPE} =="ddf_ raid_member| isw_raid_ member| linux_raid_ member" , GOTO="md_inc"
-ENV{ID_
+ENV{ID_
GOTO="md_inc_skip"
LABEL="md_inc"
# remember you can limit what gets auto/incrementally assembled by
# mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY'
-ACTION=="add", RUN+="/sbin/mdadm --incremental $tempnode"
+ACTION=="add", RUN+="/sbin/mdadm --incremental $devnode --offroot"
ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If $name"
@@ -27,11 +27,11 @@ metadata_ version} =="external: [A-Za-z] *", ATTR{md/ array_state} =="inactive" , GOTO="md_ ignore_ state" "md/array_ state", GOTO="md_end" array_state} =="|clear| inactive" , GOTO="md_end" "md/array_ state", ENV{SYSTEMD_ READY}= "0", GOTO="md_end" array_state} =="|clear| inactive" , ENV{SYSTEMD_ READY}= "0", GOTO="md_end" "md_ignore_ state"
# container devices have a metadata version of e.g. 'external:ddf' and
# never leave state 'inactive'
ATTR{md/
-TEST!=
-ATTR{md/
+TEST!=
+ATTR{md/
LABEL=
-IMPORT{ program} ="/sbin/ mdadm --detail --export $tempnode" program} ="/sbin/ mdadm --detail --export $devnode" =="disk" , ENV{MD_NAME}=="?*", SYMLINK+ ="disk/ by-id/md- name-$env{ MD_NAME} ", OPTIONS+ ="string_ escape= replace" =="disk" , ENV{MD_UUID}=="?*", SYMLINK+ ="disk/ by-id/md- uuid-$env{ MD_UUID} " =="disk" , ENV{MD_ DEVNAME} =="?*", SYMLINK+ ="md/$env{ MD_DEVNAME} " =="partition" , ENV{MD_ DEVNAME} =="*[^0- 9]", SYMLINK+ ="md/$env{ MD_DEVNAME} %n" =="partition" , ENV{MD_ DEVNAME} =="*[0- 9]", SYMLINK+ ="md/$env{ MD_DEVNAME} p%n"
+IMPORT{
ENV{DEVTYPE}
ENV{DEVTYPE}
ENV{DEVTYPE}
@@ -40,7 +40,7 @@
ENV{DEVTYPE}
ENV{DEVTYPE}
-IMPORT{ program} ="/sbin/ blkid -o udev -p $tempnode" builtin} ="blkid" ="link_ priority= 100" FS_USAGE} =="filesystem| other|crypto" , ENV{ID_ FS_UUID_ ENC}==" ?*", SYMLINK+ ="disk/ by-uuid/ $env{ID_ FS_UUID_ ENC}"
+IMPORT{
OPTIONS+
OPTIONS+="watch"
ENV{ID_