Wie kann ich auf einfache Weise einen einzelnen unlesbaren Block auf einer Linux-Festplatte reparieren?


22

Mein Linux-System hat begonnen, SMART-Fehler in das Syslog zu werfen. Ich habe es aufgespürt und glaube, das Problem ist ein einzelner Block auf der Festplatte. Wie kann ich die Festplatte auf einfache Weise dazu bringen, diesen einen Block neu zuzuweisen? Ich möchte wissen, welche Datei dabei zerstört wurde. (Mir ist bewusst, dass, wenn ein Block auf einer Festplatte ausfällt, wahrscheinlich andere folgen werden. Ich habe ein gutes laufendes Backup und möchte nur versuchen, diese Festplatte funktionsfähig zu halten.)

Durchsuchen des Webs führt zum HOWTO für fehlerhafte Blöcke , in dem ein manueller Vorgang auf einer nicht bereitgestellten Festplatte beschrieben wird. Es scheint kompliziert und fehleranfällig. Gibt es ein Tool, um diesen Prozess unter Linux zu automatisieren? Meine einzige andere Option ist das Diagnosetool des Herstellers , aber ich gehe davon aus, dass der fehlerhafte Block blockiert wird, ohne dass gemeldet wird, was zerstört wurde. Im schlimmsten Fall handelt es sich möglicherweise um Dateisystem-Metadaten.

Der betreffende Datenträger ist die primäre Systempartition. Verwendung von ext3fs und LVM. Hier ist das Fehlerprotokoll von syslog und das entsprechende Bit von smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Es gibt einen vollständigen Smartctl-Dump im Pastebin .


Ich dachte, die Festplattenfirmware ordnet den fehlerhaften Block beim Lesen automatisch neu zu, so dass dies theoretisch bereits geschehen ist. Führen Sie, wie unten angegeben, fsck (oder das richtige Äquiv. Für Ihren FS) aus, um sicherzustellen, dass der überlagernde FS noch stabil ist.
BuildTheRobots

2
Meines Wissens nach wird die Festplattenfirmware den Block nur beim Schreiben neu zuordnen , nicht beim Lesen. Also muss ich wirklich einen Schreibzugriff auf den fraglichen Block erzwingen.
Nelson

1
Ich habe diese Platte endgültig aus dem Programm genommen. Es lief einige Monate lang einwandfrei, aber nach dem 5. Lesefehler gab ich es auf.
Nelson

Antworten:


12

Du könntest es versuchen hdparm --write-sector <LBA> /dev/ice.

Ich kenne keine andere Möglichkeit, dies zu tun - Sie müssen die LBA manuell in Dateisystemblöcke konvertieren (wie Sie bereits gefunden haben)


Oh, das ist eine neue Flagge! Das wird sich definitiv darum kümmern, den fehlerhaften Block neu zuzuweisen. Jetzt brauche ich nur noch einen einfachen Weg, um herauszufinden, was es anrichten wird.
Nelson

3
Nachdem ich diese Methode zum Reparieren einer Festplatte verwendet habe, kann ich sagen, dass dies die richtige Methode ist. Durch das Erzwingen eines Schreibvorgangs für den betreffenden Sektor wird das Laufwerk gezwungen, sich dem Sektor zuzuwenden und entweder (a) einen erfolgreichen Schreibvorgang zu erhalten oder (b) eine permanente schlechte Sekunde sowie eine Neuzuordnung zu erhalten.
Avery Payne

Groß! Und so viel einfacher als smartmontools.sourceforge.net/badblockhowto.html
Janning

Es ist seltsam , dass dieser iterative Prozess (der für den nächsten schlechten Sektor durch SMART suchen und zwingt sie Neuzuweisung) nicht mit einem einfachen Dienstprogramm automatisiert ..!
IMZ - Ivan Zakharyaschev

32

Ich habe früher Plattenfirmware für WD geschrieben und einmal die Firmware geschrieben, die fehlerhafte Blöcke neu zugewiesen hat.

Erstens werden die meisten fehlerhaften Blöcke beim Lesen und nicht beim Schreiben erkannt. Das Schreiben erfolgt blind, dh die Daten werden ohne Prüfung geschrieben. Wenn der Datenträger beim Schreiben fehlerhaft ist, werden Sie ihn nicht kennen, bis der Host einen Lesevorgang für diesen Sektor ausführt. Es gibt einen kleinen Teil des Sektors (den Sektor-Header), der beim Schreiben gelesen wird, um den richtigen Sektor zu lokalisieren. Wenn beim Lesen des Sektor-Headers ein Fehler auftritt, weist das Laufwerk den Sektor neu zu und schreibt ihn mit den empfangenen Daten aus dem Schreibbefehl. Die überwiegende Mehrheit der fehlerhaften Blöcke wird jedoch beim Lesen erkannt. Nur weil ein Schreibvorgang für einen Sektor erfolgreich ist, bedeutet dies nicht, dass der Datenträger in Ordnung ist oder der Sektor neu zugewiesen wurde.

Nun zur Neuzuweisung von fehlerhaften Blöcken (auch als Neuzuweisung bezeichnet). Ja, normalerweise versucht das Laufwerk, einen Sektor neu zuzuweisen, wenn der Fehler schwerwiegend genug ist (dh der ECC-Fehler ist schwerwiegend genug), aber das Laufwerk kann die Daten nach der ECC-Korrektur immer noch wiederherstellen. Normalerweise geschieht dies automatisch. Die einzige Ausnahme besteht darin, dass der Host das Laufwerk zuvor angewiesen hat, keine automatischen Neuzuordnungen vorzunehmen, dies wird jedoch selten durchgeführt.

Was passiert also, wenn das Laufwerk einen Lesevorgang durchführt und die Daten nicht wiederherstellen kann? Nichts. Der Fehler wird dem Host gemeldet, aber es wird keine Neuzuweisung vorgenommen. Das Problem ist, dass das Laufwerk den Sektor neu zuweisen könnte, aber nicht die geringste Ahnung hat, welche Daten in den neu zugewiesenen Sektor geschrieben werden sollen. Wenn nur eine Reihe von Nullen geschrieben und der Sektor dann erneut gelesen wird, werden alle Nullen zurückgegeben, ohne dass darauf hingewiesen wird, dass die Daten ungültig sind. Dies entspricht im Wesentlichen der Beschädigung von Daten. Das Laufwerk kann sich aus verschiedenen Gründen nicht darauf verlassen, dass der Host die Fehler protokolliert (z. B. wenn das Laufwerk auf einen neuen Host verschoben wurde). nicht wiederhergestellt werden.

Moderne Laufwerke speichern jedoch die Position des fehlerhaften Sektors, wenn er nicht neu zugeordnet werden kann. Die Anzahl der fehlerhaften Sektoren, die auf eine Neuzuweisung warten, können Sie den SMART-Daten entnehmen. Wenn in einen der fehlerhaften Sektoren, die auf eine Neuzuweisung warten, geschrieben wird, erfolgt die Neuzuweisung, da das Laufwerk nach der Neuzuweisung über gültige Daten zum Schreiben verfügt. Wenn die Leute sagen, das Schreiben in einen schlechten Sektor würde ihn neu zuordnen, ist das wirklich nur die halbe Wahrheit. Das Laufwerk muss zuerst gelesen werden, damit das Laufwerk alle fehlerhaften Sektoren erkennen kann, die nicht automatisch neu zugeordnet werden können. Auf diese Weise können Sie ein gesamtes Laufwerk schreiben, und die SMART-Daten geben an, dass keine fehlerhaften Sektoren auf eine Neuzuweisung warten. Sie haben jedoch nicht unbedingt alle fehlerhaften Sektoren aus dem Laufwerk entfernt. Wenn Sie also wirklich alle fehlerhaften Sektoren löschen möchten,

Es gibt andere Möglichkeiten, mit fehlerhaften Blöcken umzugehen, die nicht neu zugeordnet werden können. Wenn das Laufwerk Teil einer redundanten RAID-Konfiguration ist (dh nicht RAID 0), sollte die RAID-Software die Daten für einen fehlerhaften Sektor automatisch von den anderen Laufwerken wiederherstellen und in den neu zugewiesenen Sektor schreiben. SCSI-Datenträger verfügen über einen expliziten Befehl zum erneuten Zuweisen von Blöcken, mit dem der Host die Neuzuweisung erzwingen kann, selbst wenn keine gültigen Daten zum Schreiben in den Block vorhanden sind, die Verwendung jedoch recht gering ist.


1
Erwähnenswert ist auch, dass zumindest einige Seagate-Festplatten Write-Read-Verify unterstützen, das mithilfe von hdparm -R(unter der Annahme eines relativ aktuellen HDParms) aktiviert werden kann. Dies führt zu einer erheblichen Beeinträchtigung der Schreibleistung (etwa die Halbierung des Schreibdurchsatzes und des Schreib-IOPS, da jeder Schreibvorgang jetzt einen nachfolgenden Lesevorgang erfordert). Wenn Ihre Hardware dies jedoch unterstützt und Ihre Arbeitslast stark ausgelesen wird, kann dies eine sehr praktikable vorbeugende Maßnahme sein.
ein CVn

2

Ich denke alles was Sie tun müssen ist:

e2fsck -c /dev/hda1

Angenommen, / dev / hda1 ist die (nicht gemountete) Partition. Oder:

e2fsck -c -c /dev/hda1

einen (langsameren) zerstörungsfreien Lese- / Schreibtest durchführen. Es muss noch abmontiert werden. Ich denke jedoch nicht, dass dies Ihnen Details über verlorene Daten geben wird.


Aber es ist schade, dass die Informationen von SMART über die Bad-Blocks anscheinend nicht verwendet werden. Ich frage mich, warum es kein fsck-Tool gibt, das die fehlerhaften Blockinformationen von SMART verwendet und versucht, diese zu umgehen oder die betroffenen Dateien zu reparieren, wie in smartmontools.sourceforge.net/badblockhowto.html oder serverfault.com/a/106130/68972 beschrieben . ..
imz - Ivan Zakharyaschev

2

Michael hat es richtig und in den meisten Fällen würde ich sagen, ersetzen Sie einfach das Laufwerk, sie sind billig. Wenn Sie jedoch keine Backups haben und keine wichtigen Daten vom Laufwerk abrufen können oder nur versuchen möchten, das Laufwerk zu reparieren, sollten Sie Spinrite auf höchster Ebene verwenden.

Ich hatte ein Laptop-Laufwerk, das vor ein paar Jahren anfing, Geräusche zu machen. Badblocks zeigten, dass auf dem Laufwerk 118 oder mehr fehlerhafte Blöcke für den Endbenutzer sichtbar waren. Da ich bereits eine Kopie von SpinRite besaß, entschloss ich mich, es vor dem Kauf eines neuen Laufwerks auszuprobieren. Nachdem Spinrite auf dem Laufwerk ausgeführt wurde, zeigten Badblocks 0 fehlerhafte Blöcke und die Geräusche hörten auf. Die Fahrt hatte seit über zwei Jahren gearbeitet.


Nelson, stimmen Sie einfach jede Antwort ab, die Sie nicht hören möchten? Ein fehlerfreies Laufwerk ordnet einen fehlerhaften Block automatisch neu zu. Wenn Sie alles tun müssen, um dies zu erzwingen, ist das Laufwerk nicht mehr funktionsfähig und sollte ersetzt werden.
3 Einfluss

Nein, ich habe nur eine Antwort abgelehnt, weil sie meine Frage nicht beantwortet hat. Du hast Spinrit vorgeschlagen, danke! Mein Verständnis ist , ein gesundes Laufwerk wird nicht einen schlechten Sektor neu zuordnen , bis es geschrieben ist. Ich versuche, den einfachsten Weg zu finden, um ein Schreiben zu erzwingen. Gehen Sie zu Matthews Vorschlag und prüfen Sie, ob fsck klug genug ist, dies zu tun.
Nelson

Tut mir leid, dass ich zu den Schlussfolgerungen gekommen bin, nachdem ich gesehen habe, dass 2 Antworten schnell abgelehnt wurden und Sie auf die andere Antwort geantwortet haben, von der ich angenommen habe, dass Sie es waren.
3 Einfluss

2
Sie haben Recht, dass die Neuzuordnung des fehlerhaften Sektors auftritt, wenn ein Schreibvorgang auf einen Block fehlschlägt. Wenn Sie nur einen beschädigten Block haben, was das Dateisystem betrifft, kann fsck Ihr Problem beheben, wenn der betreffende Block ein Metadatenblock ist. fsck scannt und korrigiert wirklich nur Fehler in den Metadaten. Es wird also keine Garantie für die Daten selbst übernommen. Dateisysteme der nächsten Generation wie BTRFS und ZFS können Datenfehler erkennen und korrigieren, wenn Redundanz vorliegt. Spinrite würde dies auch erzwingen, wenn es liest, dann die invertierten Daten schreibt, erneut liest und dann die Daten in jedem Block als Teil seines Scans zurückinvertiert.
3 Einfluss

1

Wenn Sie über Backups verfügen und wissen, dass dies ein logischer Fehler und kein physikalischer Fehler ist, ist es am besten, die Disc auf Null zu setzen.

Ich würde MHDD verwenden, es ist ziemlich einfach zu verwenden und solange Sie daran denken, Ihre Festplatte im BIOS auf IDE-Emulation und dann wieder auf AHCI zu setzen, wenn Ihre Arbeit erledigt ist, brauchen Sie sich keine Sorgen zu machen.

Sobald Sie mit MHDD gebootet haben, wählen Sie Ihren Laufwerkstyp im ERASE-Befehl aus und bestätigen Sie Ihre Auswahl.

Holen Sie sich Kaffee, das kann eine Weile dauern.

Nachdem das Laufwerk auf Null gestellt wurde, führen Sie einen Scan (F4) mit der Einstellung "Remap" auf "ON" (Standardeinstellung ist "Off") aus. Wenn es immer noch Probleme mit dem Laufwerk gibt (dies würde bedeuten, dass der Plattenteller physikalisch beschädigt ist und sich das Laufwerk in einem steilen Gefälle befindet), werden diese Probleme mit dieser Option "behoben", indem beschädigte Bereiche gesunden Teilen des Laufwerks zugeordnet werden.

Wenn es keine UNC-Fehler gibt, können Sie und Ihr Laufwerk noch viele Jahre lang befreundet sein.


-1

Wenn die Festplatte defekt ist, ersetzen Sie sie. Es ist das Risiko nicht wert, dass es mehr auseinander fällt.


Ich habe ausdrücklich gewusst, dass die Festplatte defekt ist, und habe Sicherungen erstellt, um das Risiko zu vermeiden.
Nelson

2
Das bedeutet nur, dass Sie bereit sind zu spielen. Ich denke nicht, dass dies bedeutet, dass es nicht ersetzt werden sollte, nur dass Sie bereit sind, diesen Rat zu ignorieren. Ich bezweifle, dass Backups Ihr System vor sich selbst retten können, wenn die Festplatte auseinanderfällt, und die Dinge werden einfach sehr schuppig, wenn sich die Dinge verschlechtern.
Michael Graff

3
Diese Antwort sollte ein Kommentar sein ... Die Frage ist spezifisch und exaustiv. Und deshalb ist das keine Antwort.
Pitto 18.01.12
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.