- cron restored vds-kzntsv 05:00 + books-vds 06:00; manual runs VERIFIED on kreknin (vds-kzntsv 66G / books-vds 15G, latest->08-10, 7 snaps each) - books-vds was stale since 08-05 (rsync fails, no alternate trigger); stale ES snapshot daily-2026-08-10 removed - md3 rebuild restarted from 0 after power-cut (progress not checkpointed); md0/md1 all 4 disks green - add kreknin_rebuild_mon.sh array monitor (md0/md1/md3 + CRC) Co-Authored-By: Claude <noreply@anthropic.com>
34 lines
1.5 KiB
Bash
34 lines
1.5 KiB
Bash
#!/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
|