diff options
Diffstat (limited to 'udev-md-raid-assembly.rules')
-rw-r--r-- | udev-md-raid-assembly.rules | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/udev-md-raid-assembly.rules b/udev-md-raid-assembly.rules index d668cdd..d4a7f0a 100644 --- a/udev-md-raid-assembly.rules +++ b/udev-md-raid-assembly.rules @@ -11,6 +11,11 @@ SUBSYSTEM!="block", GOTO="md_inc_end" ENV{SYSTEMD_READY}=="0", GOTO="md_inc_end" # handle potential components of arrays (the ones supported by md) +# For member devices which are md/dm devices, we don't need to +# handle add event. Because md/dm devices need to do some init jobs. +# Then the change event happens. +# When adding md/dm devices, ID_FS_TYPE can only be linux_raid_member +# after change event happens. ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="md_inc" # "noiswmd" on kernel command line stops mdadm from handling @@ -28,10 +33,14 @@ GOTO="md_inc_end" LABEL="md_inc" +# Bare disks are ready when add event happens, the raid can be assembled. +ACTION=="change", KERNEL!="dm-*|md*", GOTO="md_inc_end" + # remember you can limit what gets auto/incrementally assembled by # mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY' -ACTION=="add|change", IMPORT{program}="BINDIR/mdadm --incremental --export $devnode --offroot $env{DEVLINKS}" -ACTION=="add|change", ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer" +ACTION!="remove", IMPORT{program}="BINDIR/mdadm --incremental --export $devnode --offroot $env{DEVLINKS}" +ACTION!="remove", ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer" + ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="BINDIR/mdadm -If $name --path $env{ID_PATH}" ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="BINDIR/mdadm -If $name" |