Systemstatus - S.M.A.R.T Werte - M2/NVMe SSD

eszett.nb

Cadet 4th Year
Registriert
März 2020
Beiträge
92
In einem anderen Thread ist die Idee entstanden, mittels shell/bash Script den SMART Status meiner zwei NVMe und normalen SSD auszulesen, auszuwerten und eine Desktop-Meldung bzw. kleine Infomail zu versenden.

Ausgang ist der Screenshot von @Freedstorm
smart2.png


Generieren einer Desktop-Meldung
Bash:
notify-send --icon=gtk-add "Test notification" "I love Computer Base Linux Community... :)"

Hilfsmittel zum Auslesen der NVMe ist das Tool nvme-cli welches bei den meisten Distributionen über das Repository installiert werden kann.

Basis Informationen abfragen
Bash:
sudo nvme list

Detailierte Geräteinformationen
Bash:
sudo nvme id-ctrl /dev/nvme0n1

Kompakte SMART-Übersicht
Bash:
sudo nvme smart-log /dev/nvme0n1

Erweiterte SMART-Daten auslesen
Bash:
sudo nvme smart-log /dev/nvme0n1 --human-readable
Ergänzung ()

Hier ein kleines Script, was die wichtigsten Informationen für zwei NVMe zusammenstellt.
Code:
#!/bin/bash

# NVMe Devices
DEVICES=("/dev/nvme0" "/dev/nvme1")

# Prüfen ob nvme-cli installiert ist
if ! command -v nvme &> /dev/null; then
    echo "nvme-cli ist nicht installiert."
    exit 1
fi

for DEVICE in "${DEVICES[@]}"; do
    if [ ! -e "$DEVICE" ]; then
        echo "Device $DEVICE existiert nicht – übersprungen."
        continue
    fi

    echo ""
    echo "NVMe SMART Informationen für $DEVICE"
    echo "-------------------------------------"

    nvme smart-log "$DEVICE" | awk '
    /^temperature/          {print "Temperatur:              " $3 " °C"}
    /^available_spare/      {print "Verfügbare Reserve:      " $3 " %"}
    /^percentage_used/      {print "Verschleiß (Used):       " $3 " %"}
    /^data_units_read/      {print "Daten gelesen:          " $4 " TB"}
    /^data_units_written/   {print "Daten geschrieben:      " $4 " TB"}
    /^power_on_hours/       {print "Betriebsstunden:        " $3 " h"}
    /^power_cycles/         {print "Power Cycles:           " $3}
    /^media_errors/         {print "Medienfehler:           " $3}
    /^num_err_log_entries/  {print "Fehler-Log Einträge:    " $3}
    '
done
NVMe SMART Informationen für /dev/nvme0
-------------------------------------
Temperatur: 43 °C
Verfügbare Reserve: 100% %
Verfügbare Reserve: 10% %
Verschleiß (Used): 1% %
Power Cycles: 1362
Betriebsstunden: 3375 h
Medienfehler: 0
Fehler-Log Einträge: 0

NVMe SMART Informationen für /dev/nvme1
-------------------------------------
Temperatur: 44 °C
Verfügbare Reserve: 100% %
Verfügbare Reserve: 10% %
Verschleiß (Used): 0% %
Power Cycles: 582
Betriebsstunden: 1550 h
Medienfehler: 0
Fehler-Log Einträge: 0
Ergänzung ()

1768145933224.png
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Deinorius, Freedstorm, rollmoped und eine weitere Person
Ich habe mir das Notebook vom Kumpel geborgt, um ein Script zu erstellen. Ist ziemlich gut geworden. Man kann an der Logik zur Log-Auswertung noch weiterarbeiten wenn man will.. Das einzige Problem ist die Zeit. In einer Stunde kommt er und will sein Notebook zurückhaben.

screen4.png
 
  • Gefällt mir
Reaktionen: eszett.nb
Na, das sieht doch schon sehr gut aus. Ich habe auch den Namen und Status-Info mit in meine Meldung aufgenommen, aber dann ist die Message etwas zu groß bzw. zu lang.

Deine Übersetzung gefällt mir besser. :) Bin weiter gespannt.

1768160824618.png
 
  • Gefällt mir
Reaktionen: Freedstorm
War echt schwierig das optisch hinzubekommen. Hab ein wenig mit Claude gearbeitet, dann hat es einigermaßen gut geklappt. :D Achso ja, notify-send ..

notify2.png

Ergänzung ()

Ach so, Script lässt sich recht einfach für NVMes abändern.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: eszett.nb
Nur der Vollständigkeit halber sei nochmal smartd erwähnt (Teil von smartmontools). Wenn man nur Überwachung mit Benachrichtigung braucht, hat das schon alles dabei, z.B. auch Temperatur-Grenzwerte.
 
  • Gefällt mir
Reaktionen: eszett.nb
@Donnerkind
Klar, kann man auch nutzen, wieso auch nicht? Ich hab mir dafür mal ein Skript gebastelt, ein Popup per notify-send anzeigt. So bekam ich bei Fehlern oder Warnungen direkt eine genaue Meldung auf den Desktop. Viele Wege führen nach Rom.
 
Ich sehe es als sportlichen Anreiz und man lernt noch was. Viel wichtiger ... es soll Spaß machen.
@Freedstorm lässt du Script als User crontab laufen? Sonst bekommst du eine Fehlermeldung, dass X11 nicht da ist etc. Weiterhin, wie löse ich das Zeitproblem, wann der Job startet. Gilt zum Beispiel, wenn ich einmal am Tag prüfen möchte, oder habe ich gerade einen Denkfehler.
 
@eszett.nb
Also, anstatt mit der Crontab, würde ich dir eher systemd-Timer empfehlen. Falls du auf einer Distro mit sysVinit unterwegs bist (z.B. Slackware), ist es am saubersten, die Timer-Steuerung über die rc.d/.. zu starten.

Fehlermeldung X11:.. Damit dein Skript als root trotzdem weiß, wo dein Desktop ist (um z.B. notify-send mitzuteilen das...), musst du die Umgebungsvariablen exportieren. Ohne die findet der Prozess nämlich weder den X-Server noch den DBus.

Code:
>>> nachdem der User ermittelt wurde,

export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus

>>> bevor notifiy-send aufgerufen wird.

Ersetze $USER_ID durch die ID deines DesktopUsers (bei den meisten ist das die 1000). Dann klappt's auch mit den Benachrichtigungen. Funktioniert mit Arch (X11) & Slackware (X11). Andere Distros (z.B. wayland) brauchen eine Anpassung.

Solltest du smartd nutzen wollen, dann geht das mit notify-send genauso. Bei mir siehts dann so aus ..

smartd2.png
 
  • Gefällt mir
Reaktionen: eszett.nb
Zurück
Oben