239 votes

Utilisation de DD pour le clonage de disque

Il y a eu plusieurs 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 en raison de sa facilité d'utilisation et du fait qu'il est facilement disponible sur pratiquement toutes les distributions Linux amorçables.

Quelle est la meilleure façon d'utiliser dd pour cloner un disque? J'ai rapidement fait une recherche sur Google, et le premier résultat était une tentative échouée apparente. Y a-t-il quelque chose que je doive faire après avoir utilisé dd, c'est-à-dire y a-t-il quelque chose qui NE PEUT être lu en utilisant dd?

0 votes

Je suis conscient de la façon dont dd fonctionne, ma question était plutôt dirigée vers d'éventuels problèmes connus liés à dd lors du clonage de disques (comme décrit par le lien), peut-être que cela n'était pas très clair. Ce que sa réponse contient et la vôtre ne contient pas, c'est "Je n'ai jamais eu de problème avec ça". J'ai également voté pour votre réponse, car vous avez définitivement présenté des points intéressants (j'aime celui sur l'absence d'indication de progression).

1 votes

Il semblerait que vous ayez obtenu le Spolsky Bump : joelonsoftware.com/items/2009/05/29.html

0 votes

N'avais pas vu cela ici lorsque j'ai posé (et répondu) une question similaire sur superutilisateur - superutilisateur.com/questions/11453/…

17voto

Ben Williams Points 719

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, en cas d'erreurs de lecture, dd continue d'essayer - potentiellement en attendant longtemps que des délais surviennent. dd_rescue fait des choses intelligentes comme la lecture jusqu'à une erreur, puis en choisissant un endroit plus loin sur le disque et en lisant en arrière jusqu'à la dernière erreur, et dd_rhelp est essentiellement un gestionnaire de session dd_rescue - démarrant et reprenant de manière astucieuse les exécutions de dd_rescue pour le rendre plus rapide à nouveau.

Le résultat final de dd_rhelp est la récupération maximale des données en un minimum de temps. Si vous laissez dd_rhelp s'exécuter, à la fin il fait exactement le même travail que dd en le même temps. Cependant, si dd a rencontré des erreurs de lecture à l'octet 100 de votre disque de 100 Go, vous devriez attendre longtemps pour récupérer les autres 9 999 900 octets*, tandis que dd_rhelp+dd_rescue récupérera la majeure partie des données beaucoup plus vite.

1 votes

Aide pour choisir entre dd_rescue et ddrescue : askubuntu.com/a/211579/50450

9voto

retracile Points 1230

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

Maintenant, l'une des choses intéressantes ici est que vous créez un flux d'octets... et vous pouvez faire beaucoup de choses avec cela : le compresser, l'envoyer sur le réseau, le diviser en petits blocs, etc.

Par exemple :

dd if=/dev/sda | ssh utilisateur@serveurdebackup "cat > backup.img"

Mais de manière plus puissante :

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

L'exemple ci-dessus copie une image compressée du disque dur source vers un système distant, où elle est stockée en morceaux numérotés de 2Go en utilisant le nom de l'hôte source tout en vous tenant informé de l'avancement.

Remarquez 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 voudrez peut-être sauter la compression, ou effectuer la compression côté distant, ou activer la compression ssh.

0 votes

+1 Le passage par gzip peut économiser beaucoup de temps et de bande passante!

0 votes

Je devrais également noter que l'ajout de 'bs=1M' à la commande dd améliorera généralement considérablement la vitesse.

7voto

Brandon Points 169

Pour cloner un disque, tout ce que vous devez vraiment faire est de spécifier l'entrée et la sortie à dd :

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

Assurez-vous bien sûr d'avoir les autorisations appropriées pour lire directement depuis /dev/hdb (je recommande d'exécuter en tant que root), et que /dev/hdb n'est pas monté (vous ne voulez pas copier pendant que le disque est en cours de modification). Une fois terminé, hdb.img sera un clone octet par octet de tout le disque.

Il y a quelques inconvénients à utiliser dd pour cloner des disques. Tout d'abord, dd copiera tout votre disque, même les espaces vides, et si cela est fait sur un grand disque, cela peut se traduire par un fichier image extrêmement volumineux. Deuxièmement, dd ne fournit absolument aucune indication de progression, ce qui peut être frustrant car la copie prend beaucoup de temps. Troisièmement, si vous copiez cette image sur d'autres disques (encore une fois, en utilisant dd), ils doivent être aussi grands ou plus grands que le disque original, mais vous ne pourrez pas utiliser d'espace supplémentaire que vous pourriez avoir sur le disque cible avant de redimensionner vos partitions.

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

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

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

Le premier inconvénient peut être résolu en compressant les données pendant la copie. Par exemple :

dd if=/dev/hdb | gzip -9 > hdb.img.gz

Le deuxième inconvénient peut être résolu en utilisant l'outil pipeview (pv). Par exemple :

dd if=/dev/hdb | (pv -s `fdisk -l /dev/hdb | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | cat > hdb.img

Je ne connais aucun moyen de surmonter le troisième inconvénient.

De plus, vous pouvez accélérer le temps de copie en indiquant à dd de travailler avec de plus gros morceaux de données. Par exemple :

dd if=/dev/hdb of=hdb.img bs=1024

1 votes

Vous avez déjà indiqué comment surmonter le troisième inconvénient... redimensionner les partitions. Agrandir une partition est généralement une opération sûre et rapide (par rapport au rétrécissement ou au déplacement, qui est lent et plus dangereux car il déplace des données).

0 votes

Gzipping ne fonctionnera pas avec un disque qui a été utilisé pendant un certain temps, car il sera rempli de données actuelles ou supprimées. gzip ne fonctionnera que si l'espace vide est mis à zéro, ce qui n'est le cas que pour un disque neuf.

3 votes

@Tozz: Vous pouvez améliorer la compressibilité d'une image système de fichiers en remplissant le système de fichiers avec un fichier rempli de 0, en le synchronisant sur le disque, puis en le supprimant. dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon (Sauf intelligence supplémentaire au niveau du système de fichiers.)

7voto

Sam Watkins Points 263
dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror

Cela copiera le disque et sautera les blocs avec erreurs, ce qui est très important.

Ce sont les options de base et essentielles pour utiliser dd pour cloner ou sauver un disque.

Je ne voulais pas poster une autre réponse, mais il n'y avait pas de bonnes réponses avec les options essentielles "conv=sync,noerror" parmi les 25 déjà postées.

1 votes

@Michael la réponse que vous avez liée ne contient pas un exemple complet de commande, et comporte d'autres défauts - il n'est pas recommandé d'utiliser une taille de bloc importante avec conv=sync,noerror car cela pourrait sauter trop de données pour chaque bloc défectueux. Ces options sont essentielles pour le "clonage de récupération", et ce n'est pas pratique de devoir chercher les commentaires pour les trouver. La réponse la plus populaire est suffisante si les disques n'ont pas de blocs défectueux, par exemple pour cloner un disque propre, mais pas pour la récupération.

0 votes

@Michael l'exemple que j'ai donné est une commande que j'ai utilisée plusieurs fois pour la récupération professionnelle de disque. Bien qu'il existe d'autres outils qui pourraient faire un travail légèrement meilleur, l'exemple que j'ai donné est meilleur en matière de clonage de récupération de disque que tous les autres exemples de dd ici, tout en étant également adapté pour cloner un disque sans erreur. Par conséquent, je considère ma réponse comme la meilleure ici sur comment "utiliser DD pour le clonage de disque". Je n'ai pas ajouté d'informations sur la surveillance de la progression, la compression, etc., car je voulais le garder simple, et me concentrer sur la fourniture d'une réponse courte qui couvre les bases.

1 votes

En réalité, cela a été mentionné précédemment, dans une réponse et au moins deux commentaires.

5voto

user5692 Points 77

Une autre chose sympa que vous pouvez faire avec dd et les disques de secours est de copier des données via le réseau:

machine_distante$ nc -l -p 12345

machine_locale$ dd if=/dev/sda | nc machine_distante 12345

Vous pouvez ajouter gzip dans ces deux pipelines si le réseau n'est pas local. Pour suivre la progression, utilisez pv. Pour que netcat de machine_locale se ferme après avoir fini de copier, vous pouvez ajouter -w 5 ou quelque chose.

9 votes

Ceci n'est pas tout à fait correct. La commande 'remote_machine' manque quelque chose, comme > disk_backup.img ou |dd of=/dev/sdb ou quelque chose d'autre, selon ce que vous voulez faire. Je suppose que vous ne voulez pas élaborer une image disque vers stdout.

1 votes

Et ajouter gzip des deux côtés pour minimiser encore davantage les données envoyées.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X