]> git.ipfire.org Git - thirdparty/dracut-ng.git/commitdiff
fix(mdraid): try to assemble the missing raid device
authorLidong Zhong <lidong.zhong@suse.com>
Mon, 24 Jun 2024 01:57:44 +0000 (09:57 +0800)
committerLaszlo Gombos <laszlo.gombos@gmail.com>
Mon, 24 Jun 2024 22:04:46 +0000 (18:04 -0400)
If some raid devices with specified UUIDs fail to be assembled in
initrd, we will try to assemble them again in this script to avoid
system falling into emergency mode. This patch is created because we can
offen see mdadm command failure during boot because of timing issue
introduced between mdadm and udevd.

modules.d/90mdraid/mdraid_start.sh

index d8c5de2536f91bb70b80673ba42feddf61325a1a..2645f1c43c2a2176244239f88877a3f73fbab084 100755 (executable)
@@ -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