Einleitung

Auch wenn die Festplatten per S.M.A.R.T überwacht und der Zustand der ZFS Pools regelmäßig mit dem Periodic Skripten berichtet wird, fehlt noch eine sofortige Benachrichtigung für den Fall, das einer der ZFS Pools ein Problem bekommt. Sollte also irgendein ZFS spezifisches Problem auftreten, möchten wir das sofort wissen. Dazu gibt es ein kleines Skript und Erweiterung der Monit Konfiguration.

NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.

Letzte Aktualisierung:

  • 24.11.2024: Initiales Dokument

Voraussetzungen

ZFS

Für dieses Skript habe ich mich von folgenden Quellen inspirieren lassen

Das daraus entstandene Skript ist eine sehr schlanke Abwandlung mit folgenden Änderungen:

  • Dynamisiert, eine Schleife für alle ZFS Pools und Aktionen
  • Scrub und Trim wurden entfernt, da diese bereits mit den Periodic Skripten erledigt werden
  • E-Mail versendet Monit

Ale erstes wird mit ee /usr/local/etc/monitrc ganz unten folgender zusätzlicher check hinzugefügt:

    check program zfs_health with path "/root/zfs_health_check.sh"
        if status != 0 then alert

Das dort hinterlegte Skript wird mit ee /root/zfs_health_check.sh und folgendem Inhalt angelegt:

#! /bin/sh
/usr/bin/printf "%s\n\n" "$(/sbin/zfs list -o name,avail,used -d 0)"
/usr/bin/printf "%s\n\n" "$(/sbin/zpool list -o name,size,allocated,free,capacity,health)"
LISTPOOLS="$(/sbin/zpool list -H -o name)"
for POOL in ${LISTPOOLS}; do
  HEALTH="$(/sbin/zpool list -H -o health ${POOL})"
  ERROR="$(/sbin/zpool status ${POOL} | grep errors: | awk '{print $2}')"
  if [ ${HEALTH} != ONLINE ]; then
    exit 1
  fi
  if [ ${ERROR} != "No" ]; then
    exit 1
  fi
done

Abschließend noch mit chmod +x /root/zfs_health_check.sh ausführbar machen und Monit mit service monit restart neu starten. Bei einem Fehler sendet Monit dann brav eine E-Mail mit den Details zum Fehler und betroffenem ZFS Pool. Das Skript kann auch manuell ausgeführt werden:

Test

  • Dem fakepool mit zpool offline fakepool /poolfiles/file1 eine Festplatte entfernen:
    • Monit verschickt daraufhin einen Alarm per E-Mail
  • Dem fakepool mit zpool online fakepool /poolfiles/file1 die Festplatte wieder hinzufügen:
    • Monit verschickt daraufhin eine Entwarnung per E-Mail

Konsole

Voilá