Frage Wie repariere ich einfach einen einzelnen unlesbaren Block auf einer Linux-Festplatte?


Mein Linux-System hat begonnen, SMART-Fehler in das Syslog zu werfen. Ich habe es aufgespürt und glaube, dass das Problem ein einzelner Block auf der Festplatte ist. Wie gehe ich vor, damit die Festplatte diesen einen Block neu zuweisen kann? Ich würde gerne wissen, welche Datei dabei zerstört wurde. (Ich bin mir bewusst, dass, wenn ein Block auf einer Festplatte ausfällt, andere wahrscheinlich folgen werden; ich habe eine gute laufende Sicherung und möchte nur versuchen, diese Festplatte funktionsfähig zu halten.)

Die Suche im Internet führt zu das Bad Block HOWTO, die einen manuellen Prozess auf einer nicht bereitgestellten Festplatte beschreibt. Es scheint kompliziert und fehleranfällig. Gibt es ein Tool, um diesen Prozess unter Linux zu automatisieren? Meine einzige andere Möglichkeit ist das Diagnosewerkzeug des Herstellers, aber ich nehme an, dass ich den schlechten Block überlisten werde, ohne darüber zu berichten, was zerstört wurde. Im schlimmsten Fall sind dies Dateisystem-Metadaten.

Die betreffende Festplatte ist die primäre Systempartition. Verwenden von ext3fs und LVM. Hier ist das Fehlerprotokoll von syslog und das relevante 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 auf Pastebin.


19
2018-01-20 01:10


Ursprung


Ich dachte, die Disk-Firmware wird den fehlerhaften Block beim Lesen automatisch neu zuordnen, also wurde es theoretisch schon gemacht. Führen Sie wie unten angegeben fsck (oder die korrekte Entsprechung für Ihren FS) aus, um sicherzustellen, dass der überlagerte FS noch stabil ist. - BuildTheRobots
Mein Verständnis ist Festplatten-Firmware wird nur den Block neu zuordnen schreibennicht auf gelesen. Also muss ich wirklich einen Schreibvorgang auf den fraglichen Block erzwingen. - Nelson
Ich habe diese Diskette endlich zurückgezogen. Es lief mehrere Monate gut, aber nach dem 5. Lesefehler gab ich es auf. - Nelson


Antworten:


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)


12
2018-01-25 17:44



Ooh, das ist eine neue Flagge! Das wird definitiv dafür sorgen, den schlechten Block neu zuzuweisen. Jetzt brauche ich nur noch einen einfachen Weg, um herauszufinden, worum es geht. - Nelson
Nachdem ich diese Methode verwendet habe, um eine Festplatte zu reparieren, kann ich sagen, dass dies die richtige Methode ist. Das Erzwingen eines Schreibvorgangs in dem fraglichen Sektor zwingt das Laufwerk, sich dem Sektor zu stellen und entweder (a) einen erfolgreichen Schreibvorgang zu erhalten oder (b) mit einer permanenten schlechten Sekunde zusammen mit einem Remap zu enden. - Avery Payne
Großartig! Und so viel einfacher als smartmontools.sourceforge.net/badblockhowto.html - Janning
Es ist seltsam, dass dieser iterative Prozess (Suchen nach dem nächsten schlechten Sektor durch SMART und Erzwingen einer Neuzuordnung) nicht mit einem einfachen Dienstprogramm automatisiert wird. - imz -- Ivan Zakharyaschev


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

Erstens werden die meisten fehlerhaften Blöcke bei Lesevorgängen erkannt, nicht bei Schreibvorgängen. Schreibvorgänge werden blind ausgeführt, dh die Daten werden ohne Überprüfung geschrieben. Bei einem Schreibvorgang, wenn das Medium fehlerhaft ist, werden Sie es also erst wissen, wenn der Host diesen Sektor liest. Es gibt einen kleinen Teil des Sektors (den Sektorheader), der bei Schreibvorgängen gelesen wird, um den richtigen Sektor zu lokalisieren, so dass das Laufwerk den Sektor neu zuordnen und mit den empfangenen Daten schreiben wird, wenn ein Fehler beim Lesen des Sektorheaders auftritt aus dem Schreibbefehl. Aber die überwiegende Mehrheit der fehlerhaften Blöcke wird bei Lesevorgängen erkannt, und nur weil ein Schreibvorgang für einen Sektor erfolgreich ist, heißt das nicht, dass der Datenträger gut ist oder dass der Sektor neu zugewiesen wurde.

Nun zur Neuzuordnung von fehlerhaften Blöcken (auch Neuzuweisung genannt). Ja, normalerweise wird das Laufwerk versuchen, einen Sektor neu zuzuweisen, wenn der Fehler schlecht genug ist (d. H. Der ECC-Fehler ist schlecht genug), aber das Laufwerk konnte die Daten nach der ECC-Korrektur immer noch wiederherstellen. Normalerweise geschieht dies automatisch. Die einzige Ausnahme ist, dass der Host dem Laufwerk zuvor gesagt haben könnte, keine automatischen Neuzuweisungen vorzunehmen, aber dies wird selten gemacht.

Was passiert, wenn das Laufwerk liest und die Daten nicht wiederherstellen kann? Nichts. Der Fehler wird an den Host gemeldet, aber es erfolgt keine Neuzuweisung. Das Problem ist, dass das Laufwerk den Sektor neu zuweisen kann, aber es hat nicht die geringste Ahnung, welche Daten in den neu zugewiesenen Sektor geschrieben werden sollen. Wenn es nur eine Menge Nullen geschrieben hat, und dann der Sektor erneut gelesen wurde, würde es alle Nullen zurückgeben ohne irgendeinen Hinweis darauf, dass die Daten nicht gültig waren. Dies ist im Wesentlichen dasselbe wie Datenkorruption. Das Laufwerk kann sich nicht darauf verlassen, dass der Host Fehler aus verschiedenen Gründen verfolgt (z. B. was ist, wenn das Laufwerk auf einen neuen Host verschoben wurde?). Daher ist es am besten, nichts zu tun, wenn die Daten " t wiederhergestellt werden.

Moderne Laufwerke speichern jedoch den Speicherort des fehlerhaften Sektors, wenn dieser nicht neu zugewiesen werden kann. Die Anzahl der fehlerhaften Sektoren, die auf die Neuzuweisung warten, kann in den SMART-Daten gefunden werden. Was passiert, wenn eine Schreiboperation in einen der fehlerhaften Sektoren ausgeführt wird, die auf die Neuzuweisung warten, wird die Neuzuweisung vorgenommen, da das Laufwerk jetzt gültige Daten zum Schreiben nach der Neuzuweisung hat. Wenn also Leute sagen, dass Schreiben in einen schlechten Sektor es neu verteilt, ist das wirklich nur die halbe Geschichte. Das Laufwerk muss zuerst gelesen werden, damit das Laufwerk alle fehlerhaften Sektoren ermitteln 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 die Neuzuweisung warten, aber Sie haben das Laufwerk nicht unbedingt von allen fehlerhaften Sektoren gelöscht. Wenn Sie also ein Laufwerk von allen fehlerhaften Sektoren löschen möchten, sollten Sie zuerst das gesamte Laufwerk lesen und anschließend das gesamte Laufwerk schreiben (das wird natürlich alle vorherigen Daten auf dem Laufwerk zerstören).

Es gibt andere Möglichkeiten, mit schlechten Blöcken umzugehen, die nicht neu zugeordnet werden können. Wenn das Laufwerk Teil einer redundanten RAID-Konfiguration ist (d. H. Alles außer 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 Neuzuweisungsblockbefehl, den der Host verwenden kann, um die Neuzuweisung zu erzwingen, selbst wenn keine gültigen Daten zum Schreiben in den Block vorhanden sind, aber seine Verwendung ziemlich niedrig ist.


27
2017-09-23 01:24



Vielleicht ist es auch erwähnenswert, dass zumindest einige Seagate-Festplatten Write-Read-Verify unterstützen, das mit aktiviert werden kann hdparm -R (unter der Annahme eines einigermaßen aktuellen hdparm). Dies führt zu einer erheblichen Leistungseinbuße bei der Schreibleistung (ungefähr halbierter Schreibdurchsatz und Schreib-IOPS, da jeder Schreibvorgang nun einen nachfolgenden Lesevorgang verursacht), aber wenn Ihre Hardware dies unterstützt und Ihre Arbeitslast lesend ist, dann kann dies sehr praktikabel sein vorbeugend messen. - α CVn


Ich denke, alles, was Sie tun müssen, ist:

e2fsck -c /dev/hda1

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

e2fsck -c -c /dev/hda1

einen (langsameren) zerstörungsfreien Lese-Schreib-Test durchzuführen. Es muss immer noch deaktiviert werden. Ich denke nicht, dass dies Ihnen Details über verlorene Daten geben wird.


2
2018-01-20 01:20



Aber es ist schade, dass das nicht die Informationen von SMART über die schlechten Blöcke zu verwenden scheint. Ich frage mich, warum es kein fsck-Tool gibt, das die fehlerhaften Blockinformationen von SMART verwendet und versucht, sie zu vermeiden oder die betroffenen Dateien wie in beschrieben zu reparieren smartmontools.sourceforge.net/badblockhowto.html oder serverfault.com/a/106130/68972 ... - imz -- Ivan Zakharyaschev


Michael hat es richtig gemacht und in den meisten Fällen würde ich nur sagen, das Laufwerk ist billig. Wenn Sie jedoch keine Sicherungskopien haben und keine wichtigen Daten vom Laufwerk abrufen können, oder wenn Sie nur versuchen möchten, das Laufwerk zu reparieren, sollten Sie es versuchen Spinriteauf höchster Ebene.

Ich hatte eine Laptop-Festplatte, die vor ein paar Jahren ein paar Geräusche machte. Badblocks zeigten, dass auf dem Laufwerk 118 fehlerhafte Blöcke für den Endbenutzer sichtbar waren. Da ich bereits eine Kopie von SpinRite hatte, entschied ich mich, es auszuprobieren, bevor ich eine neue Festplatte kaufte. Nach dem Ausführen von Spinrite auf dem Laufwerk zeigten Badblocks 0 schlechte Blöcke und die Geräusche hörten auf. Die Fahrt hatte seit über zwei Jahren seitdem gearbeitet.


2
2018-01-20 02:10



Nelson, willst du nur jede Stimme abstimmen, die du nicht hören willst? Ein gesundes Laufwerk wird automatisch einen fehlerhaften Block neu zuordnen. Wenn Sie alles tun müssen, um dies zu erzwingen, ist das Laufwerk nicht mehr gesund und sollte ersetzt werden. - 3dinfluence
Nein, ich habe nur eine Antwort abgelehnt, weil sie meine Frage nicht beantwortet hat. Du hast Spinrite vorgeschlagen, danke! Mein Verständnis ist eine gesunde Willenskraft nicht ordnen Sie einen fehlerhaften Sektor neu an, bis er geschrieben wurde. Ich versuche, den einfachsten Weg zu finden, um einen Schreibvorgang zu erzwingen. Gehen Sie zu Matthews Vorschlag und schauen Sie, ob fsck schlau genug ist, es zu tun. - Nelson
Entschuldige, dass ich voreilige Schlüsse gezogen habe, nachdem ich zwei Antworten gesehen habe, die schnell abgelehnt wurden, und du antwortest auf die andere Antwort, von der ich annahm, dass du es warst. - 3dinfluence
Sie haben Recht, dass die Neuzuordnung des fehlerhaften Sektors geschieht, wenn ein Schreibvorgang in einem Block fehlschlägt. Wenn Sie nur einen beschädigten Block haben, was das Dateisystem betrifft, dann kann fsck Ihr Problem lösen, wenn der Block ein Metadatenblock ist. fsck scannt und korrigiert nur Fehler in den Metadaten. Es gibt also keine Garantien für die Daten selbst. Die Next-Gen-Dateisysteme wie BTRFS und ZFS können erkennen und wenn Sie Redundanz haben korrekte Datenfehler. Spinrite würde dies auch beim Lesen erzwingen, schreibt dann die invertierten Daten, liest sie erneut und invertiert dann die Daten für jeden Block als Teil seines Scans. - 3dinfluence


Wenn Sie Sicherungskopien haben und Sie wissen, dass dies ein logischer Fehler und kein physikalischer Fehler ist, dann ist der beste Weg dies zu tun, die Platte auf Null zu setzen.

Ich würde MHDD verwenden, es ist ziemlich einfach zu bedienen und solange Sie daran denken, Ihre Festplatte in Bios zu IDE-Emulation und dann zurück zu AHCI zu setzen, wenn Ihre Arbeit erledigt ist, müssen Sie sich keine Sorgen machen.

Sobald Sie auf MHDD gestartet haben, wählen Sie den Laufwerkstyp im ERASE-Befehl und bestätigen Sie Ihre Auswahl.

Holen Sie sich Coffie das könnte eine Weile dauern.

Nachdem Drive auf Null gesetzt wurde, führen Sie den Scan-Vorgang (f4) aus, wobei Remap auf ON gesetzt ist (Standard ist deaktiviert). Wenn es immer noch Probleme mit dem Laufwerk gibt (es würde bedeuten, dass es einen physischen Schaden auf dem Plattenteller gibt und das Laufwerk auf einer steilen Abwärtsneigung steht), wird diese Option "reparieren", indem beschädigte Bereiche auf gesunde Teile des Laufwerks abgebildet werden.

Wenn es keine UNC-Fehler gibt, dann gratuliere Ihnen und Ihrem Antrieb, dass Sie noch Jahre lang Freunde sein können.


0
2018-03-09 11:48





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


-1
2018-01-20 01:58



Ich war explizit darüber informiert, dass die Festplatte fehlerhaft ist und dass ich Backups habe, um das Risiko zu vermeiden. - Nelson
Das bedeutet nur, dass Sie bereit sind zu spielen. Ich denke nicht, dass das bedeutet, dass es nicht ersetzt werden sollte, nur dass Sie bereit sind, diesen Rat zu ignorieren. Ich bezweifle, dass irgendwelche Backups Ihr System vor sich selbst schützen können, wenn die Festplatte auseinander fällt, und die Dinge werden nur sehr flockig, wenn sich die Dinge verschlechtern. - Michael Graff
Diese Antwort sollte ein Kommentar sein ... Die Frage ist spezifisch und exagierend. Und deshalb ist dies keine Antwort. - Pitto