Comment créer une image un peu identique d'une clé USB?

21

J'ai une clé USB qui est illisible pour une raison quelconque. Je veux en faire une image à des fins de stockage afin que je puisse essayer de récupérer les données de l'image à une date ultérieure.

Comment pourrais-je créer une image aussi identique d'une clé USB?


C'est l'erreur que j'obtiens en utilisant dd:

oshirowanen@desktop:~$ sudo dd if=/dev/sdd of=/USB_image
[sudo] password for oshirowanen: 
dd: reading `/dev/sdd': Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.00783 s, 0.0 kB/s
oshirowanen@desktop:~$ 
oshirowanen
la source
Quel éditeur hexadécimal utilisez-vous?
AJMansfield
Lorsque vous ne pouvez pas lire à partir du périphérique /dev/sdxpointant vers la clé USB, il y a un problème grave, et je pense qu'il n'y a pas d'outils disponibles pour les utilisateurs normaux, cela fonctionnera. Voir ce lien pour plus de détails, askubuntu.com/questions/144852/… ; N'abandonnez pas tout de suite. Essayez en fonction de la liste des choses qui pourraient permettre à la lecture de fonctionner. Vous pouvez peut-être séparer la clé USB et trouver une carte micro SD, qui fonctionne toujours selon le commentaire de @ ubfan1 (à la réponse liée).
sudodus du
vous avez 2 options pour gérer votre problème: 1ère simple: exécutez sudo su puis en tant que root exécutez votre commande dd 2e version plus qualifiée exécutez dd avec status et '' sudo bash -c 'dd status = progress if = / dev / sd * | gzip> ~ / Backup-USB.img.gz '
WiKrIe

Réponses:

39

dd il!

L'utilisation serait quelque chose comme sudo dd if=/dev/sdb of=~/USB_image/ dev / sdb est votre lecteur USB tel que répertorié par sudo fdisk -let ~ / USB_image est le fichier image où la copie sera faite (un chemin où le fichier image sera créé).

Pour restaurer l'image sur un autre lecteur USB, il suffit d'inverser le processus: sudo dd if=~/USB_image of=/dev/sdbrestaure ~ / USB_image sur le périphérique sdb . Assurez-vous simplement que la nouvelle clé USB est aussi grande ou plus grande que la clé d'origine.

Vous pouvez également monter le fichier image que vous venez de créer dans un chemin sans avoir besoin de le restaurer d'abord sur un autre lecteur USB avec mount ~/USB_image /mnt/USB_image -o loop.

Bruno Pereira
la source
Que faire si fdisk -lvous ne voyez pas le lecteur USB? Cependant, je peux le voir dans le programme Utilitaire de disque sous le nom / dev / sdd, mais lorsque j'essaie d'utiliser votre commande, elle semble échouer.
oshirowanen
Échec avec quelle faute?
Bruno Pereira
Ajout de l'erreur à la question d'origine car c'était trop pour un commentaire.
oshirowanen
1
Si fdisk n'affiche pas le périphérique, utilisez dmesg pour voir ce qui se passe lorsque le périphérique est branché. Dmesg est une liste des interactions du noyau, donc fondamentalement si le matériel fait quelque chose sur votre ordinateur, il y a un message à ce sujet dans dmesg.
j0h
2
@Alex utiliser status='progress'avec dd sur Ubuntu, ou déterminer le PID de votre ddcommande et lui envoyer un SIGUSR1signal. Je ne suis pas sûr des autres implémentations, cependant.
Sergiy Kolodyazhnyy
7

Utilisez ddrescue. Il continuera après les erreurs, où ddéchouera tout simplement.

En outre, ddrescueest dans le référentiel. Le 13.04, j'ai tapé sudo apt-get install gddrescue pour installer.

Utilisez sudo fdisk -lou dmesgpour déterminer l'emplacement du périphérique, par exemple:, /dev/sdbpuis exécutez une commande telle que

ddrescue /dev/sdb /home/user/desktop/bkp.img

il existe de nombreuses options ddrescueet vous voudrez peut-être lire les manpages. De plus, je ne sais pas pourquoi votre matériel tombe en panne et se vide dd. Un bloc défectueux peut provoquer la ddfermeture, mais les pannes de courant intermittentes peuvent également le faire. dmesgpeut vous en dire plus sur les pannes matérielles que vous rencontrez.

ASSUREZ-VOUS que l'appareil n'est pas monté! lorsque vous essayez de récupérer des données, de créer des images, etc. Cela peut provoquer des problèmes.

Il y a beaucoup de choses qui peuvent mal tourner dans la récupération de données. Postez en arrière si vous avez des problèmes. testdiskest un bon utilitaire pour faire de la récupération de données une fois que vous avez une image.

Pour plus de clarté, s'agit-il d'un disque dur USB ou d'un périphérique USB (mémoire à l'état solide)?

Les erreurs d'E / S indiquent généralement des dysfonctionnements matériels plutôt que des altérations du système de fichiers.

Essayez également d'obtenir l'analyse des données SMART de l'appareil, si elle est disponible. Cela peut vous dire des choses comme si l'appareil chauffait trop longtemps, allumé depuis longtemps, a de mauvais secteurs, exposés à plus de X non. de Gs etc.

j0h
la source
Clé USB, il n'y a pas de données SMART à analyser ... Je pense aussi que vous devez utiliser sudopour ddrescue, * où dd échouera simplement * n'est pas vraiment vrai car vous pouvez configurer ddpour ignorer les erreurs de lecture. testdiskest génial lorsque vous pouvez lire les secteurs de données perdues , pas lorsque le lecteur est mort.
Bruno Pereira
# est le symbole de root, donc non, sudo n'est pas requis. si c'était $ alors oui.
j0h
Je veux également noter que si ddrescue, ou même dd échoue, mais que vous êtes capable de générer une image, vous pouvez toujours essayer de faire la récupération de données sur cette image.
j0h
Je suggérerais l'utilisation de gddrescuecontre ddrescuecar il gddrescueest plus récent et plus capable de faire le travail qui le ddrescuefait.
Bruno Pereira
1
Je ne connais même pas l'homme, lisez mon post. gddrescue est le package et ddrescue est la commande.
j0h
2

Vous pouvez créer une image d'une clé USB (ou d'un autre appareil) à l'aide de dd.

Par exemple

dd if=<usb device> of=usb.img

Vous pouvez ajouter plus de paramètres pour ddoptimiser la commande (par exemple bs).

Uwe Plonus
la source
2

dd, comme mentionné par une affiche précédente, est la voie à suivre. Cependant, vous souhaiterez qu'il se poursuive en cas d'erreur, vous devriez donc commencer par:

dd if=<usb device> of=<new file on disk with enough space> bs=<should match your blocksize> conv=noerror,sync 

La partie importante est la dernière: conv=syncindique à dd de remplir tous les blocs qu'il ne peut lire que partiellement avec des zéros, donc l'image résultante peut avoir quelques zéros de trop, mais égalera structurellement le disque feuilleté, moins ses erreurs de lecture.conv=noerror s'est occupé de ces erreurs de lecture, disant à dd de continuer avec le bloc suivant. À ce stade, la taille du bloc est importante, car si elle est plus grande que nécessaire pour ignorer l'erreur, les données lisibles seront perdues ici. Le Blocksize devrait toujours être un facteur de deux - en cas de doute, 512kdevrait faire l'affaire.

Je suggérerais alors:

  • stocker une copie non modifiée de cette image dans un endroit sûr
  • fsck une copie de l'image disque
  • monter l'image disque
  • vérifiez vos fichiers - ils sont lisibles sans problème maintenant, mais certains peuvent être manquants ou tronqués
  • Si l'appareil lui-même ne peut pas être lu du tout, vous n'avez peut-être pas de chance. De plus, si le périphérique contient des logiciels propriétaires, il peut être configuré pour renvoyer des erreurs de lecture lors de l'accès dans les premiers blocs.

(Me citant en partie d'un article écrit en 2010)

Si vous n'avez pas besoin de rester natif, vous pouvez toujours essayer des outils qui tentent de faciliter quelque peu le processus, tels que ddrescue (package gddrescue) et son compagnon ddrescueview( sourceforge ) pour visualiser les erreurs.

Tatjana Heuser
la source
2

En ce qui concerne la seconde moitié de votre question "C'est l'erreur que j'obtiens lorsque j'utilise dd": je peux voir quelques possibilités.

  1. Notez la différence de commande que vous avez tapée par rapport à la réponse acceptée; vous en manquez ~devant /USB_image. En d'autres termes, vous essayez de sortir la racine de votre système de fichiers plutôt que dans votre répertoire personnel.
  2. /dev/sddpeut ne pas être le bon lecteur. Exécutez sudo fdisk -let comparez la taille du lecteur à la taille connue de la clé USB. Par exemple, je sais que c'est ma clé USB car il est proche de 16 Go: Disk /dev/sdf: 15.8 GB, 15805186048 bytes.
MDMower
la source