diff options
Diffstat (limited to 'modules.d/90mdraid')
-rw-r--r-- | modules.d/90mdraid/59-persistent-storage-md.rules | 2 | ||||
-rwxr-xr-x | modules.d/90mdraid/mdraid_start.sh | 14 | ||||
-rwxr-xr-x | modules.d/90mdraid/parse-md.sh | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/modules.d/90mdraid/59-persistent-storage-md.rules b/modules.d/90mdraid/59-persistent-storage-md.rules index 0d745cc..9e29135 100644 --- a/modules.d/90mdraid/59-persistent-storage-md.rules +++ b/modules.d/90mdraid/59-persistent-storage-md.rules @@ -16,7 +16,7 @@ ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" LABEL="md_ignore_state" -IMPORT{program}="/sbin/mdadm --detail --export $tempnode" +IMPORT{program}="/sbin/mdadm --detail --export $devnode" IMPORT{builtin}="blkid" OPTIONS+="link_priority=100" OPTIONS+="watch" diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh index d8c5de2..2645f1c 100755 --- a/modules.d/90mdraid/mdraid_start.sh +++ b/modules.d/90mdraid/mdraid_start.sh @@ -32,11 +32,14 @@ _md_force_run() { local _md local _UUID local _MD_UUID + local _LEFT_UUID + local _uuid _MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=) [ -n "$_MD_UUID" ] || getargbool 0 rd.auto || return if [ -n "$_MD_UUID" ]; then + _LEFT_UUID=$(str_replace "$_MD_UUID" "-" ":") _MD_UUID=$(str_replace "$_MD_UUID" "-" "") _MD_UUID=$(str_replace "$_MD_UUID" ":" "") @@ -51,6 +54,9 @@ _md_force_run() { ) [ -z "$_UUID" ] && continue + # remove the UUID already assembled from the list + _LEFT_UUID=$(str_replace "$_LEFT_UUID" "$_UUID" "") + _UUID=$(str_replace "$_UUID" ":" "") # check if we should handle this device @@ -65,6 +71,14 @@ _md_force_run() { _md_start "${_md}" done fi + + # try to assemble all the left md devices that should be assembled + # probably failed because of timing issue in the first beginning + if [ -n "$_LEFT_UUID" ]; then + for _uuid in ${_LEFT_UUID}; do + mdadm --assemble --scan --uuid="$_uuid" + done + fi } _md_force_run diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh index 4d3a6b2..adc8aa6 100755 --- a/modules.d/90mdraid/parse-md.sh +++ b/modules.d/90mdraid/parse-md.sh @@ -21,7 +21,7 @@ else printf 'ENV{ID_FS_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr "$uuid" 1 8)-$(expr substr "$uuid" 9 4)-$(expr substr "$uuid" 13 4)-$(expr substr "$uuid" 17 4)-$(expr substr "$uuid" 21 12)" done # shellcheck disable=SC2016 - printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n' + printf 'IMPORT{program}="/sbin/mdadm --examine --export $devnode"\n' for uuid in $MD_UUID; do printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr "$uuid" 1 8):$(expr substr "$uuid" 9 8):$(expr substr "$uuid" 17 8):$(expr substr "$uuid" 25 8)" done |