Lösung 1:
Früher habe ich Festplatten-Firmware für WD geschrieben, und ich habe einmal die Firmware geschrieben, die fehlerhafte Blöcke neu zugewiesen hat.
Erstens werden die meisten fehlerhaften Blöcke beim Lesen erkannt, nicht beim Schreiben. Schreibvorgänge erfolgen blind, d. h. die Daten werden ohne Überprüfung geschrieben. Wenn also beim Schreiben das Medium schlecht ist, wissen Sie es nicht, bis der Host diesen Sektor liest. Es gibt einen kleinen Teil des Sektors (den Sektor-Header), der beim Schreiben gelesen wird, um den richtigen Sektor zu lokalisieren, sodass das Laufwerk bei einem Fehler beim Lesen des Sektor-Headers den Sektor neu zuweist und ihn mit den empfangenen Daten beschreibt aus dem Schreibbefehl. Aber die überwiegende Mehrheit der fehlerhaften Blöcke wird beim Lesen erkannt, und nur weil ein Schreibvorgang in einen Sektor erfolgreich ist, bedeutet das nicht, dass das Medium in Ordnung ist oder dass der Sektor neu zugewiesen wurde.
Nun zur Neuzuweisung fehlerhafter Blöcke (auch Neuzuweisung genannt). Ja, normalerweise versucht das Laufwerk, einen Sektor neu zuzuweisen, wenn der Fehler schlimm genug ist (d. h. der ECC-Fehler ist schlimm genug), aber das Laufwerk könnte die Daten nach der ECC-Korrektur immer noch wiederherstellen. Normalerweise geschieht dies automatisch. Die einzige Ausnahme ist, dass der Host dem Laufwerk zuvor hätte sagen können, dass es keine automatischen Neuzuweisungen durchführen soll, aber das wird selten gemacht.
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 es beispielsweise nur ein paar Nullen schrieb und der Sektor dann erneut gelesen wurde, würde es alle Nullen zurückgeben, ohne dass ein Hinweis darauf bestand, dass die Daten nicht gültig waren. Dies ist im Wesentlichen dasselbe wie Datenbeschädigung. Das Laufwerk kann sich aus verschiedenen Gründen nicht darauf verlassen, dass der Host Fehler verfolgt (was zum Beispiel, wenn das Laufwerk auf einen neuen Host verschoben wurde?). Daher ist die beste Vorgehensweise, nichts zu tun, wenn die Daten es können. nicht wiederhergestellt werden.
Moderne Laufwerke speichern jedoch den Speicherort des fehlerhaften Sektors, wenn er nicht neu zugewiesen werden kann. Die Anzahl der fehlerhaften Sektoren, die auf eine Neuzuweisung warten, finden Sie in den SMART-Daten. Wenn in einen der fehlerhaften Sektoren geschrieben wird, die auf eine Neuzuweisung warten, wird die Neuzuweisung durchgeführt, da das Laufwerk jetzt über gültige Daten verfügt, um nach der Neuzuweisung darauf zu schreiben. Wenn also Leute sagen, dass das Schreiben in einen fehlerhaften Sektor ihn neu zuweist, 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 zugewiesen werden können. So können Sie ein ganzes Laufwerk schreiben, und die SMART-Daten sagen, dass keine fehlerhaften Sektoren auf eine Neuzuweisung warten, aber Sie haben das Laufwerk nicht unbedingt von allen fehlerhaften Sektoren befreit. Wenn Sie also ein Laufwerk wirklich von allen fehlerhaften Sektoren befreien möchten, lesen Sie am besten zuerst das gesamte Laufwerk und schreiben dann das gesamte Laufwerk (natürlich werden dadurch alle vorherigen Daten auf dem Laufwerk zerstört).
Es gibt andere Möglichkeiten, mit fehlerhaften Blöcken umzugehen, die nicht neu zugewiesen werden können. Wenn das Laufwerk Teil einer redundanten RAID-Konfiguration ist (d. h. etwas anderes als RAID 0), sollte die RAID-Software die Daten für einen fehlerhaften Sektor automatisch von den anderen Laufwerken wiederherstellen und sie in den neu zugewiesenen Sektor schreiben. SCSI-Festplatten haben einen expliziten Befehl zum Neuzuweisen von Blöcken, mit dem der Host die Neuzuweisung erzwingen kann, selbst wenn keine gültigen Daten zum Schreiben in den Block vorhanden sind, aber seine Verwendung ist ziemlich niedrig.
Lösung 2:
Sie könnten es mit hdparm --write-sector <LBA> /dev/ice
versuchen .
Ich kenne keine andere Möglichkeit, dies zu tun - Sie müssen die LBA manuell in Dateisystemblöcke konvertieren (wie Sie bereits gefunden haben)
Lösung 3:
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
um einen (langsameren) zerstörungsfreien Lese-Schreib-Test durchzuführen. Es muss noch demontiert werden. Ich glaube jedoch nicht, dass dies Ihnen Details zu verlorenen Daten geben wird.
Lösung 4:
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 wichtige Daten nicht von der Festplatte entfernen können oder einfach nur versuchen möchten, die Festplatte zu reparieren, können Sie es mit Spinrite auf höchster Ebene versuchen.
Ich hatte ein Laptop-Laufwerk, das vor ein paar Jahren anfing, Geräusche zu machen. Badblocks zeigte, dass das Laufwerk ungefähr 118 fehlerhafte Blöcke hatte, die für den Endbenutzer sichtbar waren. Da ich bereits eine Kopie von SpinRite hatte, beschloss ich, es auszuprobieren, bevor ich ein neues Laufwerk kaufte. Nach dem Ausführen von Spinrite auf dem Laufwerk zeigten Badblocks 0 Bad Blocks und die Geräusche hörten auf. Seitdem funktionierte das Laufwerk über zwei Jahre lang.