54 votes

Meilleur moyen de copier tous les fichiers, en ignorant les erreurs ?

J'ai un disque dur partiellement corrompu qui ne peut pas être réparé par Disk Utility, mais qui peut être monté en lecture seule, ce qui rend les données accessibles.

J'essaie de copier tout le contenu récupérable sur un disque dur de rechange, mais toutes les méthodes que j'essaie échouent lorsqu'une erreur est rencontrée, laissant les fichiers restants non copiés.

  • Finder - Échecs
  • SuperDuper - Échecs
  • Ditto (commande terminale) - Échec

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

ditto retourne 0 si tout est copié, sinon non-zéro. ditto n'abandonne presque jamais, préférant signaler les erreurs en cours de route. Les messages de diagnostic seront imprimés sur l'erreur standard.

J'ai soumis un bug à Apple concernant ditto qui ne fonctionne pas comme annoncé.

D'autres idées ?

2 votes

Voir stackoverflow.com/a/27637277 plutôt que le --ignore-errors ci-dessous.

42voto

Mr Rabbit Points 16346

J'utilise cp -Rfpv sourcefile destinationfile avec succès sur une base assez régulière.

  • cp \= copie

  • R \= maintient les hiérarchies de fichiers, également en mode -R, cp continuera à copier même si des erreurs sont détectées).

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

  • p \= préserver les horodatages de modification des fichiers

  • v \= mode verbeux, affiche les fichiers transférés au fur et à mesure de sa progression

  • fichier source \= données que vous voulez copier

  • fichier de destination \= répertoire/disque vers lequel vous voulez copier


Si un fichier ne peut pas être copié en raison d'une erreur, le travail se poursuit et vous devriez voir un journal comme celui-ci :

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

27voto

user76335 Points 251

Essayez Gnu ddrescue -- Il s'agit d'un programme de récupération de données qui effectue une copie par bloc avec récupération des données corrompues pendant les opérations de copie. Vous pouvez l'obtenir pour OS X si vous utilisez Homebrew en tapant dans une fenêtre du Terminal :

brew install ddrescue

A guide sur arstechnica décrit comment sauver un disque défaillant en utilisant ddrescue. Assurez-vous de lire le guide, car il contient des informations utiles. Voici un aperçu de la manière d'y parvenir.

  • Localisez le lecteur en utilisant diskutil list . La colonne des identifiants est celle 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 en image. Assurez-vous que l'emplacement de Rescue.dmg est remplacé par l'emplacement souhaité.

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

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

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

0 votes

Il semble que cela devrait être la réponse sélectionnée - pourquoi ne l'est-elle pas ? L'inconvénient est-il que vous avez besoin de homebrew pour ddrescue ?

22voto

Yuri Sucupira Points 357

J'aime utiliser rsync afin de 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" = récure dans les répertoires, copie les liens symboliques en tant que liens symboliques, préserve les permissions, les temps, les groupes et les fichiers spéciaux, préserve également le propriétaire (lorsque le propriétaire = Root) et les périphériques (lorsque le propriétaire = Root)

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

-v = sortie verbeuse

--delete = fichiers dans destination qui n'existent pas sur source sera supprimé

--ignore-errors = supprime un fichier/répertoire en cas d'erreur d'E/S pendant le processus de copie.

6voto

binarybob Points 9292

Ce site Indice Macworld suggère d'utiliser dd pour faire une copie bit par bit (en ignorant les erreurs) puis de monter l'image résultante dans le Finder pour récupérer vos fichiers. Je n'ai pas essayé, mais il semble que cela pourrait fonctionner.

4voto

Supercereal Points 783

Vous pouvez envisager d'utiliser le dd pour effectuer une copie bloc par bloc de votre disque dur corrompu vers votre nouveau disque dur.

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

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

taille de bloc de 4k, ne pas tronquer les blocs de données, ignorer toutes les erreurs.

Pour trouver les noms des périphériques, exécutez mount du premier terminal.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X