Festplatten-Ausfall vorhersagen: SMART-Monitoring mit smartd und Scrutiny
SMART-Werte richtig deuten: welche Attribute einen Festplattenausfall ankündigen, wie Sie smartd mit automatischen Tests und E-Mail-Alerts einrichten und Scrutiny per Docker als Trend-Dashboard für mehrere Server nutzen.
Geprüft am 29.09.2026 · für scrutiny 0.9.4
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Diese Anleitung behandelt Schnelldiagnose per smartctl, Dauerüberwachung mit smartd inklusive E-Mail-Alerts und ein Trend-Dashboard mit Scrutiny per Docker, auch für mehrere Server.
Voraussetzungen
- Linux-Server mit Root-Zugriff (Ubuntu 22.04/24.04, Debian 12, Rocky Linux 9 oder Proxmox)
smartmontoolsinstalliert:apt install smartmontools(Debian/Ubuntu) oderdnf install smartmontools(RHEL/Rocky)nvme-clifür NVMe-Laufwerke:apt install nvme-cli- SMART aktiviert:
smartctl -i /dev/sda | grep 'SMART support' - Docker und Docker Compose (für Scrutiny)
- Mailversand:
mail(z. B.bsd-mailx) plus MTA oder msmtp-Relay - Für Hub/Spoke: TCP 8080 von den Collectors zum Hub, nur im LAN oder per VPN
Schritt 1: Welche SMART-Attribute wirklich zählen
Backblaze hat 2016 knapp 68.000 Laufwerke ausgewertet: 76,7 % der ausgefallenen HDDs hatten bei mindestens einem der fünf folgenden Attribute RAW > 0, laufende nur zu 4,2 %. 23,3 % der Ausfälle kamen ohne Warnung.
| Attribut-ID | Name | Gilt für | Schwellwert | Bedeutung |
|---|---|---|---|---|
| 5 | Reallocated Sectors Count | HDD | RAW > 0, steigend | Defekte Sektoren wurden auf Reservebereich umgeschrieben. Ein stabiler Einzelwert ist tolerierbar, ein Aufwärtstrend ist Austauschsignal. |
| 187 | Reported Uncorrectable Errors | HDD | RAW > 0 sofort | Fehler, die nicht per ECC korrigierbar waren. Jeder Wert > 0 erfordert sofortige Aufmerksamkeit. |
| 188 | Command Timeout | HDD | RAW > 0 steigend | Befehle, die das Laufwerk nicht rechtzeitig abgeschlossen hat. Steigender Trend ist bedenklich. |
| 197 | Current Pending Sector Count | HDD | RAW > 0 sofort | Sektoren mit Lesefehler, die auf Neuzuordnung warten. Steigt dieser Wert, droht Datenverlust. |
| 198 | Offline Uncorrectable | HDD | RAW > 0 sofort | Endgültig nicht mehr lesbare Sektoren. Jeder Wert > 0 = Laufwerk tauschen. |
| 177 / 173 | Wear Leveling Count | SSD | VALUE <= THRESH | VALUE sinkt mit der Abnutzung (bei vielen Herstellern Restlebensdauer in %). RAW zählt meist die mittleren Löschzyklen; ein hoher RAW-Wert bedeutet mehr Verschleiß. |
| 202 / 231 | Percent Lifetime Used / SSD Life Left | SSD | Verbrauch > 90 % bzw. Rest < 10 % | Herstellerabhängig: manche IDs zählen den Verbrauch, andere die Restlebensdauer. Den Namen in smartctl -A prüfen. |
| – | available_spare | NVMe | < available_spare_threshold | Verbleibende Reservesektoren in Prozent. Unterschreitung des Hersteller-Schwellwerts (typisch 10 %) = Warnsignal. |
| – | percentage_used | NVMe | > 90 % | Genutzter Anteil der Laufwerks-Lebenserwartung. Über 100 % ist die vom Hersteller angegebene Schreibleistung (TBW) überschritten. |
| – | media_errors | NVMe | > 0 steigend | Kumulativer Zähler nicht korrigierbarer Fehler. Jede Zunahme ist kritisch. |
| – | critical_warning | NVMe | Wert != 0x00 | Bitmap: Spare-Unterschreitung, Temperaturprobleme, Read-Only-Modus, Backup-Fehler. |
Wichtig: VALUE ist ein vom Controller normalisierter Score (1–253), THRESH der Hersteller-Mindestwert; bei VALUE <= THRESH gilt das Attribut als ausgefallen (FAILING_NOW). Aussagekräftiger ist RAW_VALUE, die gemessene Größe (Sektoren, Fehler, Temperatur).
Verifizieren: Fragen Sie die kritischen Attribute ab:
smartctl -A /dev/sda | grep -E "Reallocated|Pending|Uncorrectable|Command_Timeout"Gesundes Laufwerk: alle RAW_VALUE-Spalten 0. Andere Werte ordnen Sie mit der Tabelle ein.
Schritt 2: Schnelldiagnose mit smartctl
Überblick mit smartctl:
# Laufwerksinformationen: Modell, Firmware, Kapazität
smartctl -i /dev/sda
# Gesamtstatus: PASSED oder FAILED
smartctl -H /dev/sda
# Alle SMART-Attribute mit normalisierten Werten und Rohwerten
smartctl -A /dev/sda
# ATA Error Log – letzte fünf aufgetretene Fehler
smartctl -l error /dev/sda
# Selftest-Historie – vergangene Tests und Ergebnisse
smartctl -l selftest /dev/sda
# Alles auf einmal (kombiniert -H -i -c -A -l error -l selftest)
smartctl -a /dev/sdaNVMe-Health-Log per nvme smart-log:
# NVMe Health Log (nvme-cli erforderlich)
nvme smart-log /dev/nvme0
# Kritische Felder im Output:
# critical_warning : 0x00 (0 = alles OK)
# available_spare : 100% (unter Schwelle = Warnung)
# available_spare_threshold : 10% (Herstellerwert)
# percentage_used : 5% (> 90% = nahes Lebensende)
# media_errors : 0 (> 0 steigend = kritisch)
# Alternativ über smartctl (wenn nvme-cli nicht installiert):
smartctl -a /dev/nvme0Manueller Kurztest (ca. zwei Minuten):
# Kurztest starten
smartctl -t short /dev/sda
# Test läuft im Hintergrund – nach ~130 Sekunden Ergebnis prüfen
sleep 130
smartctl -l selftest /dev/sda
# Empfohlene Dauer des Langtests anzeigen ("Extended self-test routine recommended polling time")
smartctl -c /dev/sda | grep -A1 Extended
# Langtest starten
smartctl -t long /dev/sdaAchtung: smartctl -t long kehrt sofort zurück. Den Fortschritt zeigt smartctl -a /dev/sda unter „Self-test execution status“; bewerten Sie erst nach Ablauf der Restzeit.
Erster schwebender Sektor (SMART 197 = 1)? Vollständiges Backup erstellen und prüfen, dann Langtest. Ist danach SMART 198 > 0 oder bleibt 197 über 0, Laufwerk tauschen.
Verifizieren: smartctl -H /dev/sda muss mit SMART overall-health self-assessment test result: PASSED antworten. Ein FAILED oder eine Ausgabe mit Warnungen signalisiert unmittelbaren Handlungsbedarf.
Schritt 3: smartd konfigurieren – automatische Tests und Alerts
smartd aus smartmontools überwacht Laufwerke dauerhaft, plant Tests und mailt bei Schwellwertüberschreitungen. Konfiguration: /etc/smartd.conf.
Original sichern (cp /etc/smartd.conf /etc/smartd.conf.orig) und durch diese Basis ersetzen:
# /etc/smartd.conf – Empfohlene Basis-Konfiguration
# Alle Laufwerke überwachen, E-Mail bei Problemen, Testzeitplan
DEFAULT -H -l error -l selftest -f -C 197 -U 198 \
-W 2,40,50 \
-m admin@example.com \
-M daily
DEVICESCAN -s (S/../.././02|L/../../6/03)
# Erklärung der wichtigsten Flags:
# -H = SMART Health Status prüfen (PASSED/FAILED)
# -l error = ATA Error Log auf Zuwachs prüfen
# -l selftest = fehlgeschlagene Selftests melden
# -f = Fehlgeschlagene Usage-Attribute melden
# -C 197 = Alarm wenn Pending Sectors > 0 (SMART 197)
# -U 198 = Alarm wenn Offline Uncorrectable > 0 (SMART 198)
# -W 2,40,50 = Temperatur: 2 Grad Änderung loggen, ab 40 Grad Info,
# ab 50 Grad kritischer Alarm
# -m = E-Mail-Empfänger
# -M daily = Täglich erinnern solange Problem besteht
# Zeitplan: Kurztest täglich 02–03 Uhr, Langtest samstags 03–04 UhrBei mehreren Laufwerken sind explizite Einträge besser. Wichtig: smartd ignoriert alle Zeilen nach DEVICESCAN; bei expliziten Einträgen DEVICESCAN weglassen:
# /etc/smartd.conf – Explizite Laufwerks-Einträge (Alternative zu DEVICESCAN)
DEFAULT -H -l error -l selftest -f -C 197 -U 198 \
-W 2,40,50 \
-m admin@example.com \
-M daily
/dev/sda -a -s S/../.././02
/dev/sdb -a -s L/../../6/03
# NVMe: kein -C 197 / -U 198 (HDD-spezifisch), -H überwacht critical_warning
/dev/nvme0 -a -s S/../.././02Konfiguration prüfen und Dienst neu starten. Unter Debian/Ubuntu heißt er smartmontools (smartd ist nur Alias, systemctl enable smartd schlägt fehl), unter RHEL/Rocky smartd:
# Konfiguration prüfen (ohne Daemon-Start, zeigt geplante Tests):
smartd -c /etc/smartd.conf -q showtests
# Debian/Ubuntu
systemctl enable smartmontools && systemctl restart smartmontools
# RHEL/Rocky
systemctl enable --now smartd && systemctl restart smartd
Test-Mail: in der DEFAULT-Zeile vorübergehend -M test statt -M daily (Konfigurationsdirektive, keine Kommandozeilenoption), dann smartd -q onecheck, danach -M daily wiederherstellen.
E-Mail ohne vollständigen MTA: apt install bsd-mailx msmtp msmtp-mta und SMTP-Zugang in /etc/msmtprc (chmod 600). Alternativ führt -M exec /pfad/zum/skript ein Skript aus, etwa mit curl an ntfy, Gotify oder einen Webhook.
Verifizieren:
systemctl status smartmontools # RHEL/Rocky: smartd
Erwartet: Active: active (running); journalctl -u smartmontools -n 30 (RHEL: -u smartd) zeigt Device: /dev/sda, opened und die geplanten Tests.
Schritt 4: Scrutiny als Docker-Dashboard einrichten (All-in-one)
Scrutiny (aktuell v0.9.4) speichert SMART-Daten in InfluxDB, zeigt Trends und nutzt Backblaze-basierte Schwellwerte. Das Omnibus-Image bündelt Web-UI, Collector und Datenbank; ohne Anmeldung: Port 8080 nur im LAN oder per VPN.
Legen Sie eine Compose-Datei an:
# /opt/scrutiny/docker-compose.yml – All-in-one (Omnibus)
services:
scrutiny:
image: ghcr.io/analogj/scrutiny:latest-omnibus
container_name: scrutiny
restart: unless-stopped
cap_add:
- SYS_RAWIO
- SYS_ADMIN # Zusätzlich für NVMe-Laufwerke
volumes:
- /run/udev:/run/udev:ro
- /opt/scrutiny/config:/opt/scrutiny/config
- /opt/scrutiny/influxdb:/opt/scrutiny/influxdb ports:
- 8080:8080
devices:
- /dev/sda
- /dev/sdb
- /dev/nvme0
devices an Ihre Laufwerke anpassen (lsblk -d). InfluxDB (Port 8086) wird bewusst nicht veröffentlicht.
Verzeichnisse anlegen, starten:
mkdir -p /opt/scrutiny/config /opt/scrutiny/influxdb
docker compose -f /opt/scrutiny/docker-compose.yml up -d
# Collector einmal sofort ausführen (sonst erst täglich um Mitternacht)
docker exec scrutiny /opt/scrutiny/bin/scrutiny-collector-metrics runDashboard: http://localhost:8080 (oder Server-IP). Laufwerke erkennt Scrutiny über das /run/udev-Volume; fehlt es, bleibt die Liste leer (dann Geräte in /opt/scrutiny/config/collector.yaml eintragen).
Verifizieren:
docker compose -f /opt/scrutiny/docker-compose.yml ps
docker logs scrutiny --tail 20Erwartetes Ergebnis: Container-Status Up, der manuelle Collector-Lauf endet ohne Fehler, und das Dashboard unter http://SERVER-IP:8080 zeigt Ihre Laufwerke.
Schritt 5: Scrutiny Hub-and-Spoke für mehrere Server
Ein Hub betreibt Web-UI und InfluxDB; Collectors auf den übrigen Servern senden an die Hub-API.
Hub-Server (/opt/scrutiny/docker-compose.hub.yml):
services:
influxdb:
image: influxdb:2.8
container_name: scrutiny-influxdb
restart: unless-stopped
# kein ports-Eintrag: InfluxDB ist nur im Compose-Netz erreichbar
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=SICHERES-PASSWORT
- DOCKER_INFLUXDB_INIT_ORG=homelab
- DOCKER_INFLUXDB_INIT_BUCKET=scrutiny
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=DEIN-GEHEIMER-TOKEN
volumes:
- scrutiny-influxdb:/var/lib/influxdb2
scrutiny-web:
image: ghcr.io/analogj/scrutiny:latest-web
container_name: scrutiny-web
restart: unless-stopped
ports:
- 8080:8080
environment:
- SCRUTINY_WEB_INFLUXDB_HOST=influxdb
- SCRUTINY_WEB_INFLUXDB_PORT=8086
- SCRUTINY_WEB_INFLUXDB_TOKEN=DEIN-GEHEIMER-TOKEN
- SCRUTINY_WEB_INFLUXDB_ORG=homelab
- SCRUTINY_WEB_INFLUXDB_BUCKET=scrutiny
depends_on:
- influxdb
volumes:
- /opt/scrutiny/config:/opt/scrutiny/config
volumes:
scrutiny-influxdb:Spoke/Collector auf jedem Remote-Server (/opt/scrutiny/docker-compose.spoke.yml):
services:
scrutiny-collector:
image: ghcr.io/analogj/scrutiny:latest-collector
container_name: scrutiny-collector
restart: unless-stopped
cap_add:
- SYS_RAWIO
- SYS_ADMIN # Für NVMe-Laufwerke
volumes:
- /run/udev:/run/udev:ro
environment:
- COLLECTOR_API_ENDPOINT=http://HUB-IP-ODER-HOSTNAME:8080
- COLLECTOR_CRON_SCHEDULE=0 */6 * * * # alle 6 Stunden
- COLLECTOR_RUN_STARTUP=true # erster Lauf direkt beim Start
devices:
- /dev/sda
- /dev/sdb
- /dev/nvme0Setzen Sie für DEIN-GEHEIMER-TOKEN und SICHERES-PASSWORT Zufallswerte ein (z. B. openssl rand -hex 32), für HUB-IP-ODER-HOSTNAME den Hub. Der Token muss in beiden Diensten der Hub-Datei gleich sein; der Collector braucht keinen. Start: docker compose -f /opt/scrutiny/docker-compose.hub.yml up -d, Spoke entsprechend.
Verifizieren:
# Auf dem Hub-Server:
docker compose -f /opt/scrutiny/docker-compose.hub.yml ps
# Auf dem Spoke-Server:
docker logs scrutiny-collector --tail 20Das Collector-Log zeigt keine Verbindungsfehler zur COLLECTOR_API_ENDPOINT-Adresse, und im Hub-Dashboard unter http://HUB-IP:8080 erscheinen nach dem ersten Lauf die Laufwerke des Remote-Servers. Ein connection refused deutet auf eine Firewall oder falsche Hub-Adresse.
Troubleshooting / Typische Fehler
- smartd sendet keine E-Mails:
mailoder MTA fehlt (Schritt 3). - DEVICESCAN findet keine Laufwerke hinter RAID-Controllern (LSI MegaRAID, HP Smart Array):
smartctl -d megaraid,0 /dev/sdaoder-d 3ware,0; die Typen explizit insmartd.confeintragen. - Scrutiny-Dashboard leer: Collector läuft standardmäßig nur um Mitternacht, oder
/run/udev/devicesfehlt; manuell starten (Schritt 4). - NVMe im Container „permission denied“: zusätzlich zu
SYS_RAWIOcap_add: [SYS_ADMIN].privileged: truegeht auch, gibt aber vollen Hostzugriff. - SMART 197 sinkt nach Langtest nicht: Lesen findet schwebende Sektoren nur, neu zugeordnet werden sie erst beim Schreiben; Laufwerk nach Backup tauschen.
- Scrutiny bricht mit
unauthorizedab: InfluxDB-Verzeichnis war nicht persistent. Volume für/opt/scrutiny/influxdb(Omnibus) bzw./var/lib/influxdb2(Hub) prüfen,web.influxdb.tokenin/opt/scrutiny/config/scrutiny.yamllöschen und neu starten; die Historie ist dabei meist verloren. - smartd ignoriert Gerätepfade: Sie stehen nach
DEVICESCAN(Schritt 3). - Wear Leveling Count (SMART 177) falsch gelesen: maßgeblich ist VALUE gegenüber THRESH (Tabelle).
Häufige Fragen
Ab wann muss ich ein Laufwerk sofort ersetzen?
Bei SMART 198 > 0, steigendem 187, nach Langtest erhöhtem 197 oder steigendem SMART 5 (siehe Tabelle): Backup prüfen, Ersatz bestellen, Daten migrieren.
Was ist der Unterschied zwischen VALUE und RAW_VALUE in smartctl -A?
Siehe Schritt 1: VALUE ist normalisiert (Ausfall bei VALUE <= THRESH), RAW_VALUE die Messgröße.
Kann Scrutiny HDD, SSD und NVMe gleichzeitig überwachen?
Ja; NVMe braucht zusätzlich SYS_ADMIN (Troubleshooting).
DEVICESCAN oder explizite Einträge – was ist besser?
DEVICESCAN genügt für Einzelsysteme; explizite Einträge (Schritt 3) erlauben Ausschlüsse (-d ignore), neue Laufwerke tragen Sie dann selbst ein.
Wie lange dauert ein SMART-Langtest und kann ich den Server dabei normal nutzen?
smartctl -c zeigt die Dauer („Extended self-test routine recommended polling time“): bei HDDs grob 1 bis 2 Stunden pro TB, bei SSDs meist unter 30 Minuten. Der Server bleibt nutzbar; planen Sie Langtests in ruhige Zeiten (z. B. -s L/../../6/03).
Wie unterscheidet sich Scrutiny von einem reinen smartd-Setup?
Scrutiny ergänzt Trends, Backblaze-Bewertung, Benachrichtigungen per SCRUTINY_NOTIFY_URLS und Multi-Server-Übersicht. Für einen Einzelserver reicht smartd.
Fazit
SMART-Monitoring verschafft in drei von vier Fällen Zeit für einen geplanten Tausch, ersetzt aber kein Backup. Ergänzen Sie es durch eine 3-2-1-Backup-Strategie und Wiederherstellungstests; für neue Hardware eignet sich der Hardware-Stresstest mit stress-ng.
Weiterführende Anleitungen und Quellen
- 3-2-1-Backup-Strategie praktisch umsetzen
- Restic Backup automatisieren mit Cron
- Hardware-Stresstest mit Linux, stress-ng und smartctl
- NAS dimensionieren und RAID-Level wählen
Quellen: Backblaze: What SMART Stats Tell Us About Hard Drives (Originalstudie); Backblaze SMART Stats and Failure Rates Documentation; smartd.conf(5) Man-Page; Scrutiny GitHub Repository (INSTALL_HUB_SPOKE.md); ArchWiki: S.M.A.R.T.


