Il modo migliore per copiare tutti i file, ignorando gli errori?


36

Ho un HD parzialmente corrotto che non può essere riparato da Utility Disco, ma che può essere montato in sola lettura rendendo accessibili i dati su di esso.

Sto cercando di copiare tutti i contenuti recuperabili su un disco rigido di riserva, ma ogni metodo che provo fallisce quando si verifica un errore, lasciando i file rimanenti non copiati.

Finder - Errore. SuperDuper: errore. Idem (comando terminale) - Errore.

Speravo che Ditto potesse fare il trucco, la pagina man di Ditto dice:

ido restituisce 0 se tutto viene copiato, altrimenti diverso da zero. idem quasi non si arrende, preferendo segnalare errori lungo la strada. I messaggi diagnostici verranno stampati sull'errore standard.

Ho inviato un bug ad Apple re Ditto non riuscendo a eseguire le operazioni pubblicizzate.

Altre idee?


Vedere stackoverflow.com/a/27637277 anziché le --ignore-errorsrisposte di seguito.
spyle,

Risposte:


28

Uso cp -Rfv sourcefile destinationfilecon successo su base abbastanza regolare.

cp = copia

R = mantiene le gerarchie di file

f = se non è possibile aprire un file di destinazione esistente, rimuoverlo e riprovare

v = modalità dettagliata, visualizza i file trasferiti man mano che procede

sourcefile = dati che vuoi copiare

destinationfile = directory / unità in cui si desidera copiare


3
In che modo questo ignora gli errori sull'unità di origine (vedi la domanda)?
Nohillside

1
@patrix Non "ignora" gli errori ma il flag "f" li attraversa, copiando solo i dati intatti. Mentre osservi l'avanzamento (grazie al flag dettagliato) vedrai l'output lungo le righe di "dati non copiati a causa di errore I / O" quando incontrano dati errati. Una volta visualizzato l'errore, passa al file successivo senza input dell'utente. Lo scenario del poster sembra estremamente simile alle dozzine di volte in cui ho usato questo comando per recuperare dati da dischi / volumi flakey.
Mr Rabbit,

Esiste un modo per copiare un file non funzionante con alcuni postfix, in modo che tutti i file mancanti vengano trovati meglio?

1
Dal cpmanuale BSD (macOS): "In modalità -R, cp continuerà a copiare anche se vengono rilevati errori."
Matt,

Grazie mille per questo. Attualmente sto cercando di recuperare il più possibile da un HDD difettoso, anche se non mi importa dei dati danneggiati, non perderò tempo a cercare di risolverli, ma semplicemente eliminarli. Questo è un metodo di lavoro per raggiungere questo obiettivo rapidamente. Sto reindirizzando gli errori in un file di log, che posso analizzare in seguito per eliminare i file troncati con errori di lettura, aggiungendo quanto segue:2> error.log
0x01

23

Prova Gnu ddrescue : è un programma di recupero dati che esegue la copia basata su blocchi con il ripristino corrotto dei dati durante le operazioni di copia. Puoi ottenerlo per OS X se stai usando Homebrew digitando una finestra Terminale:

brew install ddrescue

Una guida su arstechnica descrive come salvare un disco guasto usando ddrescue. Assicurati di leggere la guida, poiché contiene informazioni utili. Ecco un riassunto su come arrivarci.

  • Individua l'unità utilizzando diskutil list. La colonna identificatore è ciò che stai cercando:

    /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
    
  • Smonta il disco in questione:

    diskutil unmount /dev/disk1s3    
    
  • Avviare un'operazione di salvataggio del disco in un'immagine. Assicurarsi che la posizione di Rescue.dmgsia sostituita con la posizione desiderata.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Ripristina l'immagine su una nuova unità:

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

Ti consigliamo di leggere anche il manuale di ddrescue per informarti sulle opzioni disponibili eseguendo man ddrescue.


1
Da aggiungere all'avviso del moderatore: questa potrebbe essere un'ottima risposta al problema, ma ha bisogno di più lavoro. Puoi aggiungere alcuni comandi ddrescue di esempio per i dispositivi OS X alla risposta? L'ho risolto un po 'con il tipo di background e informazioni che ci piace vedere nelle risposte qui. Se lo fai, sono sicuro che sarebbe un'ottima risposta.
Ian C.

Ho usato ddrescue con successo un anno o due fa, per copiare i dati da un disco danneggiato. Ha superato forse 200 errori e alla fine è riuscito a leggerne circa la metà. Il disco copiato risultante è stato inserito in diskwarrior e il risultato è stato forse un danno a 10 file su circa 1 milione.
Pittsburgh Mike,

7

Mi piace usare rsyncper copiare file da una fonte corrotta a una destinazione funzionale:

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

Dove:

-a = "modalità archivio" = ricorre nelle directory, copia i collegamenti simbolici come collegamenti simbolici, conserva le autorizzazioni, i tempi, i gruppi e i file speciali, preserva anche il proprietario (quando proprietario = root) e i dispositivi (quando proprietario = root)

-u= salta il file nell'origine se la sua copia corrispondente nella destinazione è più recente

-v = output dettagliato

--delete= i file nella destinazione che non esistono sul sorgente verranno eliminati

--ignore-errors = elimina un file / directory in caso di errore I / O durante il processo di copia


4

Questo suggerimento di Macworld suggerisce di usare dd per fare una copia bit per bit (ignorando gli errori), quindi montare l'immagine risultante nel Finder per recuperare i tuoi file. Non l'ho provato, ma sembra che potrebbe funzionare.


Questo va bene, perché vuoi che i tuoi dati siano spenti velocemente se quel disco è duff. In questo modo, ottieni un blocco per la copia a blocchi, inclusi gli errori, che sarà quindi disponibile per l'ispezione a tuo piacimento senza preoccuparti che il disco muoia peroperosamente prima di toglierlo tutto. Eseguirò un'operazione, in un bel inizio ordinato per finire senza saltare dappertutto dal frammento di file al frammento di file che sarà un lavoro più duro sull'unità che ha creato la copia DD.
stuffe

3
ddrescue è meglio di dd in questo, dal momento che riproverà ripetutamente sezioni difettose fintanto che lo lascerai in esecuzione - vedi questa risposta precedente in cui il dio OP i suoi dati si spengono dopo un paio di settimane di rettifica (!). Si noti che questo è un buon approccio se l'hardware HD non funziona, ma non fa nulla per correggere il danneggiamento della struttura del volume, che viene semplicemente copiato insieme ai file.
Gordon Davisson,

3

È possibile prendere in considerazione l'utilizzo del ddcomando per eseguire una copia blocco per blocco dall'HDD corrotto al nuovo HDD.

Supponendo che il tuo nuovo HDD ( /dev/disk2) sia di dimensioni uguali o maggiori rispetto al tuo HDD corrotto ( /dev/disk1), puoi emettere:

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

blockized @ 4k, non troncare alcun blocco di dati, ignorare tutti gli errori

Per trovare i nomi dei dispositivi, eseguire mountprima dal Terminale.


0

Il dittocomando dovrebbe funzionare, lo dittouserei insieme -vall'opzione verbose in modo da poter vedere esattamente cosa ti dà un errore di ciò che copia.


3
Secondo il richiedente dittonon funziona. Perché pensi che lo faccia?
Nohillside

op sta chiedendo delle alternative aditto
juniorRubyist,

0

Potresti provare a eseguire SuperDuper e ignorare i file con errori io, se solo pochi e utilizzi la funzione di aggiornamento intelligente che è un modo abbastanza efficace per ottenere la maggior parte dei dati. (Penso che il comando dd sarebbe preferibile se puoi farlo).

passi:

  1. Seleziona "backup di tutti i file" come strategia di backup
  2. Nelle opzioni seleziona 'aggiornamento intelligente' (altrimenti questo processo richiederà un tempo ridicolmente lungo se hai più di uno o due errori, per questo avrai bisogno della versione a pagamento)
  3. Esegui la copia
  4. Quando la copia non riesce, leggi i registri per trovare quale file non è riuscito a copiare, quindi premi ok / chiudi per tornare alla schermata 'start'
  5. Seleziona 'modifica lo script di copia selezionato' dal menu a discesa usando
  6. Sotto i comandi Script aggiungi il file che non è stato possibile copiare, dopo averlo aggiunto all'elenco dei file dovrebbe essere indicato "ignora"
  7. Salva il tuo script con un nome (ad es. Ignore-danneggiato-files)
  8. Seleziona lo script e ripeti i passaggi 3-7 tutte le volte necessarie per ignorare tutti i file danneggiati.

-2

Se l'unità è ancora accessibile e è possibile visualizzare la gerarchia dei file, ma solo il processo di copia si interrompe a causa di errori, è possibile utilizzare il Unstoppable Copierprogramma.

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


Questo è un programma solo per Windows e l'OP chiede soluzioni Mac (su un forum specifico per Mac!)
Haydentech
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.