RAID & NVMe Monitoring
Dieses Bash-Script bietet eine einfache und effektive Möglichkeit zur Überwachung von NVMe- und RAID-Komponenten auf Debian-Systemen. Es richtet sich speziell an Nutzer dedizierter Hardware und ermöglicht eine regelmäßige Kontrolle des Systemzustands, um frühzeitig auf mögliche Ausfälle reagieren zu können. Die Lösung ist leichtgewichtig, schnell implementierbar und ideal für Admins, die auf zuverlässige Laufwerksüberwachung setzen.
Voraussetzungen (bitte vorher installieren, falls nicht vorhanden):
sudo apt install smartmontools mdadm mailutils
Ich nenne das Script in diesem Fall raid_ssd_monitor.sh
#!/bin/bash
# Konfiguration
EMAIL="deine.email@example.com"
HOSTNAME=$(hostname)
TMPFILE=$(mktemp)
ISSUES=()
# Schwellwerte
WEAR_THRESHOLD=80 # Abnutzung in %
TEMP_THRESHOLD=70 # Temperatur in °C
# RAID-Überprüfung
echo "=== RAID Status ===" >> "$TMPFILE"
RAID_STATUS=$(mdadm --detail /dev/md0) # ggf. /dev/mdX anpassen
echo "$RAID_STATUS" >> "$TMPFILE"
if echo "$RAID_STATUS" | grep -qi "degraded"; then
ISSUE_MSG="[WARNUNG] RAID ist degradiert!"
echo "$ISSUE_MSG" >> "$TMPFILE"
ISSUES+=("$ISSUE_MSG")
fi
# NVMe SSD prüfen
echo "" >> "$TMPFILE"
echo "=== NVMe SSD SMART Status ===" >> "$TMPFILE"
for disk in /dev/nvme[0-9]; do
echo "--- $disk ---" >> "$TMPFILE"
HEALTH=$(smartctl -H -d nvme "$disk" 2>/dev/null)
echo "$HEALTH" >> "$TMPFILE"
if echo "$HEALTH" | grep -qv "PASSED"; then
ISSUE_MSG="[WARNUNG] $disk meldet schlechten SMART-Zustand!"
echo "$ISSUE_MSG" >> "$TMPFILE"
ISSUES+=("$ISSUE_MSG")
fi
# Verschleiß prüfen
USED=$(smartctl -a -d nvme "$disk" 2>/dev/null | grep -i "Percentage Used" | awk '{print $NF}' | tr -d '%')
if [[ "$USED" =~ ^[0-9]+$ ]] && [ "$USED" -ge "$WEAR_THRESHOLD" ]; then
ISSUE_MSG="[WARNUNG] $disk hat $USED% Verschleiß erreicht (Grenze: ${WEAR_THRESHOLD}%)"
echo "$ISSUE_MSG" >> "$TMPFILE"
ISSUES+=("$ISSUE_MSG")
fi
# Temperatur prüfen
TEMP=$(smartctl -a -d nvme "$disk" 2>/dev/null | grep -i "Temperature:" | grep -o '[0-9]\+ Celsius' | awk '{print $1}')
if [[ "$TEMP" =~ ^[0-9]+$ ]] && [ "$TEMP" -ge "$TEMP_THRESHOLD" ]; then
ISSUE_MSG="[WARNUNG] $disk ist $TEMP°C heiß (Grenze: ${TEMP_THRESHOLD}°C)"
echo "$ISSUE_MSG" >> "$TMPFILE"
ISSUES+=("$ISSUE_MSG")
fi
# Weitere Infos anhängen
smartctl -a -d nvme "$disk" 2>/dev/null | grep -E "Percentage|Wear_Leveling|Data_Units|Media|Temperature" >> "$TMPFILE"
done
# E-Mail senden, falls Probleme erkannt
if [[ ${#ISSUES[@]} -gt 0 ]]; then
{
echo "Es wurden Probleme erkannt auf Host $HOSTNAME:"
echo ""
for i in "${ISSUES[@]}"; do
echo "$i"
done
echo ""
echo "Vollständiger Statusbericht:"
echo ""
cat "$TMPFILE"
} | mail -s "[$HOSTNAME] WARNUNG: RAID/NVMe Problem erkannt" "$EMAIL"
fi
rm "$TMPFILE"
Das Script meldet sich in den folgenden Situationen per Mail
Funktion | Schwellwert | Aktion bei Überschreitung |
---|---|---|
RAID Degradation | – | Warnung |
SMART Health | != PASSED | Warnung |
SSD-Verschleiß | ≥ 80 % | Warnung |
Temperatur | ≥ 70 °C | Warnung |
Script ausführbar machen und per Cron laufen
chmod +x /pfad/zum/skript/raid_ssd_monitor.sh
crontab -e
0 6 * * * /pfad/zum/skript/raid_ssd_monitor.sh