So identifizieren und reparieren Sie Dateien mit beschädigten / unzugänglichen Festplattenblöcken

Ich habe ein Macbook Pro von Ende 2011, auf dem Mavericks 10.9.2 ausgeführt wird. Seine einzige Festplatte ist ein 750-GB-Laufwerk, das mit Bootcamp formatiert ist. Es läuft immer noch einigermaßen gut, aber beim Ausführen einer Defragmentierung habe ich festgestellt, dass es eine Reihe von Dateien gibt, die sich weigern, vom Defragmentierer (iDefrag) verschoben zu werden.

iDefrag meldet beim Zugriff auf die Dateien einen POSIX-Fehlercode von 5. Wenn Sie zufällig eine auswählen und versuchen, die Datei an einen anderen Ort in der Shell zu kopieren, wird auch ein Fehler gemeldet, der mich glauben lässt, dass das Problem echt ist und mit der Festplatte / dem FS zusammenhängt. Ausgabe von cp ist:

cp: unity_nophysx.nexe: Input/output error

Fehlercode 5 ist meines Wissens "Zugriff verweigert", aber der Defragmentierungsprozess wird als Administrator ausgeführt, und das Ausführen von cp mit sudo für die verdächtige Datei macht keinen Unterschied.

Disk Utility, fsck und der Apple Hardware Test behaupten alle, die Festplatte sei in Ordnung. Es wurden keine SMART-Fehler gemeldet, und obwohl es einige Berechtigungsfehler gab, waren sie nicht bei den Dateien, über die sich iDefrag beschwert, und das Festplatten-Dienstprogramm behauptet, sie ohne Beanstandung behoben zu haben.

Es gibt vielleicht hundert oder mehr beschädigte Dateien, aber immer noch einen sehr kleinen Bruchteil des Laufwerks. Soweit ich das beurteilen kann, sind keine Systemdateien oder wichtige Daten betroffen. Es wäre zwar schön, die Daten abzurufen, aber ich habe nichts dagegen, neu zu installieren oder zu Backups zu gehen. An diesem Punkt weiß ich nicht, ob es wirklich das Laufwerk ist, das stirbt, nur einige fehlerhafte Sektoren, weil das Laufwerk während des Schreibens verschoben wurde, oder eine andere geringfügige Beschädigung, die umgangen werden kann. Ich gehe vom schlimmsten Fall aus, und dass ich höchstwahrscheinlich eine etwas größere Festplatte besorgen und das vorhandene Laufwerk klonen muss, um das System nicht neu erstellen zu müssen.

Meine Frage ist wirklich , wie ich diese defekten Dateien als ordnungsgemäß defekt markiere und sie repariere oder lösche , damit ein Klon der Festplatte erfolgreich ist und nicht an Dateien / Blöcken hängen bleibt, auf die sie nicht zugreifen kann. Das Festplatten-Dienstprogramm sieht das Problem nicht, und ich kenne keine Befehlszeilen- oder Drittanbieter-Tools, die die Aufgabe erledigen. Ich möchte nicht die gesamte Festplatte abschreiben und von vorne anfangen, da das Laufwerk ansonsten gesund zu sein scheint, also suche ich nach Reparatur- / Diagnosetools.

Ich rate Ihnen, diese ziemlich detaillierte ähnliche Diskussion auf SuperUser zu lesen: superuser.com/q/148227 .
Getestet habe ich, leider auf einer gesunden Festplatte :), volitans-software.com/smart_utility.php . Es sieht aus wie ein ziemlich einfaches und seriöses Werkzeug. Sie können es versuchen und vor allem den Zähler "neu zugewiesene Sektoren" überprüfen.

Antworten (7)

Wenn Sie auf der Ebene seiner Struktur mit einem gesunden Dateisystem konfrontiert sind und Dateien mit fehlerhaften Blöcken auf der Festplatte finden möchten, würde ich wie folgt vorgehen:

  1. Erstellen Sie eine vollständige Sicherung Ihrer Festplatte mit Time Machineoder Carbon Copy Cloner

    Überprüfen Sie diese Sicherung.

  2. Führen Sie den folgenden schweren und riskanten Befehl aus (falls Sie fehlerhafte Blöcke außerhalb Ihrer Dateisystemstruktur haben) (stellen Sie sicher, dass {} in Anführungszeichen steht, damit Dateinamen mit Leerzeichen funktionieren):

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

Dieser schwere findBefehl gibt für jede einfache Datei ihren Namen aus (und liest sie also nicht, sondern nur ihren Verzeichniseintrag) und fährt dann damit fort, alle ihre Datenblöcke vollständig und schnell zu lesen.

Wenn Sie auf die erste Datei treffen, die fehlerhafte Blöcke enthält, findwird der Kernel sich anmelden read errorund /var/log/system.logIhr System entweder verlangsamen oder vollständig zum Stillstand bringen. Dies hängt hauptsächlich von der Festplattenkapazität ab, um die fehlerhaften Blöcke zu verschieben, die in seinem internen Pool gefunden wurden, der dieser üblichen Reparaturaufgabe gewidmet ist. Diese Datei, die fehlerhafte Blöcke enthält, wird der Nachname sein, der von gedruckt wird find.

Notieren Sie sich diesen Dateinamen auf einem Zettel! Nehmen wir an, dieser Dateiname lautet:

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

An diesem Punkt haben Sie möglicherweise die Möglichkeit, findschnell zu töten, indem Sie ctrl+ drücken C. Wenn es fehlschlägt, es schön zu töten, stürzen Sie einfach Ihren Mac ab.

Überprüfen Sie beim Neustart Ihres Mac direkt die Datei mit fehlerhaften Blöcken:

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

Wenn der Befehl korrekt beendet wird, war der Fehler gering genug, damit Ihre Festplatte diese Datei lesen und die fehlerhaften Blöcke neu zuweisen kann.

  • Wenn der Befehl nicht beendet wird, können Sie ihn nicht normal beenden, Ihre Daten sind vollständig verloren und Sie müssen Ihren Mac erneut zum Absturz bringen.

In diesem letzten Fall müssen Sie erwägen, Ihre Festplatte auszutauschen und mit Ihren letzten Backups zu arbeiten. Einige andere Dateien enthalten möglicherweise auch fehlerhafte Blöcke und sind möglicherweise lange Zeit unentdeckt geblieben, solange Sie sie nicht gelesen haben.

Der Kernel löst keinen Lesefehler bei einem Block aus, den Sie nie gelesen haben.

Aha, das ist absolut die Art von Trick, auf die ich gehofft hatte. Der erste Durchgang mit dem find/dd-Skript berührt alle Dateien/Blöcke auf der Festplatte, und tatsächlich finde ich eine Reihe von Dateien, die "Eingabe-/Ausgabefehler" ausgeben, und ich kann einfach das Protokoll des Befehls in eine Datei ausgeben und dann grep es, um herauszufinden, welche Dateien duff sind. Es scheint, als ob der dd-Befehl selbst nicht ausreicht, um eine automatische Reparatur auszulösen (ich wusste nicht einmal, dass OS X das tut), aber zumindest gibt er mir eine zuverlässige Möglichkeit, die Dateien zu identifizieren.
Auf der positiven Seite, wenn das Betriebssystem versucht, aus den Dateien mit diesen fehlerhaften Blöcken zu lesen, stürzt es nicht ab oder hängt sich schrecklich auf. Ich sehe ein May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.Popup in den Protokollen, aber keine Ahnung, welche Datei es ausgelöst hat. Aber dann läuft das Kommando ganz munter weiter.
Ihr Kernel hängt nicht mit dem BBFH, weil Ihre Festplatte noch genügend Blöcke in ihrem Pool verfügbar hat, um fehlerhafte Blöcke zu reparieren. ddbehebt nichts, dieser Befehl dient dazu, Daten so schnell wie möglich zu kopieren und zu konvertieren. Die Festplatte ist immer noch in der Lage, leichte Fehler zu reparieren. Bleiben Sie wachsam, der Preis einer Diskette ist nichts im Vergleich zu Ihrer Arbeit.
Mmm, ja, ich hatte angenommen, dass dd nur ein dummes Werkzeug ist, um alle Daten aus einer Datei herauszureißen und sie woanders abzulegen (in unserem Fall in Luft). Was wirklich zählt, ist, dass jeder mit der Datei verbundene Block gelesen wird. Was ich nicht verstehe, ist, was Sie von OS X in diesem Fall erwarten. Natürlich kann der Kernel diese fehlerhaften Blöcke nicht lesen, aber glauben Sie, dass die Festplatte selbst sie reparieren kann und darf? Wenn es die Daten nicht aus dem ursprünglichen fehlerhaften Block herausholen kann, wie soll es sie dann woanders hin verschieben?
Ausgezeichnete Frage. Die Festplatte unternimmt automatisch Wiederholungsversuche beim Lesen von Blöcken. Jedes Mal, wenn die Kopfposition mechanisch in einer anderen Position ist. Wenn einer dieser Versuche erfolgreich ist, werden die Daten auf einen der verfügbaren Blöcke kopiert, um fehlerhafte Blöcke zu reparieren. Der fehlerhafte Block wird als fehlerhaft gekennzeichnet und nie wieder verwendet. Wenn andererseits alle Wiederholungsversuche fehlschlagen, werden die Daten nicht gespeichert, und nach sehr langer Zeit markiert die Festplatte den Block als fehlerhaft und weist der sichtbaren Festplatte einen neuen leeren Block zu. Der Kernel meldet einen nicht behebbaren Festplattenfehler.
Angesichts dessen, was ich sehe, schlagen alle Wiederholungen fehl, der Kernel meldet den IO-Fehler, aber die Datei bleibt unzugänglich (vermutlich, weil es keinen Sinn macht, einen neuen, leeren Block an ihrer Stelle zu platzieren, da dies die Datei beschädigen würde Daten, und hinterlassen Sie keinen Hinweis darauf, dass etwas passiert ist). Sie würden einen nicht behebbaren Festplattenfehler erhalten, und jeder nachfolgende Zugriff würde unbemerkt beschädigte Daten zurückgeben. Aber wenn es weiß, dass es einmal passiert ist, verstehe ich nicht, warum OS X es nicht in einer Liste von Duff-Dateien speichert und ein Wartungstool hat, das Ihnen sagen kann, dass einige von ihnen schlecht sind, und es Ihnen überlässt reparieren!

Starten Sie im Einzelbenutzermodus neu, indem Sie beim Booten die Command+ Taste gedrückt halten. SWenn Sie eine Eingabeaufforderung sehen (sollte wie root #oder ähnlich aussehen), geben Sie ein fsck -fund drücken Sie Return. Dies ist das in Mac integrierte Tool zur Überprüfung der Dateisystemkonsistenz, mit dem Sie Fehler im Startdateisystem finden und reparieren können. Führen Sie diesen Befehl aus, bis Sie nichts mehr sehen **The volume [volume name] was modified.**oder das Tool dreimal hintereinander fehlschlägt.

Wenn das Tool fehlschlägt, könnte dies auf ein größeres Problem hindeuten (aber ich kann Ihnen nicht sagen, was, ohne die Ausgabe des Tools zu sehen). Stellen Sie auf jeden Fall sicher, dass Sie alles gesichert haben, was Sie können, bevor Sie ein Festplatten-Tool ausführen. Wenn Sie fertig sind, geben Sie rebootin die Eingabeaufforderung ein und drücken Sie die Eingabetaste, um (Sie haben es erraten!) Ihren Computer neu zu starten.

Für zusätzliche Informationen finden Sie hier die Handbuchseiten zu fsck .

Interessant, aber es sieht sehr danach aus, als würde fsck selbst mit -f und im Einzelbenutzermodus genau das tun, was das Festplatten-Dienstprogramm getan hat. Wie das Festplatten-Dienstprogramm findet es nichts und denkt, dass die Festplatte in Ordnung ist. Ich gehe davon aus, dass die Datensätze des Dateisystems gescannt werden, aber ich denke, mein Problem liegt auf Blockebene - dh das Dateisystem ist gut strukturiert, aber beim Lesen kann nicht auf die eigentlichen Daten in den Dateien zugegriffen werden /kopieren/defragmentieren sie.
→ MrCranky: richtig! fsck& Disk Utilityprüfen die Integrität der Dateisystemstruktur. Sie lesen die Plattenblöcke, die der Dateisystemstruktur zugeordnet sind. Sie dienen nicht dazu, die Integrität von Datenblöcken zu überprüfen. Daher können sie auf einer Festplatte mit fehlerhaften Blöcken ausgeführt werden, ohne dass Lesefehler auftreten. Wenn Sie Ihre Festplatte überprüfen möchten, sogar Blöcke, die möglicherweise fehlerhaft sind, aber tatsächlich nicht verwendet werden, verwenden Sie einfach ein einfaches Tool als dd if=/dev/disk0 of=/dev/null ibs=1kund in einem anderen Shell-Fenster run tail -f /var/log/system.log. Dies ist kostenlos, extrem und wird Ihnen keinen Fehler verheimlichen.

Ich würde DiskWarrior wärmstens empfehlen, um Festplattenkataloge neu zu erstellen und nach möglicherweise beschädigten Dateien zu suchen .

Während der Katalogneuerstellung kann es Sie auch darüber informieren, wenn es aufgrund einer Festplattenfehlfunktion zu Verzögerungen kommt.

Ich bin nicht abgeneigt, ein Tool zu kaufen, um zu helfen, aber ohne Testversion und ohne Garantie, dass es überhaupt dafür ausgelegt ist, die Art von Fehlern zu finden, die ich erlebe, bräuchte ich viel mehr Empfehlungen, um Ihre zu untermauern, bevor ich es bin bereit, 100 Dollar für ein Werkzeug auszugeben.
-1 Nicht nur eine Antwort, sondern eine Mischung aus Kommentar und Antwort.

Wenn Sie die Antwort von Buscar ausarbeiten, können Sie dies automatisch mit einem ziemlich schweren Befehlszeilen-Foo tun.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo:Admin-Modus
  • find -print0: absoluter Pfad
  • xargs -0 -I{} : ersetzen Sie {} im nächsten Befehl
  • dd 2>&1: std-Fehler auf stdout umleiten
  • leiten Sie stdout an grep und suchen Sie nach Zeichenfolgenfehlern
  • Ergebnisse an eine Listendatei anhängen. ( Hinweis : Dies sollte sich auf einem externen Medium befinden, wenn Sie glauben, dass Ihr internes Laufwerk zweifelhaft ist.)

Wie Sie sagen, ist nicht einmal klar, dass diese Dateien beschädigt sind, zumindest glaubt Ihr Mac dies nicht.

Jedes Betriebssystem erstellt nicht verschiebbare Dateien, die für seinen Betrieb benötigt werden (Wiederherstellungspunkte, derzeit aktive Dateien usw.). Einige Defragmentierungen zeigen sie an, andere nicht.

Die Tatsache, dass Sie nicht darauf zugreifen oder sie verschieben können, bedeutet nicht, dass sie beschädigt sind.

Normalerweise sind Macs sehr gut darin, sich selbst um sich selbst zu kümmern.

Die Verwendung der Apple-Wartung erfolgt wie folgt: Öffnen Sie das Terminal und geben Sie Folgendes ein:

sudo periodic daily weekly monthly 

gefolgt von Return, geben Sie Ihr Administratorkennwort ein und OS X erledigt die Dinge für Sie.

Suchen Sie bei Interesse in der Konsole nach den entsprechenden Berichten.

Suchen Sie in der Konsole nach E/A-Fehlern, die darauf hindeuten, dass Ihre Festplatte Probleme hat, um das Festplatten-Dienstprogramm und die fsck-Ergebnisse zu ergänzen.

Gelegentlich verwende ich ein kostenloses Tool namens OnyX für zusätzliche Wartungsaufgaben. Es wird von Franzosen hergestellt und da sie essen, ist es einfach großartig:)

OnyX ist ein multifunktionales Dienstprogramm für OS X, mit dem Sie das Startvolume und die Struktur seiner Systemdateien überprüfen, verschiedene Aufgaben der Systemwartung ausführen und einige versteckte Parameter von Finder, Dock, QuickTime, Safari, Mail und iTunes konfigurieren können , das Anmeldefenster, Spotlight und viele Apple-Anwendungen, um Caches zu löschen, eine bestimmte Anzahl von Dateien und Ordnern zu entfernen, die lästig werden könnten, und vieles mehr.

Nach alledem stelle ich Ihre Entscheidung für die Verwendung des Defragmentierers (iDefrag) nicht in Frage, da ich ihn nicht kenne, sondern biete stattdessen alternative Lösungen an.

Die Verwendung des Defragmentierers ist nicht das Problem, ich bin mir vollkommen bewusst, was OS X in dieser Hinsicht tut und was nicht. Die Dateien wurden definitiv nicht verwendet, das waren Datendateien für eine Anwendung, die nicht aktiv war, und tatsächlich kann die Anwendung jetzt nicht verschoben werden.
Auf Onyx - es macht wieder etwas mehr als das Festplatten-Dienstprogramm - überprüft den SMART-Status der Festplatte und führt dann die Diagnose im fsck-Stil aus (die, wie wir festgestellt haben, der Meinung ist, dass nichts falsch ist)
Nur um das klarzustellen, für alle anderen, die diese Antwort lesen, waren die Dateien definitiv beschädigt , und der Mac wusste das, weil ich nicht von ihnen lesen durfte (sie kopieren, was auch immer). Das lag nicht daran, dass es sich um Systemdateien handelte oder zu der Zeit verwendet wurde, es galt sogar für Benutzerdatendateien. Regelmäßige Wartung hat bei dem Problem nicht geholfen, wieder weil fsckes sich scheinbar nur um Dateisystemprobleme kümmert, nicht um Probleme mit der Zugänglichkeit zu blockieren. Die Konsole zeigte nur Fehler, wenn ich versuchte, die Daten aus einer dieser beschädigten Dateien manuell zu kopieren/zu lesen, es war keine Hilfe, sie zu finden.

So unvernünftig es auch klingen mag, bevor Sie irgendetwas tun, sollten Sie alle Ihre Daten auf ein bekanntermaßen funktionierendes Laufwerk duplizieren. Wenn das Booten vom Installationsprogramm und das Kopieren der Daten fehlschlägt, gibt es ein Befehlszeilendienstprogramm namens „dd“, das Duplizieren auf niedriger Ebene und auf weitaus kompromisslosere Weise durchführen kann.

 man dd

für weitere Informationen zu dd, einschließlich Verwendung und richtiger Syntax.


Noch eine Stimme für Matts Beitrag, Einzelbenutzermodus starten und ausführen

 fsck -fy 

immer und immer wieder, bis fsck aufhört, Fehler zu melden.


Eine Stimme für Adams Beitrag, DiskWarrior ist eine einfach zu bedienende, aber sehr leistungsfähige Anwendung, die Festplattenausfälle meldet, einzelne Dateien auf Fehler überprüft und sie, wenn möglich, repariert und Verzeichnisstrukturen neu aufbaut und optimiert.


Eine andere mögliche Lösung, die unvernünftig klingen mag, aber oft ein letzter verzweifelter Versuch ist, Daten mit vielen annakdotischen Beweisen für den Erfolg wiederherzustellen, besteht darin, das Laufwerk herauszuziehen, es mit ein paar Schichten Gefrierbeutel vor Feuchtigkeit zu schützen und es in Ihren Gefrierschrank zu legen 30-45 Minuten. Montieren Sie das Laufwerk dann bei kaltem Laufwerk in einem externen USB-Dock und verwenden Sie ein anderes temporäres System, um erneut zu versuchen, die beschädigten Daten auf ein anderes Laufwerk zu kopieren. Im Allgemeinen wird dies verwendet, wenn ein Hardwareproblem vorliegt und das Laufwerk ausfällt. Wenn Sie das gesamte Laufwerk mit intakten Daten duplizieren können, ist dies ideal, da eine Neupartitionierung und Neuformatierung dem Laufwerk oft neues Leben einhaucht.

Wie gesagt, fsck meldet keine Fehler. Die Festplatte ist noch nicht launisch oder meldet zufällige Fehler, und die Liste der beschädigten Dateien scheint nicht länger zu werden, also glaube ich nicht, dass ich noch in der Nähe der Phase des „Einfrierens für einen letzten Notfall-Pull“ bin. Ich bin auch auf Datei-/Ordnerebene bereits sehr gut gesichert und mache mir keine Sorgen über Datenverlust, wie ich in der Frage sagte. Es ist jedoch schön, eine weitere Stimme für DiskWarrior zu hören.
@MrCranky: Ich glaube, Sie beziehen sich auf etwas, das vor Ihrer Aktualisierung Ihrer Frage gepostet wurde. Ich habe die fsck-Idee für alle bekräftigt, die auf dieser Seite nach einer Lösung für ähnliche Symptome suchen. In Bezug auf alles, was ich über Festplattenausfälle gepostet habe, schadet es nie, für andere und nicht unbedingt für Sie persönlich umfassend zu sein. Ich habe meinen fairen Anteil an Festplattenausfällen gesehen. Oft gibt es auch bei SMART tech keinen Hinweis auf einen Ausfall, bis man auf keinen Fall mehr auf die Daten zugreifen kann. Wenn Ihnen die Daten wichtig sind, empfehle ich Ihnen dringend, sich ein neues Laufwerk zu besorgen und Ihre Daten zu sichern.
Ich bin sicherlich nicht gegen die Empfehlung für ein Backup, aber der Sinn des Q&A-Formats besteht darin, die gestellte Frage zu beantworten, nicht eine allgemeine Frage „Wie repariere ich eine kaputte Festplatte“ (von der es viele gibt). Lange bevor ich es bearbeitet habe, um fsckes der Liste der "Dinge, die denken, dass die Festplatte in Ordnung ist" hinzuzufügen, hatte ich auf die Antwort geantwortet, in der ich fsckihre Nützlichkeit erwähnte. fsckund das Festplatten-Dienstprogramm führen im Wesentlichen die gleiche Funktion aus, und zwar auf den Dateisystemstrukturen, nicht auf Blockebene. Ich habe versucht, ziemlich genau zu sagen, dass dies ein Blockproblem ist, kein Dateisystemproblem.

Für eine einzelne Datei, die aufgrund eines Festplattenlesefehlers nicht vollständig gelesen werden kann, können Sie das ddDienstprogramm verwenden, um die Datei auf ein externes Volume zu duplizieren, indem Sie NUL-Bytes für die Blöcke ersetzen, die nicht gelesen werden können. Es wird dringend empfohlen, auf ein anderes Volume zu duplizieren (z. B. „USB Disk“ im Beispiel unten).

Beispiel:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

Durch die Verwendung von 512-Byte-Blöcken wird die maximale Anzahl lesbarer Blöcke wiederhergestellt.

Die Wiederherstellung kann lange dauern, da der Kernel bei jedem fehlgeschlagenen Lesevorgang für einige Zeit blockiert.