From 6bc0475e8916b360e1f39f28f1eedcd0148298e9 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Tue, 5 Aug 2025 10:31:33 -0500 Subject: [PATCH] raid-array: Fix md re-add automation Recent versions of `mdadm` stopped accepting `/dev/disk/by-id` symlinks as the MD device: > mdadm: Value "/dev/disk/by-id/md-name-backup5" cannot be set as devname. Reason: Cannot be started from '/' or '<'. To work around this, we need a script to resolve the symlink and pass the real block device name. --- raid-array.yml | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/raid-array.yml b/raid-array.yml index 993510e..07feb34 100644 --- a/raid-array.yml +++ b/raid-array.yml @@ -29,14 +29,35 @@ tags: - mdadm - mdadm-create + - name: ensure md-auto-readd script is installed + copy: + content: |+ + #!/bin/sh + + main() { + md_dev=$(readlink -e /dev/disk/by-id/md-name-"$2") + if [ -z "${md_dev}" ]; then + printf 'Could not find block device for MD raid %s\n' "$2" >&2 + exit 1 + fi + exec mdadm --re-add "${md_dev}" "$1" + } + + main "$@" 2>&1 | logger + dest: /usr/local/libexec/md-auto-readd + owner: root + group: root + mode: u=rwx,go=rx + tags: + - script - name: ensure raid auto re-add udev rule exists copy: content: >+ - ENV{ID_FS_LABEL}=="{{ md_name }}", + ACTION=="add", ENV{ID_FS_TYPE}=="linux_raid_member", ENV{ID_FS_USAGE}=="raid", - RUN+="/usr/sbin/mdadm --re-add /dev/disk/by-id/md-name-{{ md_name }} $devnode" - dest: /etc/udev/rules.d/80-{{ md_name }}.rules + RUN+="/usr/local/libexec/md-auto-readd $devnode $env{ID_FS_LABEL}" + dest: /etc/udev/rules.d/80-md-auto-readd.rules mode: u=rw,go=r owner: root group: root