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

FunktionSchwellwertAktion bei Überschreitung
RAID DegradationWarnung
SMART Health!= PASSEDWarnung
SSD-Verschleiß≥ 80 %Warnung
Temperatur≥ 70 °CWarnung

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