From 4a32eb94f2965bedfff2b10b844ba9cd21185a5e Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Wed, 30 Jun 2021 21:27:08 +0200 Subject: print-status: pin raid positions --- print-status | 51 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/print-status b/print-status index 1a7a004..d60d58d 100755 --- a/print-status +++ b/print-status @@ -2,6 +2,39 @@ . /etc/print-status.conf +pin_md() { + while read -r md rest; do + md_new="${md}" + if [ -z "${md_new##*:}" ]; then + md_new="${md_new%:}" + fi; + if [ -z "${md_new%%md*}" ] && [ -b "/dev/${md_new}" ]; then + uuid=$( + mdadm --detail "/dev/${md_new}" \ + | awk '$1 == "UUID" {print $3}' + ); + if [ -n "${uuid}" ]; then + md_new=$( + sed ' + / UUID='"${uuid}"'$/ !d + s@^ARRAY\s\+/dev/\(md[0-9]\+\)\s\+.*$@\1@ + t + d + ' /etc/mdadm.conf + ) + fi + fi + if [ -z "${md_new}" ]; then + md_new="${md%:}" + fi + printf '%s %s' "${md_new}" "${md}" + if [ -n "${rest}" ]; then + printf ' %s' "${rest}" + fi + printf '\n' + done +} + { find /dev/mapper -mindepth 1 -maxdepth 1 \( -name 'leg*' -o -name 'foot*' \) -printf '%f\n' \ | sort -u \ @@ -16,24 +49,26 @@ p } ' /proc/mdstat \ - | sed 's@^md\([0-9]\+\):@\1 \0@' \ + | pin_md \ + | sed 's@^md\([0-9]\+\) @\1 \0@' \ | sort -k1n,1 \ - | sed 's@^\S\+ @@' + | sed 's@^\S\+ \(\S\+\) \S\+ @\1: @' find /sys/block/ -mindepth 1 -maxdepth 1 -name 'md*' -printf '%f\n' \ + | pin_md \ | sed 's@^md@@' \ | sort -n \ - | while read -r md; do + | while read -r md_p md; do printf 'md%s: %s' \ - "${md}" \ + "${md_p}" \ "$( sed ' - s/^clean$/active/ - ' "/sys/block/md${md}/md/array_state" \ + s/^clean$\|^write-pending$/active/ + ' "/sys/block/${md}/md/array_state" \ | tr -d '\n' )" - if [ -f "/sys/block/md${md}/md/mismatch_cnt" ]; then + if [ -f "/sys/block/${md}/md/mismatch_cnt" ]; then printf ' ' - cat "/sys/block/md${md}/md/mismatch_cnt" + cat "/sys/block/${md}/md/mismatch_cnt" else printf '\n' fi -- cgit v1.2.3