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


9

Ich habe Ende 2011 ein Macbook Pro mit Mavericks 10.9.2. Die einzige Festplatte ist ein 750-GB-Laufwerk, das mit Bootcamp formatiert ist. Es läuft immer noch recht gut, aber beim Ausführen eines Defragmentierungspasses 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 eine zufällig auswählen und versuchen, die Datei an einen anderen Ort in der Shell zu kopieren, wird ebenfalls ein Fehler gemeldet, der mich glauben lässt, dass das Problem real ist und mit der Festplatte / FS zusammenhängt. Die Ausgabe von cp ist:

cp: unity_nophysx.nexe: Input/output error

Fehlercode 5 lautet 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.

Das Festplatten-Dienstprogramm, fsck und der Apple-Hardwaretest behaupten alle, dass die Festplatte in Ordnung ist. Es wurden keine SMART-Fehler gemeldet, und obwohl einige Berechtigungsfehler aufgetreten sind, waren sie nicht mit den Dateien verbunden, ü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 Teil des Laufwerks. Soweit ich das beurteilen kann, sind keine Systemdateien oder wichtigen Daten betroffen. Es wäre zwar schön, die Daten abzurufen, aber es macht mir nichts aus, sie neu zu installieren oder Backups zu erstellen. Zu diesem Zeitpunkt weiß ich nicht, ob das Laufwerk wirklich im Sterben liegt, nur einige schlechte Sektoren, die darauf zurückzuführen sind, dass das Laufwerk beim Schreiben verschoben wird, oder eine andere geringfügige Beschädigung, die behoben werden kann. Ich gehe vom schlimmsten Fall aus und muss höchstwahrscheinlich eine etwas größere Festplatte besorgen und das vorhandene Laufwerk klonen, um zu vermeiden, dass das System neu erstellt werden muss.

Meine Frage ist wirklich, wie ich diese beschädigten Dateien als ordnungsgemäß fehlerhaft markiere und sie behebe oder bereinige , damit ein Klon der Festplatte erfolgreich ist und nicht an Dateien / Blöcken hängen bleibt, auf die er nicht zugreifen kann. Das Festplatten-Dienstprogramm sieht das Problem nicht und ich kenne keine Befehlszeilen- oder Tools von Drittanbietern, die diese Aufgabe übernehmen. Ich möchte nicht die gesamte Festplatte abschreiben und von vorne beginnen, da das Laufwerk ansonsten fehlerfrei zu sein scheint. Daher suche ich nach Reparatur- / Diagnosetools.


Ich rate Ihnen , diese ziemlich detailliert ähnliche Diskussion über Super - User zu lesen: superuser.com/q/148227 .
Dan

Ich habe leider auf einer gesunden Festplatte getestet :), volitans-software.com/smart_utility.php . Es sieht aus wie ein ziemlich einfaches und ernstes Werkzeug. Sie können es versuchen und vor allem den Zähler "Neu zugewiesene Sektoren" überprüfen.
Dan

Antworten:


8

Wenn Sie auf der Ebene seiner Struktur mit einem fehlerfreien Dateisystem konfrontiert sind und Dateien mit fehlerhaften Festplattenblöcken suchen möchten, würde ich folgendermaßen 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 druckt für jede einfache Datei ihren Namen (also nicht den Namen, sondern nur den Verzeichniseintrag) und liest dann alle Datenblöcke vollständig und schnell weiter.

Enthält fehlerhafte Blöcke auf die erste Datei hiting, dies findführt dazu , dass der Kernel anmelden read errorauf /var/log/system.log, und es wird entweder verlangsamen oder das System auf insgesamt Stillstand bringen. Dies hängt hauptsächlich von der Festplattenkapazität ab, um die fehlerhaften Blöcke in seinem internen Pool zu verschieben, die für diese übliche Fix-Aufgabe vorgesehen sind. Diese Datei mit fehlerhaften Blöcken ist der Nachname, der von gedruckt wird find.

Schreiben Sie diesen Dateinamen auf ein Blatt Papier! Angenommen, 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 das Abschalten fehlschlägt, 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 wurde, war der Fehler leicht genug, damit Ihre Festplatte diese Datei lesen und die fehlerhaften Blöcke neu zuordnen konnte.

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

In diesem letzten Fall müssen Sie in Betracht ziehen, Ihre Festplatte auszutauschen und mit Ihren letzten Sicherungen zu arbeiten. Einige andere Dateien enthalten möglicherweise auch fehlerhafte Blöcke und sind möglicherweise seit langer Zeit unentdeckt geblieben, solange Sie sie nicht gelesen haben.

Der Kernel löst keinen Lesefehler für einen Block aus, den Sie nie gelesen haben.


Aha, das ist absolut der Trick, auf den ich gehofft habe. Der erste Durchgang mit dem Skript find / dd berührt alle Dateien / Blöcke auf der Festplatte, und ich finde sicher genug eine Reihe von Dateien, die "Eingabe- / Ausgabefehler" ergeben, und ich kann einfach das Protokoll des Befehls in eine Datei und ausgeben Dann grep es, um herauszufinden, welche Dateien duff sind. Es scheint, dass der Befehl dd selbst nicht ausreicht, um irgendeine Art von automatischer Korrektur auszulösen (ich wusste nicht einmal, dass OS X das tut), aber es gibt mir zumindest eine zuverlässige Möglichkeit, die Dateien zu identifizieren.
MrCranky

Auf der positiven Seite, wenn das Betriebssystem versucht, mit diesen fehlerhaften Blöcken aus den Dateien zu lesen, stürzt es nicht ab oder legt nicht 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 der Befehl ziemlich glücklich weiter.
MrCranky

Ihr Kernel hängt nicht mit dem BBFH zusammen, da auf Ihrer Festplatte noch genügend Blöcke in ihrem Pool verfügbar sind, um fehlerhafte Blöcke zu beheben. ddbehebt nichts, dieser Befehl dient dazu, Daten zu kopieren und so schnell wie möglich zu konvertieren. Die Festplatte kann weiterhin leichte Fehler reparieren. Bleiben Sie wachsam, der Preis einer Festplatte ist nichts, was mit Ihrer Arbeit zu tun hat.
Dan

Mmm, ja, ich hatte angenommen, dass: dd nur ein dummes Werkzeug ist, um alle Daten aus einer Datei zu reiben und sie woanders abzulegen (in unserem Fall in Luft). Was wirklich wichtig ist, ist, dass jeder der Datei zugeordnete Block gelesen wird. Was ich nicht bekomme, ist das, 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 kann? Wenn die Daten nicht aus dem ursprünglichen fehlerhaften Block entfernt werden können, wie werden sie dann an eine andere Stelle verschoben?
MrCranky

Ausgezeichnete Frage. Die Festplatte wiederholt automatisch Leseblöcke. Jedes Mal befindet sich die Kopfposition mechanisch in einer anderen Position. 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 markiert und wird nie wieder verwendet. Wenn andererseits alle Wiederholungsversuche fehlschlagen, werden die Daten nicht gespeichert, und nach einer sehr langen Zeit markiert die Festplatte den Block als fehlerhaft und weist der sichtbaren Festplatte eine neue leere zu. Der Kernel meldet einen nicht behebbaren Festplattenfehler.
Dan

4

Starten Sie im Einzelbenutzermodus neu, indem Sie während des Startvorgangs die Taste Command+ Sgedrückt halten. Wenn Sie eine Eingabeaufforderung sehen (sollte ähnlich aussehen root #oder ähnlich), geben Sie ein fsck -fund drücken Sie Return. Dies ist das in Mac integrierte Tool zur Überprüfung der Konsistenz von Dateisystemen, 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 ausfällt.

Wenn das Tool ausfällt, deutet dies möglicherweise auf ein größeres Problem hin (aber ich konnte Ihnen nicht sagen, was, ohne die Ausgabe des Tools zu sehen). Stellen Sie in jedem Fall sicher, dass Sie alles gesichert haben, was Sie können, bevor Sie ein Festplatten-Tool ausführen. Wenn Sie fertig sind, geben Sie rebootdie Eingabeaufforderung ein und drücken Sie die Eingabetaste, um Ihren Computer neu zu starten (Sie haben es erraten!).

Weitere Informationen finden Sie in den fsck-Handbuchseiten hier .


Interessant, aber es sieht sehr danach aus, dass fsck selbst mit -f und im Einzelbenutzermodus genau das tut, 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 Dateisystemdatensätze gescannt werden, aber ich denke, mein Problem liegt auf Blockebene - dh das Dateisystem ist gut strukturiert, aber beim Lesen kann nicht auf die tatsächlichen Daten in den Dateien zugegriffen werden / Kopieren / Defragmentieren.
MrCranky

1
→ MrCranky: Richtig! fsck& Disk Utilityüberprüfen die Integrität der Dateisystemstruktur. Sie lesen die der Dateisystemstruktur zugewiesenen Plattenblöcke. Sie dienen nicht zur Überprüfung der Integrität von Datenblöcken. Daher können sie auf einer Festplatte mit fehlerhaften Blöcken ausgeführt werden, ohne dass ein Lesefehler auftritt. Wenn Sie Ihre Festplatte überprüfen möchten, selbst Blöcke, die möglicherweise fehlerhaft sind, aber tatsächlich nicht verwendet werden, verwenden Sie einfach ein grundlegendes Tool, während dd if=/dev/disk0 of=/dev/null ibs=1kund innerhalb eines anderen Shell-Fensters ausgeführt wird tail -f /var/log/system.log. Dies ist kostenlos, extrem und verbirgt keinen Fehler.
Dan

2

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

Während der Katalogwiederherstellung können Sie auch wissen, ob es aufgrund einer Festplattenfehlfunktion zu einer Verzögerung kommt.


Ich bin nicht abgeneigt, ein Tool zu kaufen, um zu helfen, aber ohne Testversion und ohne Garantie, dass es sogar dafür ausgelegt ist, die Art von Fehlern zu finden, die ich erlebe, würde ich viel mehr Empfehlungen benötigen, um Ihre zu sichern, bevor ich es bin bereit, 100 Dollar auf ein Werkzeug zu werfen.
MrCranky

-1 Nicht nur eine Antwort, sondern eine Mischung aus Kommentar und Antwort.
Max Ried

2

Wenn Sie die Antwort von Buscar abarbeiten, können Sie dies automatisch mit einer ziemlich schweren Befehlszeile 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 {}: Ersetze {} im nächsten Befehl
  • dd 2> & 1: Std-Fehler an stdout umleiten
  • Pipe stdout zu grep auf der Suche nach String-Fehler
  • Hängen Sie die Ergebnisse an eine Listendatei an . ( Hinweis : Dies sollte sich auf externen Medien befinden, wenn Sie der Meinung sind, dass Ihr internes Laufwerk fehlerhaft ist.)

1

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 seine Vorgänge benötigt werden (Wiederherstellungspunkte, derzeit aktive Dateien usw.). Einige Defrags zeigen sie, andere nicht.

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

Normalerweise kümmern sich Macs sehr gut um sich selbst.

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

sudo periodic daily weekly monthly 

Geben Sie gefolgt von Zurück Ihr Administratorkennwort ein, und OS X kümmert sich um die Dinge für Sie.

Suchen Sie in der Konsole nach Berichten zu diesen, wenn Sie interessiert sind.

Suchen Sie in der Konsole nach E / A-Fehlern, die darauf hinweisen, dass auf Ihrer Festplatte Probleme auftreten, um das Festplatten-Dienstprogramm und die Ergebnisse von fsck zu ergänzen.

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

OnyX ist ein Multifunktionsdienstprogramm für OS X, mit dem Sie die Startdiskette und die Struktur ihrer Systemdateien überprüfen, verschiedene Aufgaben der Systemwartung ausführen und einige versteckte Parameter von Finder, Dock, QuickTime, Safari, Mail und iTunes konfigurieren können , Anmeldefenster, Spotlight und viele Anwendungen von Apple, um Caches zu löschen, eine bestimmte Anzahl von Dateien und Ordnern zu entfernen, die möglicherweise umständlich werden, und vieles mehr.

Nach alledem stelle ich Ihre Entscheidung für die Verwendung des Defragmentierers (iDefrag) nicht in Frage, da ich es nicht weiß, sondern alternative Lösungen anbiete.


Die Verwendung des Defragmentierers ist nicht das Problem. Ich weiß genau, was OS X in dieser Hinsicht tut und was nicht. Die Dateien wurden definitiv nicht verwendet, dies waren Datendateien für eine Anwendung, die nicht aktiv war, und tatsächlich kann die Anwendung jetzt nicht verschoben werden.
MrCranky

Auf Onyx - es macht wieder wenig mehr als das Festplatten-Dienstprogramm - überprüft es 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)
MrCranky

Nur klar zu sein, denn sonst jemand diese Antwort zu lesen, die Dateien definitiv wurden beschädigt, und der Mac wußte , dass, weil ich nicht erlaubt war , von ihnen zu lesen (kopieren Sie sie, was auch immer). Das lag nicht daran, dass es sich um Systemdateien handelte oder zu dieser Zeit verwendet wurde, sondern auch für Benutzerdatendateien. Die regelmäßige Wartung hat bei dem Problem nicht geholfen, da fsckes sich anscheinend nur um Dateisystemprobleme handelt, nicht um Probleme mit der Barrierefreiheit. Die Konsole zeigte nur Fehler an, wenn ich manuell versuchte, die Daten aus einer dieser beschädigten Dateien zu kopieren / zu lesen. Es war keine Hilfe, sie zu finden.
MrCranky

0

So unvernünftig es auch klingt, bevor Sie etwas unternehmen, sollten Sie alle Ihre Daten auf ein bekanntermaßen gutes Laufwerk duplizieren. Wenn das Booten vom Installationsprogramm und das Kopieren der Daten fehlschlägt, gibt es ein Befehlszeilenprogramm namens 'dd', das das Duplizieren auf niedriger Ebene und auf weitaus kompromisslosere Weise durchführen kann.

 man dd

Weitere Informationen zu dd, einschließlich Verwendung und korrekter Syntax.


Eine weitere Abstimmung für Matts Beitrag, den Einzelbenutzermodus starten und ausführen

 fsck -fy 

immer und immer wieder, bis fsck keine Fehler mehr meldet.


DiskWarrior ist eine einfach zu verwendende, aber sehr leistungsfähige Anwendung, die Festplattenfehler meldet, einzelne Dateien auf Fehler überprüft und wenn möglich repariert sowie Verzeichnisstrukturen neu erstellt und optimiert.


Eine andere mögliche Lösung, die unvernünftig klingt, aber oft ein letzter Versuch ist, Daten mit vielen annakdotischen Erfolgsnachweisen wiederherzustellen, besteht darin, das Laufwerk zu ziehen, es mit ein paar Schichten Gefrierbeuteln vor Feuchtigkeit zu schützen und es in Ihren Gefrierschrank zu legen 30-45 Minuten. Wenn das Laufwerk kalt ist, montieren Sie das Laufwerk in einem externen USB-Dock und versuchen Sie erneut mit einem anderen temporären System, 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 häufig eine neue Lebensdauer verleiht.


Wie gesagt, fsck meldet keine Fehler. Die Festplatte ist noch nicht temperamentvoll oder meldet zufällige Fehler, und die Liste der beschädigten Dateien scheint nicht zu wachsen. Daher glaube ich, dass ich noch nicht in der Nähe der Phase "Einfrieren für einen letzten Notfall" bin. Ich bin auch auf Datei- / Ordnerebene bereits sehr gut gesichert und habe keine Angst vor Datenverlust, wie ich in der Frage sagte. Gut zu hören, dass DiskWarrior erneut gewählt wurde.
MrCranky

@ MrCranky: Ich glaube, Sie beziehen sich auf etwas, das vor der Aktualisierung Ihrer Frage veröffentlicht wurde. Ich habe die fsck-Idee für alle verstärkt, die auf dieser Seite nach einer Lösung für ähnliche Symptome suchen. In Bezug auf alles, was ich über Festplattenfehler geschrieben habe, schadet es nie, wieder umfassend für andere zu sein und nicht unbedingt für Sie persönlich. Ich habe meinen fairen Anteil an Festplattenfehlern gesehen. Oft gibt es auch mit SMART Tech keine Anzeichen für einen Fehler, bis Sie auf keinen Fall mehr auf die Daten zugreifen können. Wenn Sie sich für die Daten interessieren, empfehle ich Ihnen dringend, ein neues Laufwerk zu erwerben und Ihre Daten zu sichern.
Chillin

Ich bin mit der Empfehlung für ein Backup sicherlich nicht einverstanden, aber der Geist des Q & A-Formats besteht darin, die gestellte Frage zu beantworten, nicht die generische Frage "Wie behebe ich eine kaputte Festplatte?" (Von denen es viele gibt). Lange bevor ich es bearbeitet habe, um fsckes der Liste der "Dinge hinzuzufügen , die denken, dass die Festplatte in Ordnung ist", hatte ich auf die Antwort geantwortet, in der erwähnt wurde, dass fsckihre Nützlichkeit nicht berücksichtigt wird. fsckund das Festplatten-Dienstprogramm führen fast dieselbe Funktion aus, und zwar auf den Dateisystemstrukturen, nicht auf Blockebene. Ich habe versucht, ziemlich genau zu sagen, dass dies ein Blockproblem ist, kein Dateisystemproblem.
MrCranky

0

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 und die nicht lesbaren Blöcke durch NUL-Bytes zu ersetzen. Es wird dringend empfohlen, auf ein anderes Volume zu duplizieren (z. B. "USB Disk" im folgenden Beispiel).

Beispiel:

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

Bei 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 einige Zeit blockiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.