Defekte Sektoren reparieren unter Linux mit badblocks

Ich hatte mir einen gebrauchten Server gekauft der vor der Inbetriebnahme auf Herz und Nieren getestet werden sollte. Dabei sind mir auf der Festplatte defekte Sektoren aufgefallen. Glücklicherweise ist das noch nicht das Ende der Festplatte. Man kann nämlich defekte Sektoren reparieren. Unter Linux verwende ich dazu das Programm badblocks.

Die Voranalyse

Um überhaupt den gesundheitlichen Zustand der Festplatte abschätzen zu können habe ich zuerst den S.M.A.R.T. Status der Festplatte ausgelesen und die einzelnen Attribute im Detail analysiert.  Ich verwende dazu die smartmontools die bei so ziemlich jeder Linux Distribution enthalten sind.

Bei Bedarf lässt sich für die Festplatte auch ein ausführlicher Selbsttest starten. Den Devicenamen muss man natürlich bei Bedarf an die eigene Situation anpassen, bei mir ist es die erste Platte, damit sda.

Das Ergebnis des Selbsttests kann man meist ein paar Minuten bis Stunden (je nach Test)  später wieder mit smartctl auslesen.

Die meisten Attribute waren bei mir im Grünen Bereich. Als Hilfestellung zur Bewertung werden die Attribute auch nochmal normalisiert auf 100 dargestellt. Wenn der „VALUE“ unter den Grenzwert „THRESH“ absinkt geht es der Platte nicht mehr besonders gut und man sollte sich schleunigst um ein Backup und einen Austausch kümmern.

Die beiden Attribute die ich besonders beobachte sind die Anzahl der verschobenen Blöcke „Reallocated_Sector_ct“ und die Blöcke die nur „verdächtig“ waren, die „Current_Pending_Sector“.

Verschobene Blöcke sind die Bereiche bei denen der Festplattencontroller ein Problem erkannt hat. In der Regel hat ein Schreibzugriff auf diese Blöcke nicht geklappt. Die Blöcke wurden dann als „defekt“ markiert und durch Reserveblöcke ersetzt von denen eine moderne Festplatte doch einige hat. Wenn diese Zahl schnell ansteigt ist das auch ein Hinweis darauf, dass sich die Platte ihrem Lebensende nähert.

Etwas mehr Sorgen machen mir die „Current_Pending_Sector“. Das sind Blöcke die als „verdächtig“ vorgemerkt sind weil beim Lesen etwas nicht geklappt hat. Wenn beim nächsten Schreibzugriff auf diese Blöcke wieder alles in Ordnung ist dann fallen sie aus der Liste raus, ansonsten werden sie durch Reserveblöcke ersetzt (sieht man dann als Reallocated).

Leider kenne ich kein Tool mit dem sich nur diese verdächtigen Blöcke neu beschreiben lassen, smartctl zeigt die Blocknummern auch nicht an. Auch in den Logs die die Platte ausgeben kann habe ich das bislang nicht gefunden.

Die Holzhammermethode

Aber wie sagt man so schön? Und bist du nicht willig, so brauch‘ ich Gewalt

So mache ich es dann auch mit der Festplatte. Mit dem Programm badblocks das Bestandteil der e2fsprogs ist lasse ich die komplette Festplatte durchsuchen. Das Programm liest dabei den Inhalt eines Blocks aus, schreibt ein Testpattern, prüft und schreibt am Schluss wieder den ursprünglichen Inhalt. Sollte es dabei zu Problemen kommen werden diese vom Festplattencontroller erkannt der den entsprechenden Sektor durch einen Reservesektor ersetzt. In der Theorie ist das sicher. Allerdings muss man bei dem Test bedenken, dass dieser Stress der Festplatte den Todesstoß versetzten kann wenn die Hardware schon angeschlagen ist. Und zum anderen gibt es auch die (geringe) Wahrscheinlichkeit von Bitfehlern die nicht erkannt werden. Bei Desktop-Festplatten sind das laut Spezifikation weniger als 2-14.

Wer ein gutes Backup hat kann das Programm nun laufen lassen:

Mit den Default-Einstellungen war das Programm bei mir sehr langsam. Daher lasse ich statt den default 64 Blöcken ganze 262144 Blöcke pro Schritt einlesen. Der Durchsatz stieg dabei auf annehmbare 130 MiB/s. Trotzdem muss man sich darauf gefasst machen, dass der Test ziemlich lange dauert, vor allem bei größeren Festplatten.

Als Ergebnis sollten dann die „pending“ Sektoren verschwunden sein, eventuell sind die Anzahl der „reallocated“ Sektoren höher geworden.

9 Gedanken zu „Defekte Sektoren reparieren unter Linux mit badblocks

    • Jedes „-v“ erhöht den verbosity-level. Du erhälst dann an einigen Stellen zusätzliche Ausgaben. Da es doch leicht wie ein „w“ aussehen kann werde ich die Optionen trennen. An der Funktion der Programms ändert sich nichts, nur an den Ausgaben.

  1. Hallo Stephan Knauß,
    in meinem System ist eine 1 TB Festplatte ausgefallen. Eine Datensicherung liegt vor und ich habe die gleiche Festplatte, Hersteller, Typ usw. hier vorliegen. Die Festplatte ist bezeichnet mit sdb 1 u. 2, also 2 Partitionen. Ich benutze Linux Deb 10.x. Wie kann ich die defekte gegen die neu Festplatte austauschen, alles was ich bisher gefunden habe bezieht sich immer auf ein Raid 1 -System. Ich wäre für eine Schrittweise Anleitung dankbar.

    gruß u. Dank

    Josef

    • Hallo,
      dein Kommentar bezieht sich auf ein allgemeines Problem und hat nichts mit diesem Artikel zu tun. Da eine Datensicherung vorliegt empfehle ich, dort nach Dokumentation zu suchen. Es gibt sehr viele verschiedene Arten eine Datensicherung vorzunehmen und entsprechend unterscheidet sich dann auch wie man ein Restore durchführt. Wenn dateiweise gesichert wurde, dann formatiert man die neue Platte und spielt die Dateien zurück. Bei einem Vollständigen image (z.B. mit dd) spielt man es auf gleiche Art zurück. Grundsätzlich kommt es aber auf die konkrete Situation im Einzelfall an.
      Weiterführende Literatur: https://debian-handbook.info/browse/de-DE/stable/sect.backup.html und https://wiki.ubuntuusers.de/Datensicherung/

    • für so einen Fall kann man sehr gut das program DD verwenden :
      dd if= of= bs=446 –> bootpartition einzeln klonen BZW. Sichern bs=512 ist der –standart wert und damit es schneller bei großen Partitionen geht bs=1M so kannst du die ganze platte oder Partition für Partition klonen/sichern , unter ubuntu kann man die Images wie eine ISO einbinden und auf einzelne Daten zugreifen . das ganze könnte z.b. so aussehen –> dd if=/dev/sda of=/home/duda/backup.img bs=1M status=progress && sync

  2. Danke für die Gute Doku , sie wahr verständlich und vor allem Fehlerfrei. Unter Linux rechnet man Zwar schon damit (open source) das nicht alles perfekt dokumentiert ist. Aber nicht mal Microsoft Schaft es in seinen Test Lab unterlagen für den MCSA kurs die Klick klick fertig Konfigurationen so leicht verdaulich zu erklären. Und vor allem hat alles beim ersten versuch sauber funktioniert, weiter so.

  3. Danke für diesen Beitrag, welcher auch nach Jahren der Erstveröffentlichung lesenswert ist.

    Bei meiner WD Festplatte (WDC WD40EZRZ-00WN9B0) zeigt smartctl – a /dev/sda die logische Blockadresse an (LBA) bei welcher der Fehler auftrat, siehe Beispiel. Hier traten die ersten Fehler bei der 105 Betriebsstunde auf.

    […]
    SMART Self-test log structure revision number 1
    Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
    # 1 Extended offline Completed: read failure 90% 105 155405192
    # 2 Extended offline Completed: read failure 90% 105 155405192
    # 3 Conveyance offline Completed without error 00% 96 –
    […]

  4. Der Mauszeiger bewegt sich, klicke ich etwas an, dauert es Minuten, bis es aufgeht? Sind das defekte Cluster? Mus die Platte (500 MB) raus?
    Habe teilweise auf einer 2den Platte über USB gesichert, es dauert zu lange. Das E-Mail Programm (Thunderbird) lässt sich nicht nicht sichern? LINUX Mint 18.1

    • Das lässt sich anhand der beschriebenen Symptome nicht sagen. Du könntest schauen, ob es Fehlermeldungen vom Kernel gibt, die auf i/o Fehler hindeuten. Aber mal ehrlich: Eine 500MB Platte? Wenn das nicht gerade ein Museumsstück ist, das originalgetreu bleiben soll solltest du das durch was zeitgemäßes ersetzen. Oder sollten es vielleicht GB sein? Aber auch hier ist das schon recht wenig.

      Neben einem Blick in dmesg könntest du auch mal die SMART Daten auslesen. Wenn es wirklich Lesefehler sind dürfte die Platte hier etwas über ihre Gesundheit vermerkt haben.

      Bei den beschriebenen Symptomen ist ein Backup dringend angeraten. Die wichtigsten Daten zuerst sichern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.