Computer Eisenbahn Bilder
Impressum
Scripte
Netzwerk
Software
Tips

RaidCheck
Dieses Script überprüft ein Raidsystem durch auslesen des Files /proc/mdstat. Ist das Raissystem gestört, erfolgt eine Nachricht per Mail.

#!/bin/bash
#
# Check Raidsystem
# Version 1.0
# Author: Thomas (Major Tom) Bauer <major-tom@tkb-net.org>
# http://www.tkb-net.org
#

cd /etc/cron.sonstige

# Raid-System check
cat /proc/mdstat | grep "md0" -A1 | grep "UUUU" >mdstat_md0

# If Raid ok (Filesize mdstat_md0 > 0) then ok, else write status to file mdstatus
if test -s mdstat_md0
then echo md0 ok
else echo md0 failed >mdstatus
cat /proc/mdstat | grep "md0" -A1 >>mdstatus
fi

# If a Raid failed (Filesize mdstatus > 0) then send a mail
if test -s mdstatus
then mail admin@meine-domain.org -r admin@meine-domain.org -s Raidcheck-Server <mdstatus
rm mdstatus
fi

# Delete Tempfile
rm mdstat_md0

Erläuterung

Der aktuelle Status eines Raidsystems ist in der Datei /proc/mdstat enthalten. Mit cat wird diese Datei ausgegeben und über die Pipe | an den Befehl grep übergeben. Der Befehl grep filtet zuerst alle Zeilen mit dem Inhalt "md0" (Bezeichung meines Raidsystems, auf anderen System oder bei mehreren Raidsystemen ist/sind auch md1, md2 usw. möglich) und übergibt diese und die darauffolgende Zeile (Schalter -A1) als Ergebnis wieder über eine Pipe | an einen weiteren Befehl grep. Dieser prüft nun, ob in der Ausgabe der Text "UUUU" enthalten ist und schreibt das Ergebnis in die Datei "mdstat_md0". Da ich ein Raid5 aus vier Festplatten betreibe, muss im fehlerfreien Betrieb in der Datei /proc/mdstat UUUU stehen. Dabei steht jedes U für eine Festplatte. Ist eine Platte ausgefallen wird das U durch _ ersetzt, also z.B. UU_U. Bei Systemen mit weniger Platten, z.B. Raid1 sucht man natürlich nur nach UU.
Als nächster Schritt wird mit if test -s geprüft, ob die Datei "mdstat_md0" vorhanden und grösser als 0 ist (in diesem Fall ist alles in Ordnung).
Falls nicht, wird in die Datei "mdstatus" geschrieben, welches Raidsystem gestört ist und die entsprechenden Zeilen aus der Datei /proc/mdstat werden mit angefügt.
Am Ende wird mit if test -s überprüft, ob die Datei "mdstatus" vorhanden und größer als 0Byte ist (Ein Raidsystem gestört). Ist das der Fall, sendet das Script mit dem Befehl mail den Inhalt der Datei "mdstatus" an den gewünschten Empfänger. Der Schalter -s setzt dabei den Betreff der Mail (in diesem Fall "Raidcheck-Server"), der Schalter -r setzt eine Absender-Mailadresse (nur nötig, wenn man die Mail über einen externen Mailserver leiten muss, sonst wird die Mail durch die dort vorhandenen Spam-Filter aufgehalten.).
Die Datei "mdstatus" wird gelöscht.
Zum Schluss wird die Datei "mdstat_md0" noch gelöscht, da sie jetzt nicht mehr benötigt wird.