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.
unifi-restore
Dustin 2025-08-05 10:31:33 -05:00
parent dcef009353
commit 6bc0475e89
1 changed files with 24 additions and 3 deletions

View File

@ -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