Wie man smartctl-Meldungen wie 'Error: UNC at LBA' interpretiert

English Deutsch

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

smartctl_error_log_example.txt
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 QUEUED

Offensichtlich zeigt die erste Zeile, wann dieser Fehler aufgetreten ist. Die anderen Zeilen sind jedoch nicht so offensichtlich. Betrachten wir den nächsten Abschnitt:

smartctl_error_log.txt
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

Wä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:

smartctl_sector_size.txt
Sector Size:      512 bytes logical/physical

In 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):

ataprint_examples.c
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:

smartctl_power_on_hours.txt
9 Power_On_Hours          0x0032   082   082   000    Old_age   Always       -       8586

und den Wert (in diesem Fall 8586) mit der Lebensdauer beim letzten Fehler vergleichst,

smartctl_error_line.txt
Error 8911 occurred at disk power-on lifetime: 7257 hours

in 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

smartctl_error_count.txt
Error 8911 occurred at disk power-on lifetime: 7257 hours

oder in

smartctl_ata_error_count.txt
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.


Check out similar posts by category: Linux