Question Utilisation de DD pour le clonage de disque


Il y a eu un certain nombre de questions concernant les outils de clonage de disque et dd a été suggéré au moins une fois. J'ai déjà envisagé d'utiliser dd moi-même, principalement pour sa facilité d'utilisation, et qu'il est facilement disponible sur à peu près toutes les distributions Linux amorçables.

Quelle est la meilleure façon d'utiliser dd pour cloner un disque? J'ai fait une recherche rapide sur Google, et le premier résultat était une apparente tentative échouée. Dois-je faire quelque chose après avoir utilisé dd, c’est-à-dire qu’il n’ya rien qui ne puisse être lu avec dd?


176
2018-05-05 18:21


origine


Je sais comment dd fonctionne, ma question portait davantage sur les problèmes connus liés à dd lors du clonage de disques (comme décrit par le lien), peut-être que ce n'était pas très clair. Ce que sa réponse contient et que la vôtre ne dit pas: "Je n'ai jamais eu de problèmes avec cela". J'ai également fait passer votre réponse à l'ordre du jour, car vous avez clairement présenté des points intéressants (j'aime celui qui indique l'absence d'indication de progrès). - falstro
On dirait que tu as le Spolsky Bump: joelonsoftware.com/items/2009/05/29.html - Kyle Cronin
n'a pas vu cela ici quand j'ai posé (et répondu) une question similaire sur le superutilisateur - superuser.com/questions/11453/… - warren
Il est ironique que Joel ait lié la question à un bon exemple de faute de serveur, bien qu'aucune des réponses n'ait été bonne. Il n’ya pas eu une seule réponse parmi 25 (sans les commentaires) avec le droit dd options pour ignorer les blocs défectueux - ce qui est essentiel lors du clonage de disques pour la récupération. J'ai ajouté une meilleure réponse, qui peut cloner des disques ayant des blocs défectueux: dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror - Sam Watkins
Je pense que dd restore pourrait "échouer" si on parlait de systèmes de fichiers dépendant de la géométrie du disque et que la restauration était effectuée sur des disques durs non identiques? J'ai eu des échecs lors de la restauration du DD, et je pense que c'était le problème dans mon cas. - Marco


Réponses:


dd est certainement le meilleur outil de clonage, il créera une réplique à 100% simplement en utilisant la commande suivante. Je n'ai jamais eu de problèmes avec ça.

dd if=/dev/sda of=/dev/sdb bs=32M

Sachez que lors du clonage de chaque octet, vous ne devez pas l'utiliser sur un lecteur ou une partition en cours d'utilisation. En particulier, les applications telles que les bases de données ne peuvent pas très bien gérer cela et vous pourriez vous retrouver avec des données corrompues.


152
2018-05-05 18:31



Bien sûr, tant que / dev / sdb est au moins aussi grand que / dev / sda ... - Eddie
ajoutez un "bs = 100M conv = notrunc" et c'est beaucoup plus rapide dans mon expérience. - Tim Williscroft
soyez très prudent avec les lettres "i" et "o" ... - bandi
Personne ne semble connaître cette astuce ... dd est un programme de copie asymétrique, ce qui signifie qu’il lira d’abord, puis d’écrire, puis de nouveau. Vous pouvez diriger le dd vers lui-même et le forcer à effectuer la copie de manière symétrique, comme ceci: dd if=/dev/sda | dd of=/dev/sdb. Lors de mes tests, l'exécution de la commande sans le tuyau m'avait donné un débit de ~ 112 Ko / s. Avec le tuyau, j'ai eu ~ 235kb / s. Je n'ai jamais rencontré de problèmes avec cette méthode. Bonne chance! - Mistiry
@ Mystère, ce n'est pas le sens du mot symétrique. - psusi


Pour économiser de l’espace, vous pouvez compresser les données produites par dd avec gzip, par exemple:

dd if=/dev/hdb | gzip -c  > /image.img

Vous pouvez restaurer votre disque avec:

gunzip -c /image.img.gz | dd of=/dev/hdb

Pour économiser encore plus d'espace, défragmentez le lecteur / partition que vous souhaitez cloner au préalable (le cas échéant), puis mettez à zéro tout l'espace inutilisé, ce qui facilitera la compression par gzip:

mkdir /mnt/hdb
mount /dev/hdb /mnt/hdb
dd if=/dev/zero of=/mnt/hdb/zero

Attendez un peu, dd finira par échouer avec un message "disque plein", puis:

rm /mnt/hdb/zero
umount /mnt/hdb
dd if=/dev/hdb | gzip -c  > /image.img

De plus, vous pouvez faire en sorte qu'un processus dd exécuté en arrière-plan indique l'état en envoyant un signal à l'aide de la commande kill, par exemple:

dd if=/dev/hdb of=/image.img &
kill -SIGUSR1 1234

Vérifiez votre système - la commande ci-dessus concerne Linux, OSX et BSD Les commandes dd diffèrent par les signaux acceptés (utilisation de OSX SIGINFO - vous pouvez appuyer sur Ctrl+T pour signaler le statut).


104
2018-05-06 22:47



Cela fonctionne-t-il également avec des systèmes "modernes" tels que BTRFS, NILFS, [tout ce dont vous pouvez rêver]? - Steve Schnepp
DD fonctionne sur des périphériques en mode bloc, à un niveau d'abstraction inférieur au système de fichiers, il devrait donc, oui. Je n'ai pas vraiment essayé, cependant. Hmm, NILFS a l'air intéressant, je vais devoir regarder ça. - David Hicks
+1 pour le kill -SIGUSR1 %1, et la commande OSX dd accepte heureusement SIGUSR1 ... super utile, merci! - stuartc
+1 pour Kill -SIGUSR1 1234 Je cherchais ça. - hot2use
Devrait-ce être: dd if=/dev/hdb | gzip -c > /image.img.gz ? - Mike Causer


MISE EN GARDE: dd'ing un système de fichiers live peut corrompre les fichiers. La raison est simple, il ne comprend pas l'activité du système de fichiers qui peut se produire et ne tente pas de l'atténuer. Si une écriture est partiellement en cours, vous obtiendrez une écriture partielle. Ce n'est généralement pas bon pour les choses, et généralement fatal pour les bases de données. De plus, si vous bousiller le typo sujette si et de paramètres, malheur à vous. Dans la plupart des cas, rsync est un outil tout aussi efficace écrit après l’avènement de multitâcheet fournira des vues cohérentes de fichiers individuels.

Toutefois, DD doit capturer avec précision l’état du bit d’un lecteur non monté. Chargeurs de démarrage, volumes llvm, UUID de partition et étiquettes, etc. Assurez-vous simplement que vous disposez d'un lecteur capable de reproduire bit par bit le lecteur cible.


37
2018-05-05 20:20



Je soupçonne que sync n’est pas la solution aux problèmes de corruption de fichiers. Que se passe-t-il si un démon ou quelque chose écrit plus de fichiers après la sync, pendant le dd opération? - Deleted
C’est une bonne idée de démonter le disque d’abord (ou de remonter en lecture seule), mais ce n’est pas toujours possible. - Alex Bolotov
Dans ce cas, vous utilisez rsync et le laissez manipuler les fichiers de manière magique pour obtenir un fichier cohérent, puis laissez la sémantique de Copy On Write gérer les écritures entrantes. - jldugger
J'aimerais ajouter que l'exécution de dd sur un système de fichiers monté NE CORRUPTERA PAS les fichiers du système de fichiers monté, mais ce que cela signifie ici, c'est que la copie du système de fichiers sera nécessairement dans un bon état connu. - 3molo
En utilisant rsync veillera à ce que le données internes dans le système de fichiers de destination est cohérent. Il ne sera pas assurez-vous que les données contenues dans les fichiers sont cohérentes - pour ce faire, vous devez verrouiller les fichiers et tout programme qui écrit dans les fichiers doit respecter ces verrouillages. - Martin Geisler


Lorsque vous utilisez dd pour cloner un disque pouvant contenir des secteurs défectueux, utilisez "conv = noerror, sync" pour vous assurer qu'il ne s'arrête pas lorsqu'il rencontre une erreur et remplit le ou les secteurs manquants avec des octets nuls. C’est généralement la première étape que je fais si je tente de récupérer un disque en panne ou en panne: obtenez une copie avant toute tentative de récupération, puis effectuez la récupération sur le bon disque (cloné). Je laisse à l'outil de récupération le soin de gérer tous les secteurs vierges qui ne pourraient pas être copiés.

Vous pouvez également constater que la vitesse de dd peut être affectée par le paramètre bs (block size). J'ai l'habitude d'essayer bs = 32768, mais vous voudrez peut-être le tester sur vos propres systèmes pour voir ce qui fonctionne le plus rapidement pour vous. (Cela suppose que vous n'avez pas besoin d'utiliser une taille de bloc spécifique pour une autre raison, par exemple si vous écrivez sur une bande.)


26
2018-05-07 02:42



Si vous avez un disque avec des secteurs défectueux, vous devriez vraiment utiliser 'ddrescue' au lieu de dd. C'est beaucoup plus efficace et a beaucoup plus de chances de récupérer plus de données. (Ne le confondez pas avec dd_rescue, qui n'est pas aussi bon) - davr
ne doit pas utiliser une taille de bloc importante si vous essayez de sauter des blocs défectueux, sinon trop. 4096 est assez grand. - Sam Watkins


Pour cloner un disque, il vous suffit de spécifier l’entrée et la sortie vers dd:

dd if=/dev/hdb of=/image.img

Bien sûr, assurez-vous que vous disposez des autorisations appropriées pour lire directement à partir de / dev / hdb (je vous recommande de l'exécuter en tant que root), et que / dev / hdb n'est pas monté (vous ne voulez pas copier pendant la modification du disque - le montage en lecture seule est également acceptable). Une fois terminé, image.img sera un clone octet par octet du disque entier.

L'utilisation de dd pour cloner des disques présente quelques inconvénients. D'abord, dd copiera l'intégralité de votre disque, même de l'espace disponible. Si vous le faites sur un disque volumineux, le fichier image est extrêmement volumineux. Deuxièmement, dd ne fournit absolument aucune indication de progrès, ce qui peut être frustrant, car la copie prend beaucoup de temps. Troisièmement, si vous copiez cette image sur d'autres lecteurs (encore une fois, à l'aide de dd), ils doivent être aussi grands ou plus grands que le disque d'origine. Cependant, vous ne pourrez utiliser aucun espace supplémentaire disponible sur le disque cible tant que vous ne l'utiliserez pas. redimensionnez vos partitions.

Vous pouvez également effectuer une copie directe de disque à disque:

dd if=/dev/hdb of=/dev/hdc

mais vous êtes toujours soumis aux limitations ci-dessus concernant l'espace libre.

En ce qui concerne les problèmes ou les pièges, dd fait généralement un excellent travail. Cependant, il y a quelque temps, j'avais un disque dur sur le point de mourir et j'ai donc utilisé dd pour essayer de copier les informations que je pouvais obtenir avant de mourir complètement. On a alors appris que dd ne gérait pas très bien les erreurs de lecture - il y avait plusieurs secteurs sur le disque que dd ne pouvait pas lire, ce qui obligeait dd à abandonner et à arrêter la copie. À l’époque, je ne trouvais pas le moyen de dire à dd de continuer malgré une erreur de lecture (bien que il semble comme si elle avait ce paramètre), j’ai donc passé un peu de temps à spécifier manuellement ignorer et tenter de sauter par-dessus les sections illisibles.

J'ai passé un peu de temps à chercher des solutions à ce problème (une fois la tâche terminée) et j'ai trouvé un programme appelé sauvetage, qui, selon le site, fonctionne comme dd mais continue à lire même s’il rencontre une erreur. Je n'ai jamais réellement utilisé le programme, mais cela vaut la peine d'être pris en compte, en particulier si le disque à partir duquel vous effectuez la copie est ancien, ce qui peut avoir des secteurs défectueux même si le système semble bien fonctionner.


17
2018-05-05 18:26



... dd ne fournit absolument aucune indication de progrès ... - Eh bien, ce n'est pas vrai - il existe un moyen un peu compliqué de montrer les progrès - Vous devez connaître le pid du processus dd ('ps -a | grep dd'), puis envoyer le signal USR1 à ce processus - 'kill -USR1 < dd_pid_here> '(sans <>), ce qui oblige dd à afficher les informations de progression. - Michal Bernhard
"plusieurs secteurs sur le disque que dd ne pouvait pas lire": je pense que conv=sync,noerror aiderait. - Gauthier
le conv=sync,noerror les options sont essentielles, elles permettent à dd d'ignorer les blocs défectueux et de les supprimer dans l'image afin que les éléments soient correctement alignés. Des accessoires pour les très rares personnes qui ont commenté quelque chose à ce sujet. - Sam Watkins
GNOU ddrescue fournit un indicateur de progression sans aucune option spéciale, et vous pouvez arrêter la copie et reprendre là où vous l'avez laissée. - endolith
Une façon moins délicate d’avancer avec dd est d’ajouter l’option status=progress - James


Si le lecteur source est endommagé, vous aurez plus de chance en utilisant dd_rhelp avec dd_rescue (ma préférence personnelle) ou GNU ddrescue.

La raison derrière cela est que, sur les erreurs de lecture, dd continue d’essayer et d’essayer et d’essayer - d’attendre potentiellement longtemps avant que les délais ne se produisent. dd_rescue fait des choses intelligentes comme lire jusqu'à une erreur, puis choisir un emplacement plus loin sur le disque et lire à l'envers jusqu'à la dernière erreur, et dd_rhelp est fondamentalement un dd_rescuegestionnaire de session - démarrer et reprendre intelligemment dd_rescue court pour le rendre plus rapide encore.

Le résultat final de dd_rhelp est le maximum de données récupérées en un minimum de temps. Si tu pars dd_rhelp en cours d'exécution, à la fin, il fait exactement le même travail que dd dans le même temps. Toutefois, si dd rencontré des erreurs de lecture à l’octet 100 de votre disque de 100 Go, vous devrez attendre longtemps pour récupérer les 9 999 999 autres octets *, alors que dd_rhelp+dd_rescue récupérerait la majeure partie des données beaucoup plus rapidement.


11
2018-05-31 02:12



Un peu d’aide pour choisir entre dd_rescue et ddrescue: askubuntu.com/a/211579/50450 - Johann


Le disque source ne doit pas avoir de système de fichiers monté. En tant qu'utilisateur capable de lire le périphérique bloc (la racine fonctionne), exécutez 'dd if = / dev / sda ....'

Une des choses intéressantes ici est que vous créez un flux d'octets ... et que vous pouvez faire beaucoup avec ça: le compresser, l'envoyer sur le réseau, le réduire en morceaux plus petits, etc.

Par exemple:

dd if=/dev/sda | ssh user@backupserver "cat > backup.img"

Mais plus puissamment:

dd if=/dev/sda | pv -c | gzip | ssh user@backupserver "split -b 2048m -d - backup-`hostname -s`.img.gz"

Ce qui précède copie une image compressée du disque dur source sur un système distant, où elle est stockée sous forme de fragments 2G numérotés à l’aide du nom de l’hôte source tout en vous tenant au courant des progrès.

Notez que selon la taille du disque, la vitesse du processeur sur la source, la vitesse du processeur sur la destination, la vitesse du réseau, etc. Vous pouvez ignorer la compression, effectuez la compression côté distant ou activez la compression ssh.


7
2018-05-29 19:23



+1 La tuyauterie via gzip permet d’économiser beaucoup de temps et de bande passante! - M. Dudley
Je devrais également noter que l'ajout de 'bs = 1M' à la commande dd améliorera généralement considérablement la vitesse. - retracile