Beste Möglichkeit, alle Dateien zu kopieren und Fehler zu ignorieren?

Ich habe eine teilweise beschädigte HD, die nicht mit dem Festplatten-Dienstprogramm repariert werden kann, die aber schreibgeschützt gemountet werden kann, wodurch die Daten darauf zugänglich sind.

Ich versuche, alle wiederherstellbaren Inhalte auf eine Ersatzfestplatte 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 - Fehlschlägt
  • Dito (Terminalbefehl) - Fehlgeschlagen

Ich hatte gehofft, dass Ditto den Trick machen würde, die Manpage von Ditto sagt:

dito gibt 0 zurück, wenn alles kopiert wird, ansonsten ungleich Null. ditto gibt fast nie auf und zieht es vor, Fehler auf dem Weg zu melden. Diagnosemeldungen werden als Standardfehler ausgegeben.

Ich habe Apple einen Fehler gemeldet, der nicht wie angekündigt funktioniert.

Irgendwelche anderen Ideen?

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

Antworten (8)

Ich benutze cp -Rfpv sourcefile destinationfilemit Erfolg auf einer ziemlich regelmäßigen Basis.

  • cp = kopieren

  • R = Behält Dateihierarchien bei, auch im -R-Modus, cp fährt mit dem Kopieren fort, selbst wenn Fehler erkannt werden.)

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

  • p = Dateiänderungszeitstempel beibehalten

  • v = Ausführlicher Modus, zeigt übertragene Dateien im Verlauf an

  • Quelldatei = Daten, die Sie kopieren möchten

  • Zieldatei = Verzeichnis/Laufwerk, in das kopiert werden soll


Wenn eine Datei aufgrund eines Fehlers nicht kopiert werden kann, wird der Job fortgesetzt und Sie sollten eine Protokollierung wie folgt sehen:

cp: sourcefile/someBadFile.txt: Input/output error

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

brew install ddrescue

Eine Anleitung auf arstechnica beschreibt, wie man eine ausgefallene Festplatte mit ddrescue rettet. Lesen Sie unbedingt die Anleitung durch, da sie hilfreiche Informationen enthält. Hier ist ein Überblick darüber, wie Sie dorthin gelangen.

  • Suchen Sie das Laufwerk mit diskutil list. Die ID-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
    
  • Unmounten Sie die betreffende Festplatte:

    diskutil unmount /dev/disk1s3    
    
  • Starten Sie eine Rettungsaktion der Festplatte in ein Image. Stellen Sie sicher, dass der Standort von Rescue.dmgdurch Ihren gewünschten Standort 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
    

Es wird empfohlen, auch das Handbuch von ddrescue zu lesen, um sich über die verfügbaren Optionen zu informieren, indem Sie man ddrescue.

Dies scheint die ausgewählte Antwort zu sein - warum nicht? Ist der Nachteil daran, dass Sie Homebrew für ddrescue brauchen?

Ich verwende gerne, rsyncum Dateien von einer beschädigten Quelle zu einem funktionierenden Ziel zu kopieren:

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

Woher:

-a= "Archivmodus" = rekursiv in Verzeichnisse, 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)

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

-v= ausführliche Ausgabe

--delete= Dateien im Ziel , die auf der Quelle nicht existieren , werden gelöscht

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

Dieser Macworld-Tipp schlägt vor, dd zu verwenden, um eine Bit-für-Bit-Kopie zu erstellen (Fehler ignorieren) und dann das resultierende Image im Finder zu mounten, um Ihre Dateien wiederherzustellen. Ich habe es nicht ausprobiert, aber es hört sich so an, als ob es funktionieren könnte.

Sie könnten 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 ausgeben:

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

blocksize @ 4k, keine Datenblöcke abschneiden, alle Fehler ignorieren

Um die Gerätenamen zu finden, führen Sie mountzuerst vom Terminal aus.

Sie können versuchen, SuperDuper auszuführen und die Dateien mit io-Fehlern zu ignorieren, wenn es nur wenige sind und Sie die Smart-Update-Funktion verwenden, die eine ziemlich effektive Methode ist, um die meisten Daten zu entfernen. (Ich denke, der dd-Befehl wäre vorzuziehen, wenn Sie das 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 lächerlich lange, wenn Sie mehr als ein oder zwei Fehler haben, Sie benötigen dafür die kostenpflichtige Version)
  3. Führen Sie die Kopie aus
  4. Wenn der Kopiervorgang fehlschlägt, lesen Sie die Protokolle, um herauszufinden, welche Datei nicht kopiert werden konnte, und klicken Sie dann auf OK/Schließen, um zum Startbildschirm zurückzukehren
  5. Wählen Sie aus der Dropdown-Liste "Ausgewähltes Kopierskript bearbeiten" aus
  6. Fügen Sie unter Skriptbefehle die Datei hinzu, die nicht kopiert werden konnte. Sobald sie zur Liste der Dateien hinzugefügt wurde, sollte „Ignorieren“ angezeigt werden
  7. Speichern Sie Ihr Skript unter einem Namen (z. B. Ignore-Corrupted-Files)
  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.

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

Wenn Ihr Laufwerk noch zugänglich ist und Sie die Dateihierarchie sehen können, aber nur der Kopiervorgang wegen Fehlern stoppt, können Sie das Unstoppable Copier(nur Windows) Programm verwenden.

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

Das ist ein reines Windows-Programm, und das OP fragt nach Mac-Lösungen (in einem Mac-spezifischen Forum!).