Beste Weg, um alle Dateien zu kopieren, Fehler zu ignorieren?


36

Ich habe eine teilweise beschädigte Festplatte, die nicht vom Festplatten-Dienstprogramm repariert werden kann, die jedoch schreibgeschützt bereitgestellt werden kann, um die darauf gespeicherten Daten zugänglich zu machen.

Ich versuche, alle wiederherstellbaren Inhalte auf eine Ersatz-Festplatte zu kopieren, aber jede Methode, die ich versuche, schlägt fehl, wenn ein Fehler auftritt. Die verbleibenden Dateien werden nicht kopiert.

Finder - schlägt fehl. SuperDuper - schlägt fehl. Ditto (Terminal-Befehl) - schlägt fehl.

Ich hatte gehofft, dass Ditto den Trick macht, die Ditto-Manpage sagt:

ditto gibt 0 zurück, wenn alles kopiert wurde, andernfalls ungleich Null. dito gibt fast nie auf und meldet lieber Fehler auf dem Weg. Diagnosemeldungen werden als Standardfehler gedruckt.

Ich habe Apple einen Fehler gemeldet, der ebenfalls nicht die angegebene Leistung erbringt.

Irgendwelche anderen Ideen?


Siehe stackoverflow.com/a/27637277 und nicht die --ignore-errorsAntworten unten.
Spyle

Antworten:


28

Ich benutze cp -Rfv sourcefile destinationfilemit Erfolg regelmäßig.

cp = copy

R = pflegt Dateihierarchien

f = Wenn eine vorhandene Zieldatei nicht geöffnet werden kann, entfernen Sie sie und versuchen Sie es erneut

v = ausführlicher Modus, zeigt Dateien an, die während des Fortschritts übertragen werden

Quelldatei = Daten, die Sie kopieren möchten

Zieldatei = Verzeichnis / Laufwerk, in das Sie kopieren möchten


3
Wie werden Fehler auf dem Quelllaufwerk ignoriert (siehe Frage)?
Nohillside

1
@patrix Es "ignoriert" keine Fehler, aber das "f" -Flag erzwingt sie und kopiert nur intakte Daten. Während Sie den Fortschritt beobachten (dank des Verbose-Flags), sehen Sie die Ausgabe wie folgt: "Daten wurden aufgrund eines E / A-Fehlers nicht kopiert", wenn fehlerhafte Daten festgestellt werden. Sobald der Fehler angezeigt wird, wird ohne Benutzereingabe mit der nächsten Datei fortgefahren. Das Szenario des Posters hört sich sehr ähnlich an wie das Dutzende Mal, in dem ich diesen Befehl verwendet habe, um Daten von Flakey-Datenträgern / -Volumes abzurufen.
Mr Rabbit

Gibt es eine Möglichkeit, eine fehlerhafte Datei mit einem Postfix zu kopieren, damit alle fehlenden Dateien besser gefunden werden?

1
Aus dem BSD- cpHandbuch (macOS): "Im -R-Modus kopiert cp weiter, auch wenn Fehler festgestellt werden."
Matt

Vielen Dank dafür. Ich versuche derzeit, so viel wie möglich von einer fehlerhaften Festplatte zu retten, obwohl mir beschädigte Daten egal sind, ich werde keine Zeit damit verschwenden, zu versuchen, sie zu reparieren, sondern sie einfach zu löschen. Dies ist eine Arbeitsmethode, um dies schnell zu erreichen. Ich füge die Fehler in eine Protokolldatei ein, die ich später analysieren kann, um die abgeschnittenen Dateien mit Lesefehlern zu löschen, indem 2> error.log
ich

23

Probieren Sie Gnu ddrescue aus - es ist ein Datenwiederherstellungsprogramm, das blockbasiertes Kopieren mit beschädigter Datenwiederherstellung während der Kopiervorgänge ausführt. Sie können es für OS X herunterladen, wenn Sie Homebrew verwenden, indem Sie Folgendes in ein Terminalfenster eingeben:

brew install ddrescue

Eine Anleitung zu arstechnica beschreibt, wie Sie eine ausgefallene Festplatte mit ddrescue retten können. Lesen Sie unbedingt das Handbuch durch, da es hilfreiche Informationen enthält. Hier ist eine kurze Beschreibung, wie Sie dorthin gelangen.

  • Suchen Sie das Laufwerk mit diskutil list. Die Identifier-Spalte ist das, wonach Sie suchen:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • Hängen Sie den betreffenden Datenträger aus:

    diskutil unmount /dev/disk1s3    
    
  • Starten Sie einen Rettungsvorgang der Festplatte in ein Image. Stellen Sie sicher, dass der Speicherort von Rescue.dmgdurch Ihren gewünschten Speicherort ersetzt wird.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Stellen Sie das Image auf einem neuen Laufwerk wieder her:

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

Lesen Sie auch das Handbuch von ddrescue, um sich über die verfügbaren Optionen zu informieren man ddrescue.


1
Zum Hinweis für den Moderator: Dies könnte eine sehr gute Antwort auf das Problem sein, erfordert jedoch mehr Arbeit. Können Sie der Antwort einige Beispiele für ddrescue-Befehle für OS X-Geräte hinzufügen? Ich habe es ein wenig korrigiert mit der Art von Hintergrund und Informationen, die wir gerne in den Antworten hier sehen. Wenn Sie das tun, wäre das sicher eine großartige Antwort.
Ian C.

Ich habe ddrescue vor ein oder zwei Jahren erfolgreich verwendet, um Daten von einer fehlerhaften Festplatte zu kopieren. Es hat vielleicht 200 Fehler überwunden und schaffte es schließlich, ungefähr die Hälfte davon zu lesen. Die resultierende kopierte Diskette wurde in diskwarrior eingespeist, und das Ergebnis war möglicherweise eine Beschädigung von 10 von ungefähr 1 Million Dateien.
Pittsburgh Mike

7

Ich benutze gerne, rsyncum Dateien von einer beschädigten Quelle in ein funktionierendes Ziel zu kopieren:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

Woher:

-a = "Archivierungsmodus" = kehrt in Verzeichnisse zurück, kopiert Symlinks als Symlinks, behält Berechtigungen, Zeiten, Gruppen und spezielle Dateien bei, behält auch Besitzer (wenn Besitzer = root) und Geräte (wenn Besitzer = root) bei

-u= überspringt die Datei in der Quelle, wenn die entsprechende Kopie im Ziel neuer ist

-v = ausführliche Ausgabe

--delete= Dateien im Ziel , die in der Quelle nicht vorhanden sind, werden gelöscht

--ignore-errors = löscht eine Datei / ein Verzeichnis im Falle eines E / A-Fehlers während des Kopiervorgangs


4

In diesem Macworld-Hinweis wird empfohlen, mit dd eine bitweise Kopie zu erstellen (Fehler werden ignoriert) und dann das resultierende Image im Finder anzuhängen, um Ihre Dateien wiederherzustellen. Ich habe es nicht ausprobiert, aber es hört sich so an, als würde es funktionieren.


Das ist gut so, denn Sie möchten, dass Ihre Daten schnell gelöscht werden, wenn diese Festplatte nicht mehr funktioniert. Auf diese Weise erhalten Sie einen Block für eine Blockkopie, einschließlich Fehlern, die Sie dann nach Belieben einsehen können, ohne dass Sie befürchten müssen, dass die Festplatte fehlerfrei ausfällt, bevor Sie alles davon entfernen. Ich führe eine Operation in einem ordentlichen Start durch, ohne von Dateifragment zu Dateifragment zu springen, was die Arbeit auf dem Laufwerk, das die DD-Kopie erstellt hat, erschwert.
stuffe

3
ddrescue ist hier besser als dd, da es fehlerhafte Abschnitte wiederholt, solange Sie es laufen lassen - siehe diese vorherige Antwort, wo der OP-Gott seine Daten nach ein paar Wochen schleifen (!). Beachten Sie, dass dies ein guter Ansatz ist, wenn die HD-Hardware ausfällt, aber überhaupt nichts zur Behebung der Beschädigung der Volume-Struktur unternimmt - diese wird nur zusammen mit den Dateien kopiert.
Gordon Davisson

3

Sie können den ddBefehl verwenden, um eine Block-für-Block-Kopie von Ihrer beschädigten Festplatte auf Ihre neue Festplatte durchzuführen.

Angenommen, Ihre neue Festplatte ( /dev/disk2) hat die gleiche oder eine größere Größe als Ihre beschädigte Festplatte ( /dev/disk1), dann können Sie Folgendes ausführen:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

blocksized @ 4k, schneide keine Datenblöcke ab, ignoriere alle Fehler

Führen Sie mountzuerst das Terminal aus, um die Gerätenamen zu suchen .


0

Der dittoBefehl sollte funktionieren, würde ich dittoin Verbindung mit der -vOption für verbose verwenden, damit Sie genau sehen können, was Ihnen einen Fehler von dem gibt, was es kopiert.


3
Laut dem Fragesteller dittofunktioniert das nicht. Warum glaubst du, tut es das?
Nohillside

op fragt nach Alternativen zuditto
juniorRubyist

0

Sie könnten versuchen, SuperDuper auszuführen und die Dateien mit io-Fehlern zu ignorieren, wenn es nur wenige sind und Sie die intelligente Aktualisierungsfunktion verwenden, mit der Sie die meisten Daten effektiv entfernen können. (Ich denke, der Befehl dd wäre vorzuziehen, wenn Sie das tun können).

Schritte:

  1. Wählen Sie als Sicherungsstrategie "Alle Dateien sichern"
  2. Wählen Sie in den Optionen "Smart Update" (andernfalls dauert dieser Vorgang unglaublich lange, wenn Sie mehr als einen oder zwei Fehler haben, benötigen Sie dafür die kostenpflichtige Version.)
  3. Führen Sie die Kopie aus
  4. Wenn der Kopiervorgang fehlschlägt, lesen Sie die Protokolle, um festzustellen, welche Datei nicht kopiert werden konnte. Klicken Sie dann auf OK / Schließen, um zum Startbildschirm zurückzukehren
  5. Wählen Sie im Dropdown-Menü "Using" die Option "Ausgewähltes Kopierskript bearbeiten"
  6. Fügen Sie unter Skriptbefehle die Datei hinzu, die nicht kopiert werden konnte. Nach dem Hinzufügen zur Dateiliste sollte "Ignorieren" angezeigt werden
  7. Speichern Sie Ihr Skript unter einem bestimmten Namen (z. B. Dateien, die beschädigt sind, ignorieren).
  8. Wählen Sie Ihr Skript aus und wiederholen Sie die Schritte 3-7 so oft wie nötig, um alle beschädigten Dateien zu ignorieren.

-2

Wenn auf Ihr Laufwerk weiterhin zugegriffen werden kann und Sie sehen, dass die Dateihirrarchie angezeigt wird, der Kopiervorgang jedoch aufgrund von Fehlern abgebrochen wird, können Sie das Unstoppable CopierProgramm verwenden.

http://www.roadkil.net/program.php?ProgramID=29


Das ist ein Windows-Programm, und das OP fragt nach Mac-Lösungen (in einem Mac-spezifischen Forum!)
Haydentech
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.