#!/bin/bash
# 실습 #17 ④ — mdadm 모니터링 + 메일 알림 + 정기 sync check
# - mdmonitor.service: 디스크 fail / degrade / spare 활성화 시 알림
# - sync_action=check: 패리티 vs 데이터 일치 정기 점검 (운영 표준은 월 1회)
# - mdadm.conf 에 MAILADDR 등록 → 시스템 sendmail 통해 발송
set -e

DIR="$(cd "$(dirname "$0")" && pwd)"
CFG="$DIR/configs/04_mdadm.conf"

# 1) 기존 mdadm.conf 백업
sudo cp /etc/mdadm/mdadm.conf "/etc/mdadm/mdadm.conf.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null || true

# 2) drop-in 형태로 추가 (DEVICE / MAILADDR / MAILFROM)
if ! sudo grep -q "^MAILADDR ops@example" /etc/mdadm/mdadm.conf 2>/dev/null; then
    sudo tee -a /etc/mdadm/mdadm.conf < "$CFG" >/dev/null
fi

# 3) 현재 RAID 어레이가 있으면 ARRAY 라인 자동 생성
if [ -e /proc/mdstat ] && grep -q "active" /proc/mdstat 2>/dev/null; then
    echo "=== 활성 RAID 어레이 추가 ==="
    sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
else
    echo "→ 활성 어레이 없음 — ARRAY 라인 추가 건너뜀."
fi

# 4) initramfs 갱신 (재부팅 시 어레이 자동 인식)
sudo update-initramfs -u

# 5) 모니터 서비스 시작
sudo systemctl enable --now mdmonitor.service 2>/dev/null || \
    sudo systemctl enable --now mdadm.service 2>/dev/null || true
sudo systemctl status mdmonitor.service --no-pager 2>/dev/null | head -10 || true

# 6) 정기 sync check — Debian/Ubuntu 는 /etc/cron.d/mdadm 이 매월 일요일 자동 점검
echo
echo "=== 자동 점검 cron ==="
ls -l /etc/cron.d/mdadm 2>/dev/null || echo "(없음 — Ubuntu 22.04 는 보통 설치되어 있음)"

# 7) 수동 sync check 트리거 방법
cat <<'EOF'

=== 수동 점검 (md0 의 경우) ===
  echo check | sudo tee /sys/block/md0/md/sync_action
  cat /proc/mdstat                  # check 진행률
  cat /sys/block/md0/md/mismatch_cnt  # 0 이면 OK, 양수면 sync 한 번 더

=== 알림 테스트 ===
  sudo mdadm --monitor --scan --test --oneshot
  # MAILADDR 으로 테스트 메일 발송 (mta 설정되어 있어야 도달)

=== 추가 모니터링 ===
  - SMART  : smartctl -a /dev/sdb  (디스크 자체 헬스)
  - Prom   : node_exporter 의 node_md_disks_required 메트릭
  - 이메일 : postfix/msmtp 등 sendmail 호환 MTA 필요
EOF
