Kurztipp: smartd mit Desktop-Benachrichtigungen ausstatten
Marvin Gülker · 17.11.2019
Der Beitrag erklärt, wie smartd(8) so konfiguriert werden kann, daß statt E-Mails Desktop-Benachrichtigungen erzeugt werden.
Kategorien: Software
Die Smartmontools sind eine Programmsammlung zur Überprüfung der
Selbstdiagnosedaten (sog. S.M.A.R.T.-Daten) von Festplatten. Zu ihnen
gehört neben dem Hauptwerkzeug smartctl(1) vor allem auch der
Daemon smartd(8), welcher die S.M.A.R.T.-Daten der konfigurierten
Festplatten ständig überwacht und bei Auffälligkeiten Alarm schlägt.
Eine typische Konfiguration in der /etc/smartd.conf
kann so
aussehen:
/dev/sda -a -n standby -m johndoe@example.com
Der Schalter -m
sorgt dafür, daß smartd(8) bei Veränderung der
S.M.A.R.T.-Werte eine E-Mail an die übergebene E-Mail-Adresse
(johndoe@example.com) schickt. Das ist auf Server-Systemem meist kein
Problem. Auf Desktop-Systemen gilt allerdings, daß eine Infrasturktur
zum automatisierten Versand von E-Mails oft nicht vorhanden ist: weder
existiert das Programm sendmail(1) bzw. hat keine sinnvolle
Konfiguration, noch ist das von smartd(8) benötigte mail(1) installiert.
Das liegt daran, daß bei Desktop-Systemen der Informationsfluß zum
Nutzer ein anderer ist, denn schließlich sitzt der Nutzer meist ohnehin
am System. Heute kommen dafür meist Desktop-Benachrichtigungen zum
Einsatz, welche smartd(8) aber ärgerlicherweise nicht von Haus aus
unterstützt.
Doch gibt es eine Möglichkeit. Das Programm notify-send(1) ist bei
Debian im Paket libnotify-bin
enthalten und dient dazu,
Desktop-Benachrichtigungen auf der Kommandozeile zu erzeugen. Das
erfordert allerdings, daß auf dem System ein Benachrichtigungs-Daemon
(notification daemon) läuft. Alle großen Desktop-Umgebungen
gewährleisten dies; wer auf eine Desktop-Umgebung verzichtet und lieber
selbst Hand anlegt, kann auf dunst
zurückgreifen, welches, nebenbei gesagt, auch sehr gut zu
dmenu paßt.
notify-send(1) kann mit smartd(8) genutzt werden. Schlüssel dazu ist die
Konfigurationsdirektive -M exec
, mit der man smartd(8) ein
alternatives E-Mail-Programm übergeben kann. Statt für den Versand von
E-Mails kann man dies zur Erzeugung einer Desktop-Benachrichtigung
mithilfe von notify-send(1) nutzen. Dazu lege man ein Skript
/usr/local/bin/smartd-message
mit folgendem Inhalt an (wobei johndoe
durch den eigenen Nutzernamen zu ersetzen ist):
#!/bin/bash su johndoe -c "/usr/bin/notify-send -i drive-harddisk -u critical 'SMART-Fehler auf $SMARTD_DEVICE entdeckt (Diagnose: $SMARTD_FAILTYPE)'"
Zunächst wechselt dieses Skript mit su(1) auf den Nutzer, dem die Desktop-Benachrichtigung angezeigt werden soll; das Beispiel geht von einem Einbenutzer-System aus und müßte für Mehrbenutzersysteme entsprechend angepaßt werden. Aufgerufen wird sodann notify-send(1), wobei folgendes gilt:
- Es wird in der Benachrichtigung das Icon
drive-harddisk
angezeigt. Das ist eine optische Spielerei. - Die Dringlichkeit (engl. Urgency) wird auf
critical
gesetzt, weil Probleme mit S.M.A.R.T. auf kurz bevorstehenden Datenverlust hinweisen können. Benachrichtigungs-Daemons werten diese Dringlichkeit aus und zeigen die entsprechende Benachrichtigung in hervorgehobener Weise an (z. B. zeigt dunst(1) solche Benachrichtigungen standardmäßig rot an). - Inhalt der Benachrichtigung ist ein kurzer Satz mit Informationen zur
betroffenen Festplatte (
$SMARTD_DEVICE
) und dem Diagnose-Code ($SMARTD_FAILTYPE
). Die hier genutzten Variablen werden von smartd(8) als Umgebungsvariablen gesetzt. Neben diesen stehen noch viele weitere zur Verfügung; auf die Manpage smartd.conf(5) zur Option-M exec
wird verwiesen.
Man weise diesem Skript Auführ-Berechtigung zu:
# chmod a+x /usr/local/bin/smartd-message
Zuletzt ist smartd(8) zu konfigurieren. Dazu bearbeite man die
/etc/smartd.conf
so, daß in allen Fällen, in denen eine Option -m
für eine Gerätezeile übergeben wird, auch eine Option -M exec
mit dem
Pfad zu dem soeben angelegten Skript hinzutritt. Dies kann aussehen wie
folgt:
/dev/sda -a -n standby -m johndoe -M exec /usr/local/bin/smartd-message
Die Übergabe von -m
ist notwendig, weil smartd(8) -M
sonst
ignoriert. Theoretisch könnte man den Wert von -m
im Skript auswerten,
weil smartd(8) ihn als Umgebungsvariable übergibt, aber das oben
gezeigte Skript macht davon keinen Gebrauch, d.h. der Wert von -m
(johndoe
) wird in dieser Konfiguration ignoriert und kann auf eine
beliebige Zeichenkette gesetzt werden.
Nach einem Neustart des Daemons wird smartd(8) statt E-Mails nunmehr
Desktop-Benachrichtigungen verschicken. Testen kann man das, indem man
zusätzlich noch -M test
an die Konfiguration anfügt:
/dev/sda -a -n standby -m johndoe -M exec /usr/local/bin/smartd-message -M test
smartd(8) verschickt dann beim Start eine „E-Mail“ (=
Desktop-Benachrichtigung). Wird diese angezeigt, ist die Konfiguration
erfolgreich und die Option -M test
kann wieder aus der Konfiguration
entfernt werden.