#!/bin/bash # kreknin array monitor — md0/md1 (system boot mirror) + md3 (data). Run with sudo via Monitor. # Completion signal: sync_action idle AND mdadm Active Devices == Total Devices (works for 16-slot template too). arrays="md0 md1 md3" declare -A prev_state declare -A prev_pct declare -A crc0 while true; do for a in $arrays; do [ -e "/sys/block/$a/md/sync_action" ] || continue act=$(cat "/sys/block/$a/md/sync_action" 2>/dev/null) active=$(mdadm --detail "/dev/$a" 2>/dev/null | awk '/Active Devices/{print $3; exit}') total=$(mdadm --detail "/dev/$a" 2>/dev/null | awk '/Total Devices/{print $3; exit}') brk=$(sed -n "/^$a :/,/^$/p" /proc/mdstat | grep blocks | grep -o '\[[^]]*\]' | tail -1) sig="$act|$brk|a=$active/t=$total" if [ "${prev_state[$a]}" != "$sig" ]; then echo "[$a-state] $sig" prev_state[$a]="$sig" fi if [ "$act" = "idle" ] && [ "$active" = "$total" ] && [ "${prev_state[$a]}" != "DONE" ]; then echo "[$a] COMPLETE healthy active=$active/$total $brk" prev_state[$a]="DONE" fi done pct=$(cat /sys/block/md3/md/sync_completed 2>/dev/null | awk -F/ '$2>0{printf "%d", $1*100/$2}') m=$(( (pct+4)/5*5 )) if [ "$m" -gt "${prev_pct[md3]:-0}" ]; then echo "[md3] $pct%"; prev_pct[md3]="$m"; fi for d in sda sdb sdc; do crc=$(smartctl -d sat -A /dev/$d 2>/dev/null | awk '/UDMA_CRC/{print $10; exit}') [ -n "$crc" ] && { [ -n "${crc0[$d]}" ] && [ "$crc" -gt "${crc0[$d]}" ] && echo "[CRC-GROW] $d ${crc0[$d]}->$crc"; crc0[$d]=$crc; } done sleep 120 done