SMARTMON - ein Frontend für smartctl

Begonnen von hexenmeister, 15 Dezember 2014, 23:47:45

Vorheriges Thema - Nächstes Thema

hexenmeister

Hi!

In einem anderen Thread ist ein Wunsch geäußert worden, die S.M.A.R.T.-Informationen einer angeschlossenen Festplatte ins FHEM zu übernehmen. Das Ergebnis hier - ist ein neues Modul, das genau dieses tut (auf Linux-Systemen). Für die Informationsgewinnung wird das Tool smartctl verwendet.

SmartMonTools müssen installiert sein:
sudo apt-get install smartmontools

Der Benutzer, unter mit dessen Rechte FHEM läuft, muss smartctl ausführen dürfen.
Dafür muss in der Datei /etc/sudoers ein entsprechender Eintrag vorgenommen werden.
Beispiel:
fhem ALL=(ALL) NOPASSWD: /usr/sbin/smartctl
Natürlich muss der user auch der Gruppe "sudo" angehören.

(http://forum.fhem.de/index.php?action=dlattach;topic=30491.0;attach=23181;image)

Definition:

define <name> SMARTMON <device> [<Interval>]

Beispiel: define sm SMARTMON /dev/sda 60

Readings:

    overall_health_test
    Gibt den allgemeinen Zustand der Platte an. Kann PASSED oder FAILED sein.

    warnings
    Gibt die Anzahl der vermerkten Warnungen an.

    Weiterhin können die verfügbaren SMART-Parameter als Readings angezeigt werden (RAW und/oder (teilweise) interpretiert).


Get:

    version
    Zeigt die verwendete Modul-Version an.

    update
    Veranlasst die Aktualisierung der gelesenen Parameter.

    list
    Zeigt verschiedenen Informationen an:
        devices:
        Liste der im System verfügbaren Geräten.

        info:
        Information zu dem aktuellen Gerät.

        data:
        Liste der SMART-Parameter zu dem aktuellen Gerät.

        health:
        Information zu dem allgemeinen Gesundheitsstatus für das verwendete Gerät.

    Für letzten 3 Befehle kann auch noch ein anderes Gerät als zusätzliche Parameter mitgegeben werden.


Attributes:

    show_raw
    Gültige Werte: 0: keine RAW-Readings anzeigen (default), 1: alle anzeigen, die nicht in interpretierten Readings enthalten sind, 2: alle anzeigen.

    include
    Kommaseparierte Liste der IDs gewünschten SMART-Parameter. Wenn nichts angegeben, werden alle verfügbaren angezeigt.

    disable
    Gültige Werte: 0: Modul aktiv (default), 1: Modul deaktiviert (keine Aktualisierungen).

Für weitere Informationen wird die cmartctrl-Dokumentation empfohlen.

Bin gespannt auf eure Reaktion, Kommantere und Kritik ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Mitch

Vielen Dank, habe es gerade mal eingebaut.

Folgende Fehler kamen:
2014.12.16 09:06:02 1: PERL WARNING: Prototype mismatch: sub main::SMARTMON_readDeviceData ($$) vs ($%) at ./FHEM/42_SMARTMON.pm line 377.
2014.12.16 09:06:02 1: PERL WARNING: Scalar value @dev_data[0] better written as $dev_data[0] at ./FHEM/42_SMARTMON.pm line 359.


Ansonsten wurden die Daten schön ausgelesen.
FHEM im Proxmox Container

hexenmeister

Danke für die Rückmeldung, werde heute abends korrigieren. ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Mitch

Da kam noch was nach  ;)

2014.12.16 09:22:34 1: PERL WARNING: Use of uninitialized value $attrVal in concatenation (.) or string at ./FHEM/42_SMARTMON.pm line 176.
FHEM im Proxmox Container

hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Joachim

Moin Alexander,

ersteinmal vielen Dank, dass Du Dich des Smartmons angenommen hast.
Natürlich wollte ich es sofort ausprobieren, leider schmiert mir FHEM sofort beim
define sm SMARTMON /dev/sda 60
sofort mit folgender Fehlermeldung auf der Konsole ab:
root@cubie:~# Undefined subroutine &main::Dumper called at ./FHEM/42_SMARTMON.pm line 84.

Hardware: Cubietruck
Betriebssystem: Debian jessie
FHEM: aktuell von heute
Wenn Du weitere Infos benötigst, bescheid sagen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hexenmeister

Hallo Joachim,

danke fürs Testen ;)
Ich habe leider die use-Klausel vergessen. Bei mir hat das keine Probleme verursacht, weil irgendein anderes Modul diese Klasse bereits geladen hat. Habe jetzt nachgeholt und eingecheckt. Probiere bitte die neue Version aus SVN aus.

Grüße,

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Joachim

Danke, lädt und läuft.
Weitere Rückmeldungen frühestens morgen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Wernieman

Hätte da noch ein Hinweis:
momentan greift smartctrl immer auf die Platte zu, auch wenn sie gerade "idle" ist, und fährt diese damit hoch.

Verbesserungsvorschlag:
"-n standby" dem smartctrl übergeben
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

hexenmeister

Aha, danke für den Hinweis, wäre mir nicht aufgefallen, da ich die Platte je nie runterfahre (die FHEM-Logs sind drauf, also wird ständig zugegriffen. Da ist mir bis jetzt noch keine gute Lösung eingefallen).

Was bewirkt der Parameter? Wird dann der Aufruf ignoriert? Dann werden ja die Readings nicht aktualisiert?

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

(Sorry für die späte Antwort)
Siehe man Page

       -n POWERMODE, --nocheck=POWERMODE
              [ATA  only]  Specifies if smartctl should exit before performing
              any checks when the device is in a low-power  mode.  It  may  be
              used to prevent a disk from being spun-up by smartctl. The power
              mode is ignored by default.  A nonzero exit status  is  returned
              if  the  device  is in one of the specified low-power modes (see
              RETURN VALUES below).

              Note: If this option is used it may also be necessary to specify
              the  device type with the ´-d´ option.  Otherwise the device may
              spin up due to commands issued during device type autodetection.

              The valid arguments to this option are:

              never - check the device always, but print  the  power  mode  if
              ´-i´ is specified.

              sleep - check the device unless it is in SLEEP mode.

              standby  -  check  the  device  unless it is in SLEEP or STANDBY
              mode.  In these modes most disks are not  spinning,  so  if  you
              want  to  prevent a disk from spinning up, this is probably what
              you want.

              idle - check the device unless it is in SLEEP, STANDBY  or  IDLE
              mode.  In the IDLE state, most disks are still spinning, so this
              is probably not what you want.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

hexenmeister

Das ist mir soweit klar. Aber das würde ja bedeuten, dass die Werte meistens nicht gelesen werden, da die HDD meistens schläft, oder?
Wie sieht die Ausgabe in diesem Fall aus? Kann man das sicher erkennen und dann immer wieder (in Abstand von?) versuchen? Und ggf. nach einer bestimmten Max-Zeit die Platte doch hochfahren?
Evtl. reicht eine ganz einfache Lösung: Jede Stunde mit dem "-n standby" anfragen und einmal täglich ohne?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

Da im "Normalfall" die Platte nicht altert, wenn sie nicht Hochfährt, habe ich es bei mir immer mit "-n" laufen. Ich würde dann die alten Werte stehen lassen.

Bei einem "Test" durch "smartctrl -t" wird dagegen die Platte immer Hochgefahren.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

budy

Moin,

unter Solaris, wo ich meinen fhem laufen habe, müsste ich als weiteres Attribut den Typ der Platte angeben können, wie z.B. -d sat,12. Kannst du das ggf. mit einbauen? Das wäre toll.

Gruß,
budy
Debian stretch, FHEM 5.9.
HM-CC-RT-DN, HM-ES-PMSw1-Pl, HM-LC-Dim1TPBU-FM, HMUARTLGW, HMLAN, HM-SEC-KEY, HM-SEC-RHS, HM-SEC-SC-2, HM-SEC-SCo, HM-SEC-SD-2, HM-OU-CFM-TW, div. HUEs, Wifilight, Ring Video Pro

hexenmeister

Habe einen Zusätzlichen Attribut implementiert: parameters
Der Inhalt wird zusätzlich beim Aufruf  hinzugefügt. Damit sollte man die beiden letzten Wünsche realisieren können.
Bitte morgen update durchführen und testen!
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy