summaryrefslogtreecommitdiff
path: root/print-status
diff options
context:
space:
mode:
Diffstat (limited to 'print-status')
-rwxr-xr-xprint-status51
1 files 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