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.
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:
Erstellen Sie eine vollständige Sicherung Ihrer Festplatte mit Time Machine
oder Carbon Copy Cloner
Überprüfen Sie diese Sicherung.
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 find
Befehl 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, find
wird der Kernel sich anmelden read error
und /var/log/system.log
Ihr 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, find
schnell 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.
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.
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.dd
behebt 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.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 -f
und 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 reboot
in 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 .
fsck
& Disk Utility
prü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=1k
und 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.
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 &
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.
fsck
es 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.
fsck
es der Liste der "Dinge, die denken, dass die Festplatte in Ordnung ist" hinzuzufügen, hatte ich auf die Antwort geantwortet, in der ich fsck
ihre Nützlichkeit erwähnte. fsck
und 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 dd
Dienstprogramm 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.
Dan
Dan