Wie mache ich die Zuordnung meiner Festplatte zu unlesbaren Sektoren

10

Laut smartd habe ich eine Festplatte mit einigen ausstehenden unlesbaren Sektoren. Was wäre der einfachste Weg, um die Festplatte neu zuzuordnen und zu verhindern, dass sich smartd beschwert?

Heute bekomme ich jede Stunde zwei davon:

10. September 23:15:35 hylton smartd [3353]: Gerät: / dev / sdc, 1 Derzeit nicht lesbare (ausstehende) Sektoren

Das System ist ein x86-System, auf dem Ubuntu Linux 9.10 (flott) ausgeführt wird. Die Festplatte ist Teil einer LVM-Gruppe. So identifiziert smartctl die Festplatte:

Modellfamilie: Western Digital Caviar Serial ATA-Familie der zweiten Generation
Gerätemodell: WDC WD5000AAKS-00TMA0
Seriennummer: WD-WCAPW4207483
Firmware-Version: 12.01C01
Benutzerkapazität: 500.107.862.016 Byte
dkagedal
quelle
2
Dieses Problem löste sich von selbst; Die Festplatte begann sich lauter zu beschweren, also ersetzte ich sie.
Dkagedal

Antworten:

15

Ein ausstehender unlesbarer Sektor ist ein Sektor, der einen Lesefehler zurückgegeben hat und den das Laufwerk bei der ersten möglichen Gelegenheit zum erneuten Zuordnen markiert hat. Die Neuzuordnung kann jedoch erst durchgeführt werden, wenn eines von zwei Dingen eintritt:

  1. Der Sektor wird erfolgreich erneut gelesen
  2. Der Sektor wird neu geschrieben

Bis dahin steht der Sektor noch aus. Sie haben also zwei entsprechende Möglichkeiten, um damit umzugehen:

  1. Versuchen Sie weiterhin, den Sektor erneut zu lesen, bis Sie erfolgreich sind
  2. Überschreiben Sie diesen Sektor mit neuen Daten

Offensichtlich ist (1) nicht destruktiv, daher sollten Sie es wahrscheinlich zuerst versuchen. Beachten Sie jedoch, dass ein kontinuierliches Lesen aus einem fehlerhaften Bereich wahrscheinlich zu einem schnelleren Ausfall führt, wenn das Laufwerk ernsthaft ausfällt . Wenn Sie viele ausstehende Sektoren und andere Fehler haben und sich um die Daten auf dem Laufwerk kümmern, empfehle ich, diese außer Betrieb zu nehmen und das hervorragende Tool ddrescue zu verwenden, um so viele Daten wie möglich wiederherzustellen. Entsorgen Sie dann das Laufwerk.

Wenn der betreffende Sektor Daten enthält, die Sie nicht interessieren oder die aus einer Sicherung wiederhergestellt werden können, ist das Überschreiben wahrscheinlich die schnellste und einfachste Lösung. Sie können dann die neu zugewiesenen und ausstehenden Zählungen für das Laufwerk anzeigen, um sicherzustellen, dass der Sektor versorgt wurde.

Wie finden Sie heraus, was der Sektor im Dateisystem entspricht? Ich habe hier einen ausgezeichneten Artikel auf der smartmontools -Website gefunden , obwohl er ziemlich technisch und spezifisch für ext2 / 3/4 und reiser-Dateisysteme ist.

Ein einfacherer Ansatz, den ich auf einem meiner eigenen (Mac) Laufwerke verwendet habe, besteht darin find / -xdev -type f -print0 | xargs -0 ..., jede Datei auf dem System zu lesen. Notieren Sie sich die ausstehende Anzahl, bevor Sie diese ausführen. Wenn sich der Sektor in einer Datei befindet, erhalten Sie eine Fehlermeldung von dem Tool, mit dem Sie die Dateien gelesen haben (z. B. md5sum), das Ihnen den Pfad dazu zeigt. Sie können sich dann darauf konzentrieren, nur diese Datei erneut zu lesen, bis sie erfolgreich gelesen wurde. Oft löst dies das Problem, wenn es sich um eine selten verwendete Datei handelt, die nur einige Male erneut gelesen werden musste. Wenn der Fehler behoben ist oder beim Lesen aller Dateien keine Fehler auftreten, überprüfen Sie die Anzahl der ausstehenden Dateien, um festzustellen, ob sie verringert wurden. Wenn ja, wurde das Problem durch Lesen gelöst.

Wenn die Datei nach mehreren Versuchen (z. B. 20) nicht erfolgreich gelesen werden kann, müssen Sie die Datei oder den Block in der Datei überschreiben, damit das Laufwerk den Sektor neu zuordnen kann. Sie können ddrescue für die Datei (und nicht für die Partition) verwenden, um nur den einen Sektor zu überschreiben, indem Sie in eine temporäre Datei kopieren und dann erneut zurückkopieren. Beachten Sie, dass das Entfernen der Datei an dieser Stelle eine schlechte Idee ist, da der fehlerhafte Sektor in die freie Liste aufgenommen wird, in der es schwieriger ist, ihn zu finden. Es ist auch schlecht, es komplett zu überschreiben, da die Sektoren wieder in die freie Liste aufgenommen werden. Sie müssen die vorhandenen Blöcke neu schreiben. Die notruncOption ddist eine Möglichkeit, dies zu tun.

Wenn keine Fehler auftreten und die Anzahl der ausstehenden Ereignisse nicht abgenommen hat, muss sich der Sektor in der freien Liste oder in einem Teil der Dateisysteminfrastruktur befinden (z. B. eine Inode-Tabelle). Sie können versuchen, den gesamten freien Speicherplatz mit zu füllen cat /dev/zero >tempfile, und dann die Anzahl der ausstehenden Speicherplätze überprüfen. Wenn es ausfällt, war das Problem in der freien Liste und ist jetzt verschwunden.

Wenn sich der Sektor in der Infrastruktur befindet, haben Sie ein schwerwiegenderes Problem und es werden wahrscheinlich Fehler auftreten, wenn Sie nur den Verzeichnisbaum durchlaufen. In dieser Situation denke ich, dass die einzig sinnvolle Lösung darin besteht, das Laufwerk neu zu formatieren und optional ddrescue zu verwenden, um bei Bedarf Daten wiederherzustellen.

Behalten Sie das Laufwerk im Auge. Die Umverteilung des Sektors ist ein sehr guter Kanarienvogel in der Kohlenmine , der Sie möglicherweise frühzeitig vor einem Ausfall der Fahrt warnt. Durch frühzeitiges Handeln können Sie einen späteren katastrophalen und sehr schmerzhaften Erdrutsch verhindern. Ich schlage nicht vor, dass einige Sektorumverteilungen ein Hinweis darauf sind, dass Sie das Laufwerk verwerfen sollten. Alle modernen Laufwerke müssen neu zugewiesen werden. Wenn das Laufwerk jedoch nicht sehr alt ist (<1 Jahr) oder Sie häufig neue Neuzuweisungen erhalten (> 1 / Monat), empfehle ich Ihnen, es so schnell wie möglich auszutauschen.

Ich habe keine empirischen Beweise, um dies zu beweisen, aber meine Erfahrung zeigt, dass Festplattenprobleme durch gelegentliches Lesen der gesamten Festplatte, entweder durch eine ddder unformatierten Festplatten oder durch Lesen jeder Datei mit find. Fast alle Festplattenprobleme, die ich in den letzten Jahren hatte, sind zuerst in selten verwendeten Dateien oder auf Computern aufgetreten, die nicht viel verwendet werden. Dies ist auch heuristisch sinnvoll, da das Laufwerk bei häufigem erneuten Lesen eines Sektors die Möglichkeit hat, es neu zuzuweisen, wenn es zum ersten Mal ein geringfügiges Problem mit diesem Sektor feststellt, anstatt zu warten, bis der Sektor vollständig unlesbar ist. Das Laufwerk kann nichts mit einem Sektor tun, es sei denn, der Host greift irgendwie darauf zu, entweder durch Lesen oder Schreiben oder durch Ausführen eines der SMART-Tests.

Ich möchte mit der Idee eines nächtlichen oder wöchentlichen Cron-Jobs experimentieren, der die gesamte Festplatte liest. Derzeit verwende ich ein "RAID" für arme Männer, bei dem ich eine zweite Festplatte im Computer habe und jede Nacht die Hauptfestplatte darauf sichern kann. In mancher Hinsicht ist dies tatsächlich besser als die RAID-Spiegelung, denn wenn ich versehentlich eine Datei vermassle und lösche, kann ich die gestrige Version sofort von der Sicherungsdiskette abrufen. Andererseits glaube ich, dass ein Hardware-RAID-Controller im Hintergrund viel gute Arbeit leistet, um Festplattenprobleme zu überwachen, zu melden und zu beheben, sobald sie auftreten. Mein aktuelles Sicherungsskript verwendet rsync, um das Kopieren von Daten zu vermeiden, die sich nicht geändert haben. Angesichts der Notwendigkeit, alle Sektoren erneut zu lesen, ist es möglicherweise besser, alles zu kopieren oder ein separates Skript zu erstellen, das jede Woche die gesamte unformatierte Festplatte liest.

Neil Mayhew
quelle
2
Wenn Sie Sicherungen durchführen (die Synchronisierung auf eine interne Festplatte zählt nicht;)), werden alle Ihre Daten in bestimmten Zeitintervallen (abhängig von Ihrem vollständigen / inkrementellen Sicherungsplan) (erneut) gelesen. RAID oder rsync sind keine Ersatzsicherungen. Übrigens glaube ich, dass Sie zu viel Vertrauen in Hardware-RAID-Anbieter haben. ;)
maxschlepzig
@maxschlepzig: Du hast recht. Ich habe auch ein separates Backup-Regime. Ich habe jedoch die Erfahrung gemacht, dass die Wahrscheinlichkeit eines Datenverlusts aufgrund eines Laufwerksausfalls alle anderen Risiken (Diebstahl, Feuer usw.) bei weitem überwiegt. Moderne Festplatten haben eine so schlechte Zuverlässigkeit, dass ich heutzutage völlig paranoid bin. Mein zweiter interner Antrieb ist daher ein wesentlicher Bestandteil meiner Strategie.
Neil Mayhew
Ich habe den Inhalt der Festplatte mit gelesen und erneut gelesen dd if=/dev/sda ...und Sektoren stehen noch aus. Irgendeine Idee warum?
Dmansfield
@dmansfield, wenn Sie keine Fehler festgestellt haben, bin ich mir nicht sicher warum. Ich habe festgestellt, dass nur der Rohwert in der intelligenten Ausgabe korrekt ist. Wenn Sie also nur den "gekochten" Wert betrachten, kann es sein, dass Sie keine ausstehenden Sektoren haben.
Neil Mayhew
1

Verwenden Sie die auf der Western Digital-Website verfügbare Data Lifeguard Diagnostic für DOS-Software (bootfähige CD)

AlexD
quelle
1
  1. Sichern Sie Ihre Daten
  2. Entfernen Sie dieses Gerät aus der LVM-Gruppe
  3. dd if=/dev/zero of=/dev/sdc bs=4k- dies wird alle Daten löschen auf/dev/sdc
  4. Fügen Sie es erneut in die LVM-Gruppe ein
  5. Stellen Sie Ihr Backup wieder her
maxschlepzig
quelle
3
0. Haben Sie ein Backup. :-)
Steven D
Dies ist jedoch ein ausstehender Lesefehler. Sollte es nicht ausreichen, nur alle Sektoren zu lesen?
dkagedal
1
@dkagedal: Nein, die Firmware der Festplatte hat bereits erkannt, dass sie diesen einen Sektor nicht lesen kann. Es hat keine Möglichkeit, es wiederherzustellen (allein, außer vielleicht zu versuchen und erneut zu versuchen und irgendwann Glück zu haben ... hoffentlich werden keine Daten beschädigt und dann zurückgegeben) und richtet somit diesen SMART-Fehler ein. Wenn die Firmware jedoch einen Schreibvorgang in diesem bestimmten Sektor erkennt, ordnet sie diesen Sektor zu (und verwendet ihn nicht mehr) und ordnet stattdessen einen Ersatzsektor (Arbeitssektor) dieser Adresse zu.
Maxschlepzig
@dkagedal: Manchmal bringen nur ein oder zwei zusätzliche Lesevorgänge den Sektor zurück. In anderen Fällen wird nichts es zurückbringen. Außerdem entscheidet das Laufwerk intern, ob der Sektor neu zugeordnet oder wiederverwendet werden soll, basierend auf der Schwere des ursprünglichen Fehlers und ob er ihn nach dem Schreiben erfolgreich zurücklesen kann. Sie können dies nur anhand der neu zugewiesenen Anzahl für das Laufwerk feststellen. Ich glaube, dass Laufwerke eine ziemlich umfangreiche Prüfsumme verwenden, um sicherzustellen, dass Daten beim Lesen nicht beschädigt werden. Sie können also einigermaßen sicher sein, dass ein Sektor nicht neu zugewiesen wurde.
Neil Mayhew