Le meilleur moyen de copier tous les fichiers, en ignorant les erreurs?

36

J'ai un disque dur partiellement corrompu qui ne peut pas être réparé par Utilitaire de disque, mais qui peut être monté en lecture seule, rendant ainsi les données accessibles.

J'essaie de copier tout le contenu récupérable sur un disque dur de secours, mais chaque méthode que j'essaye échoue lorsqu'une erreur est rencontrée - laissant les fichiers restants non copiés.

Finder - échoue. SuperDuper - échoue. Idem (commande du terminal) - échec.

J'espérais que Ditto ferait l'affaire, la page de manuel de Ditto dit:

idem renvoie 0 si tout est copié, sinon non nul. idem n'abandonne presque jamais, préférant signaler des erreurs en cours de route. Les messages de diagnostic seront imprimés avec l'erreur standard.

J'ai soumis un bogue à Apple, tout comme je ne le fais pas comme annoncé.

D'autres idées?

radven
la source
Voir stackoverflow.com/a/27637277 plutôt que les --ignore-errorsréponses ci-dessous.
Spyle

Réponses:

28

Je l'utilise cp -Rfv sourcefile destinationfileavec succès assez régulièrement.

cp = copier

R = maintient les hiérarchies de fichiers

f = si un fichier de destination existant ne peut pas être ouvert, supprimez-le et réessayez

v = mode commenté, affiche les fichiers transférés au fur et à mesure de leur progression

sourcefile = données que vous souhaitez copier

destinationfile = répertoire / lecteur sur lequel vous souhaitez copier

Monsieur lapin
la source
3
Comment cela ignore-t-il les erreurs sur le lecteur source (voir la question)?
nohillside
1
@patrix Cela ne "ignore" pas les erreurs, mais le drapeau "f" les force à ne copier que des données intactes. En observant la progression (grâce à l'indicateur détaillé), vous verrez s'afficher le message "Données non copiées en raison d'une erreur d'E / S" lorsqu'il rencontre des données incorrectes. Une fois que l'erreur est affichée, elle passe au fichier suivant sans aucune intervention de l'utilisateur. Le scénario de l'affiche semble extrêmement similaire aux dizaines de fois où j'ai utilisé cette commande pour récupérer des données à partir de disques / volumes floconneux.
M. lapin
Existe-t-il un moyen de copier un fichier en échec avec du correctif, afin de mieux retrouver tous les fichiers manquants?
1
D'après le cpmanuel BSD (macOS): "En mode -R, cp continuera à copier même si des erreurs sont détectées."
Matt
Merci beaucoup pour cela. J'essaie actuellement de sauver autant que possible d'un disque dur défaillant, même si je me moque des données corrompues, je ne perdrai pas de temps à essayer de le réparer, mais simplement de le supprimer. C'est une méthode de travail pour y parvenir rapidement. Je passe les erreurs dans un fichier journal, que je peux analyser plus tard pour supprimer les fichiers tronqués comportant des erreurs de lecture, en ajoutant ce qui suit:2> error.log
0x01
23

Essayez Gnu ddrescue - c'est un programme de récupération de données qui effectue une copie basée sur des blocs avec une récupération de données corrompue pendant les opérations de copie. Vous pouvez l'obtenir pour OS X si vous utilisez Homebrew en tapant dans une fenêtre de terminal:

brew install ddrescue

Un guide sur arstechnica explique comment récupérer un disque en panne à l'aide de ddrescue. Assurez-vous de lire le guide, car il contient des informations utiles. Voici un résumé sur la façon d’y arriver.

  • Localisez le lecteur avec diskutil list. La colonne identifiant correspond à ce que vous recherchez:

    /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
    
  • Démontez le disque en question:

    diskutil unmount /dev/disk1s3    
    
  • Lancer une opération de sauvetage du disque dans une image. Assurez-vous que l'emplacement de Rescue.dmgest remplacé par l'emplacement souhaité.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Récupérez l'image sur un nouveau lecteur:

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

Nous vous conseillons de lire également le manuel de ddrescue pour vous renseigner sur les options disponibles en exécutant man ddrescue.

utilisateur76335
la source
1
Pour ajouter à la remarque du modérateur: cela pourrait être une très bonne réponse au problème mais cela demande plus de travail. Pouvez-vous ajouter quelques exemples de commandes ddrescue pour les périphériques OS X à la réponse? Je l'ai un peu corrigé avec le type de fond et d'informations que nous aimons voir dans les réponses ici. Si vous faites cela, je suis sûr que ce sera une excellente réponse.
Ian C.
J'ai utilisé avec succès ddrescue il y a un an ou deux pour copier des données d'un mauvais disque. Il a peut-être dépassé 200 erreurs et a réussi à en lire environ la moitié. Le disque copié résultant a été introduit dans diskwarrior et a peut-être endommagé 10 fichiers sur environ un million.
Pittsburgh Mike
7

J'aime utiliser rsyncpour copier des fichiers d'une source corrompue vers une destination fonctionnelle:

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

Où:

-a = "mode archive" = revient dans les répertoires, copie les liens symboliques en tant que liens symboliques, préserve les autorisations, les temps, les groupes et les fichiers spéciaux, conserve également le propriétaire (lorsque propriétaire = racine) et les périphériques (lorsque propriétaire = racine)

-u= ignore le fichier dans le source si la copie correspondante dans la destination est plus récente

-v = sortie verbeuse

--delete= les fichiers dans la destination qui n'existent pas sur la source seront supprimés

--ignore-errors = supprime un fichier / répertoire en cas d'erreur d'E / S lors de la copie

Yuri Sucupira
la source
4

Cette astuce Macworld suggère d’utiliser dd pour effectuer une copie détaillée (en ignorant les erreurs), puis de monter l’image obtenue dans le Finder pour récupérer vos fichiers. Je n'ai pas essayé, mais il semble que cela pourrait fonctionner.

binarybob
la source
C’est bien, car vous voulez que vos données disparaissent rapidement si ce disque est endommagé. De cette manière, vous obtenez un bloc pour la copie des blocs, y compris les erreurs, qui sera ensuite disponible pour inspection à votre guise sans vous inquiéter du fait que le disque mourra correctement avant que vous ne récupériez tout. Je vais effectuer une opération, en un bon débutant sans finir, sans sauter de place de fragment de fichier à fragment de fichier, ce qui sera un travail plus difficile sur le lecteur qui a créé la copie DD.
Stuff
3
ddrescue est meilleur que dd dans ce cas, car il retentera de nouveau les sections défectueuses aussi longtemps que vous le laisserez en marche - voir la réponse précédente où le dieu OP supprime ses données après une quinzaine de semaines de travail (!). Notez que c'est une bonne approche si le matériel HD échoue, mais ne fait rien pour réparer la corruption de la structure du volume - elle est simplement copiée avec les fichiers.
Gordon Davisson
3

Vous pouvez envisager d'utiliser la ddcommande pour effectuer une copie bloc par bloc à partir de votre disque dur corrompu sur votre nouveau disque dur.

En supposant que votre nouveau disque dur ( /dev/disk2) soit de taille égale ou supérieure à celle de votre disque dur corrompu ( /dev/disk1), vous pouvez alors émettre:

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

blocksized @ 4k, ne tronque aucun bloc de données, ignore toutes les erreurs

Pour trouver les noms de périphériques, lancez mountd’abord le Terminal.

Biltu
la source
0

La dittocommande devrait fonctionner, je l’utiliserais dittoen conjonction avec l’ -voption pour verbose afin que vous puissiez voir exactement ce qui vous donne une erreur de ce qu’elle copie.

Roger
la source
3
Selon le demandeur dittone fonctionne pas. Pourquoi pensez-vous que c'est le cas?
nohillside
op demande des alternatives àditto
juniorRubyist
0

Vous pouvez essayer d'exécuter SuperDuper en ignorant les fichiers contenant des erreurs io, s'il ne s'agit que de quelques fichiers et que vous utilisez la fonctionnalité de mise à jour intelligente qui constitue un moyen très efficace de récupérer la plupart des données. (Je pense que la commande dd serait préférable si vous pouvez le faire).

Pas:

  1. Sélectionnez «Sauvegarder tous les fichiers» comme stratégie de sauvegarde.
  2. Dans les options, sélectionnez "Mise à jour intelligente" (sinon, la procédure prendra un temps ridiculement long si vous avez plus d'une ou deux erreurs, vous aurez besoin de la version payante pour cela).
  3. Exécuter la copie
  4. Lorsque la copie échoue, lisez les journaux pour trouver le fichier dont la copie a échoué, puis appuyez sur ok / close pour revenir à l'écran de démarrage.
  5. Sélectionnez 'éditer le script de copie sélectionné' dans le menu déroulant using
  6. Dans les commandes de script, ajoutez le fichier dont la copie a échoué. Le mot "ignorer" doit être indiqué une fois ajouté à la liste des fichiers.
  7. Enregistrez votre script avec un nom (par exemple, ignore-corrupted-files)
  8. Sélectionnez votre script et répétez les étapes 3 à 7 autant de fois que nécessaire pour ignorer tous les fichiers corrompus.
Cwohlman
la source
-2

Si votre lecteur est toujours accessible et que vous pouvez voir la hiérarchie des fichiers, mais que le processus de copie s’arrête en raison d’erreurs, vous pouvez utiliser le Unstoppable Copierprogramme.

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

ofir_aghai
la source
Il s’agit d’un programme uniquement destiné à Windows et l’opérateur demande des solutions Mac (sur un forum spécifique à Mac!)
Haydentech