Ein ausstehender nicht lesbarer Sektor ist ein Sektor, der einen Lesefehler zurückgegeben hat und den das Laufwerk für die Neuzuordnung bei der erstmöglichen Gelegenheit markiert hat. Die Neuzuordnung kann jedoch erst durchgeführt werden, wenn eines von zwei Dingen eintritt:
- Der Sektor wurde erfolgreich erneut gelesen
- Der Sektor wird neu geschrieben
Bis dahin bleibt der Sektor anhängig. Sie haben also zwei entsprechende Möglichkeiten, damit umzugehen:
- Versuchen Sie weiter, den Sektor erneut zu lesen, bis Sie erfolgreich sind
- Diesen Sektor mit neuen Daten überschreiben
Offensichtlich ist (1) nicht destruktiv, also sollten Sie es wahrscheinlich zuerst versuchen, obwohl Sie bedenken sollten, dass, wenn das Laufwerk ernsthaft ausfällt, es durch kontinuierliches Lesen aus einem fehlerhaften Bereich wahrscheinlich viel schneller ausfallen wird . Wenn Sie viele ausstehende Sektoren und andere Fehler haben und sich um die Daten auf dem Laufwerk kümmern, empfehle ich, es außer Betrieb zu nehmen und das hervorragende Tool ddrescue zu verwenden, um so viele Daten wie möglich wiederherzustellen. Verwerfen Sie dann das Laufwerk.
Wenn der fragliche Sektor Daten enthält, die Sie nicht interessieren oder die Sie aus einem Backup wiederherstellen können, ist das Überschreiben wahrscheinlich die schnellste und einfachste Lösung. Sie können dann die neu zugewiesenen und ausstehenden Zähler für das Laufwerk anzeigen, um sicherzustellen, dass der Sektor behandelt wurde.
Wie finden Sie heraus, was der Sektor im Dateisystem entspricht? Ich habe einen ausgezeichneten Artikel über die smartmontools gefunden Website, hier, obwohl sie 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, ist die Verwendung von find / -xdev -type f -print0 | xargs -0 ...
um jede Datei auf dem System zu lesen. Notieren Sie sich die ausstehende Anzahl, bevor Sie dies 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), und zeigt Ihnen den Pfad dazu an. Sie können sich dann darauf konzentrieren, nur diese Datei erneut zu lesen, bis sie erfolgreich gelesen wird. Oft löst dies das Problem, wenn es sich um eine selten verwendete Datei handelt, die nur ein paar Mal neu gelesen werden muss. Wenn der Fehler verschwindet oder beim Lesen aller Dateien keine Fehler auftreten, überprüfen Sie die Anzahl der ausstehenden Dateien, um festzustellen, ob sie verringert wurde. 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 zuweisen kann. Sie können ddrescue für die Datei (statt für die Partition) verwenden, um nur den einen Sektor zu überschreiben, indem Sie in eine temporäre Datei kopieren und dann wieder zurückkopieren. Beachten Sie, dass es keine gute Idee ist, die Datei an dieser Stelle einfach zu entfernen, da der fehlerhafte Sektor in die freie Liste aufgenommen wird, wo er schwerer zu finden ist. Komplettes Überschreiben ist auch schlecht, da die Sektoren wieder in die freie Liste kommen. Sie müssen die vorhandenen Blöcke neu schreiben. Die notrunc
Option von dd
ist eine Möglichkeit, dies zu tun.
Wenn Sie auf keine Fehler stoßen und die Pending-Zählung nicht abgenommen hat, muss sich der Sektor in der Freelist oder in einem Teil der Dateisysteminfrastruktur (z. B. einer Inode-Tabelle) befinden. Sie können versuchen, den gesamten freien Speicherplatz mit cat /dev/zero >tempfile
zu füllen , und überprüfen Sie dann die ausstehende Anzahl. 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 ernsteres Problem, und Sie werden wahrscheinlich auf Fehler stoßen, wenn Sie nur durch den Verzeichnisbaum gehen. In dieser Situation ist meines Erachtens die einzig vernünftige Lösung, das Laufwerk neu zu formatieren und gegebenenfalls ddrescue zur Wiederherstellung von Daten zu verwenden.
Behalten Sie das Laufwerk sehr genau im Auge. Die Neuzuweisung von Sektoren ist ein sehr guter Kanarienvogel in der Kohlemine, der Sie möglicherweise frühzeitig vor einem Ausfall des Laufwerks warnt. Durch frühzeitiges Handeln können Sie einen späteren katastrophalen und sehr schmerzhaften Erdrutsch verhindern. Ich schlage nicht vor, dass einige Neuzuweisungen von Sektoren ein Hinweis darauf sind, dass Sie das Laufwerk verwerfen sollten. Alle modernen Laufwerke müssen eine Neuzuweisung vornehmen. Wenn das Laufwerk jedoch nicht sehr alt ist (<1 Jahr) oder Sie häufig neue Neuzuweisungen erhalten (> 1/Monat), dann empfehle ich Ihnen, es so schnell wie möglich zu ersetzen.
Ich habe keine empirischen Beweise dafür, aber meine Erfahrung legt nahe, dass Festplattenprobleme reduziert werden können, indem die gesamte Festplatte ab und zu gelesen wird, entweder durch einen dd
der Rohplatte oder durch Lesen jeder Datei mit find
. Fast alle Festplattenprobleme, die ich in den letzten Jahren erlebt habe, sind zuerst in selten verwendeten Dateien oder auf wenig genutzten Rechnern aufgetreten. Dies ist auch heuristisch sinnvoll, da das Laufwerk, wenn ein Sektor häufig neu gelesen wird, die Möglichkeit hat, ihn neu zuzuweisen, wenn es zum ersten Mal ein geringfügiges Problem mit diesem Sektor erkennt, anstatt zu warten, bis der Sektor vollständig unlesbar ist. Das Laufwerk kann mit einem Sektor nichts anfangen, es sei denn, der Host greift irgendwie darauf zu, entweder durch Lesen oder Schreiben oder durch Ausführen eines der SMART-Tests.
Ich würde gerne mit der Idee eines nächtlichen oder wöchentlichen Cron-Jobs experimentieren, der die gesamte Festplatte liest. Derzeit verwende ich ein "RAID des armen Mannes", bei dem ich eine zweite Festplatte in der Maschine habe und die Hauptfestplatte jede Nacht darauf sichere. In gewisser Weise ist dies tatsächlich besser als RAID-Spiegelung, denn wenn ich versehentlich eine Datei vermassele und lösche, kann ich sofort die gestrige Version von der Backup-Festplatte 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 zu vermeiden, dass Daten kopiert werden, die sich nicht geändert haben, aber angesichts der Notwendigkeit, alle Sektoren neu zu lesen, wäre es vielleicht besser, alles zu kopieren, oder ein separates Skript zu haben, das jede Woche die gesamte Raw-Festplatte liest.