Wie man smartctl-Meldungen wie 'Error: UNC at LBA' interpretiert
Wenn du smartctl auf deiner Festplatte ausführst, erhältst du oft eine Fülle von Informationen, die für unerfahrene Benutzer schwer zu interpretieren sein können. Dieser Beitrag versucht, Hilfestellung bei der Interpretation der technischen Ursachen hinter den Fehlermeldungen zu geben. Wenn du Ratschläge suchst, ob du deine Festplatte ersetzen solltest, ist die einzige Orientierung, die ich dir geben kann: Sie könnte jederzeit ausfallen, also besser deine Daten sichern, aber sie könnte auch noch viele Jahre laufen.. Des Weiteren beschreibt dieser Artikel nicht die grundlegende SMART-WHEN_FAILED-Prüfung, sondern eher die Interpretation subtilerer Anzeichen für möglicherweise bevorstehende HDD-Ausfälle.
Ein Beispiel, das besonders schwer zu interpretieren ist, ist das Gerätefehlerprotokoll, das die letzten wenigen Fehler speichert, zum Beispiel
Error 8910 occurred at disk power-on lifetime: 7257 hours (302 days + 9 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 41 1a 00 33 96 61 Error: UNC at LBA = 0x01963300 = 26620672
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
60 08 18 00 33 96 40 00 03:09:52.125 READ FPDMA QUEUED
60 88 10 50 06 11 40 00 03:09:52.125 READ FPDMA QUEUED
60 08 08 60 ac 5e 40 00 03:09:52.113 READ FPDMA QUEUED
60 08 00 48 cf 6d 40 00 03:09:52.099 READ FPDMA QUEUED
60 90 f0 b0 ef e5 40 00 03:09:52.065 READ FPDMA QUEUEDOffensichtlich zeigt die erste Zeile, wann dieser Fehler aufgetreten ist. Die anderen Zeilen sind jedoch nicht so offensichtlich. Betrachten wir den nächsten Abschnitt:
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 41 1a 00 33 96 61 Error: UNC at LBA = 0x01963300 = 26620672Während dieser Abschnitt auch den Inhalt einiger Register während des Fehlers zeigt, ist der interessante Teil die Fehlerbeschreibung Error: UNC at LBA = 0x01963300 = 26620672.
Eine LBA ist eine Logical Block Address, d.h. eine logische Adresse auf der Festplatte. Sie wird sowohl in hexadezimaler Form 0x01963300 als auch in dezimaler Form 26620672 angezeigt. Um sie in eine Byte-Adresse umzuwandeln, musst du sie mit dem Wert multiplizieren, der am Anfang der smartctl-Ausgabe aufgeführt ist:
Sector Size: 512 bytes logical/physicalIn fast allen Fällen ist dieser Wert 512 Bytes, also wäre in diesem Beispiel der Byte-Offset 26620672 * 512 = 13629784064 = 12.69 GiB. In einigen Fällen kann es hilfreich sein, diese Adresse in einem Tool wie GParted nachzuschlagen, um zu sehen, in welcher Partition der Fehler aufgetreten ist. Siehe auch dieses smartmontools-HOWTO, das diesen Prozess im Detail beschreibt.
UNC-Fehler
Die Fehlermeldung sagt uns nun, dass ein Fehler namens UNC bei dieser LBA aufgetreten ist. UNC ist die Abkürzung für UNCorrectable, was bedeutet: Die Daten, die von der Festplatte bei dieser LBA gelesen wurden, waren beschädigt und konnten nicht korrigiert werden.
Festplatten speichern nicht nur deine Daten selbst, sondern berechnen automatisch einen sogenannten Fehlerkorrekturcode (ECC). Während es viele Untertypen dieser mathematischen Codes gibt, haben sie eines gemeinsam: Gegeben eine Menge von Bytes (z.B. die auf der Festplatte gespeicherten), die leicht beschädigt sein könnten (d.h. einige 0-Bits sind jetzt 1-Bits oder umgekehrt) und der passende ECC-Code (bestehend aus ein paar zusätzlichen Bytes) kann ein geeigneter Decoder eine begrenzte Anzahl von Bit-Fehlern wiederherstellen. In den meisten Fällen können ECC-Codes auch Fehler erkennen — beispielsweise könnte ein spezifischer ECC-Code einen Bit-Flip in zwei Bytes korrigieren, aber bis zu drei Bit-Flips in zwei Bytes erkennen.
Wenn es mehr Bit-Flips gibt, als der ECC korrigieren kann (aber nicht mehr, als er erkennen kann), führt dies zu einem nicht behebbaren Fehler — dem UNC. Wenn es mehr Bit-Flips gibt, als der ECC erkennen kann, kann alles passieren: Normalerweise werden die aus dem ECC berechneten Daten beschädigt sein, oder es wird überhaupt kein Fehler erkannt.
Beachte, dass diese Erklärung stark vereinfacht ist. Beispielsweise werden ECC-Codes nicht als separate Bytes neben den Daten gespeichert, sondern es wird eine mathematische Funktion auf den Daten berechnet, die eine Menge von Bytes ergibt, die größer ist als der ursprüngliche Datensatz — die sowohl die Daten selbst als auch die zusätzlichen Fehlerkorrekturdaten enthält. Mit anderen Worten, die ECC-Daten und die Daten selbst werden vermischt.
Dies hat mehrere Konsequenzen für die Interpretation. Erstens bedeutet dies, dass physisch die Daten gelesen werden konnten, sie jedoch nicht korrekt zu sein scheinen. Dies bedeutet
Andere Fehlermeldungen
Während UNC-Fehler recht häufig auftreten, gibt es andere, seltenere Fehler, zu denen du nicht zu viel Dokumentation finden kannst.
Es gibt eine definitive Quelle für alle smartctl-Fehlermeldungen: Der smartmontools-Quellcode.
Wir können die Fehlerbeschreibungen in ataprint.cpp finden (siehe auch die GPL-Lizenzinformationen im Quell-Tarball):
const char *abrt = "ABRT"; // ABGEBROCHEN
const char *amnf = "AMNF"; // ADRESSMARKIERUNG NICHT GEFUNDEN
const char *ccto = "CCTO"; // BEFEHLSABSCHLUSS-ZEITÜBERSCHREITUNG
const char *eom = "EOM"; // ENDE DES MEDIUMS
const char *icrc = "ICRC"; // INTERFACE-CRC-FEHLER
const char *idnf = "IDNF"; // ID NICHT GEFUNDEN
const char *ili = "ILI"; // BEDEUTUNG DIESES BITS IST BEFEHLSSATZ-SPEZIFISCH
const char *mc = "MC"; // MEDIUM GEWECHSELT
const char *mcr = "MCR"; // MEDIUMWECHSEL-ANFORDERUNG
const char *nm = "NM"; // KEIN MEDIUM
const char *obs = "obs"; // VERALTET
const char *tk0nf = "TK0NF"; // SPUR 0 NICHT GEFUNDEN
const char *unc = "UNC"; // NICHT KORRIGIERBAR
const char *wp = "WP"; // SCHREIBGESCHÜTZT
Realistisch wirst du nur einige dieser Fehler antreffen, selbst wenn du professionell mit Festplatten arbeitest. Einige dieser Fehler wie MC, MCR oder NM hängen auch mit dem Hot-Swapping von Festplatten zusammen und repräsentieren nicht zwingend Fehler im Zusammenhang mit der Festplattengesundheit selbst.
Ein wichtiger Fehler ist ICRC — der Interface-CRC-Fehler. Dies bedeutet, dass Fehler auf dem IDE/SATA- oder PCIe-Bus erkannt werden, an den die Festplatte angeschlossen ist. Obwohl dies selten ist und durch die HDD selbst verursacht werden könnte, könnte es bedeuten, dass dein Chipsatz (die Hardware, die z.B. SATA steuert) beschädigt ist — in diesem Fall würde der Austausch der Festplatte das Problem nicht beheben. Möglicherweise liegt auch eine intermittierende Kabelverbindung vor.
Wie schwerwiegend sind diese Fehler?
Über die Lebensdauer der meisten Festplatten, insbesondere Consumer-Modelle, werden Fehler auftreten — häufiger in tragbaren Geräten, wo hohe Beschleunigungskräfte wahrscheinlicher auftreten.
Was eine gute Festplatte von einer am Ende ihrer Lebensdauer unterscheidet (ausgenommen derer, die ohne Warnung ausfallen), ist oft die Häufigkeit neuer Fehler. Wenn du die gesamte Lebensdauer der HDD betrachtest, d.h. Power_On_Hours oder ähnliches:
9 Power_On_Hours 0x0032 082 082 000 Old_age Always - 8586und den Wert (in diesem Fall 8586) mit der Lebensdauer beim letzten Fehler vergleichst,
Error 8911 occurred at disk power-on lifetime: 7257 hoursin diesem Fall 7257, kannst du sehen, dass über tausend HDD-Betriebsstunden seit dem letzten Fehler vergangen sind. Dies deutet darauf hin, dass es keinen mechanischen Defekt gibt, der zur Zerstörung der Festplatte führen könnte, sondern eher ein paar defekte oder beschädigte Sektoren. UNC-Fehler bedeuten nicht zwingend, dass die Sektoren physisch beschädigt sind.
Oft werden Festplattenfehler ausgelöst, wenn Dateien zugegriffen werden, auf die sehr selten zugegriffen wird (wie archivierte Videodateien, die nur alle paar Jahre geöffnet werden). Wenn es aus irgendeinem Grund genug Bit-Flips in solchen Dateien gibt, kann dies dazu führen, dass eine größere Anzahl von HDD-Fehlern gleichzeitig auftritt.
Ein weiterer Indikator ist die Gesamtzahl der Fehler, auf die die Festplatte gestoßen ist, d.h. 8911 in
Error 8911 occurred at disk power-on lifetime: 7257 hoursoder in
ATA Error Count: 8911 (device log contains only the most recent five errors)Während diese Zahl nicht für alle Festplatten angezeigt wird, deutet eine sehr hohe Zahl oder eine schnell wachsende Zahl darauf hin, dass ein physisches Problem mit dem Laufwerk vorliegt. Probleme, die nur wenige defekte Sektoren betreffen, verursachen einen plötzlichen Sprung im Fehlerzähler, aber danach. Beachte jedoch, dass es andere Gründe für einen hohen Fehlerzähler geben kann, beispielsweise eine schlechte oder intermittierende physische Verbindung zur Festplatte.
Siehe auch diesen vorherigen Beitrag zur Behebung defekter HDD-Sektoren.