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/…

223voto

grapefrukt Points 16804

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ème avec ça.

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

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

13 votes

Bien sûr, tant que / dev / sdb est au moins aussi grand que / dev / sda...

28 votes

Ajouter un "bs=100M conv=notrunc" et c'est beaucoup plus rapide à mon avis.

7 votes

@Eddie - et bien sûr la table de partition sera également copiée, donc si sdb est plus grand, vous aurez de l'espace inutilisé à la fin.

144voto

Chepech Points 133

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.gz

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 (si approprié), puis mettez à zéro tout l'espace inutilisé restant, facilitant ainsi 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.gz

De plus, vous pouvez obtenir un processus dd en cours d'exécution en arrière-plan pour signaler son état en lui envoyant un signal avec la commande kill, par exemple :

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

Vérifiez votre système - la commande ci-dessus est pour Linux, OSX et BSD dd ont des différences dans les signaux qu'ils acceptent (OSX utilise SIGINFO - vous pouvez appuyer sur Ctrl+T pour rapporter l'état).

2 votes

Est-ce que cela fonctionne également avec des fs "modernes" tels que BTRFS, NILFS, [tout ce que vous pouvez imaginer] ?

0 votes

DD travaille sur des périphériques de blocs, un niveau d'abstraction inférieur au système de fichiers, donc oui. Je ne l'ai pas encore essayé, cependant. Hmm, NILFS semble intéressant, je vais devoir jeter un œil à cela.

0 votes

Désolé, je viens de consulter la page d'accueil de NILFS et j'ai réalisé ce que tu voulais dire - peux-tu utiliser DD pour copier un instantané à partir d'un système de fichiers NILFS ? Je ne sais pas, mais ce serait intéressant de le découvrir.

48voto

ChrisR Points 303

ATTENTION : dd'une système de fichiers en direct peut corrompre des fichiers. La raison est simple, il n'a aucune compréhension de l'activité du système de fichiers qui peut être en cours, et ne fait aucun effort pour le mitigier. Si un écrit est partiellement en cours, vous obtiendrez un écrit partiel. Cela 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 faites une erreur avec les paramètres if et of sujets aux fautes de frappe, malheur à vous. Dans la plupart des cas, rsync est un outil tout aussi efficace écrit après l'avènement du multitâche, et fournira des vues cohérentes des fichiers individuels.

Cependant, DD devrait capturer avec précision l'état des bits d'un disque non monté. Bootloaders, volumes llvm, UUID de partition et étiquettes, etc. Assurez-vous simplement d'avoir un disque capable de refléter le disque cible bit par bit.

0 votes

Vous pouvez toujours utiliser 'sync' pour synchroniser le système de fichiers avec le disque dur avant d'exécuter dd.

8 votes

Je soupçonne que sync n'est pas la réponse 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 le sync, pendant l'opération dd ?

6 votes

Il est toujours bon de démonter d'abord le lecteur (ou le remonter en lecture seule), mais ce n'est pas toujours possible.

34voto

pottedmeat Points 1625

Lorsque vous utilisez dd pour cloner un disque qui peut 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 comble les secteurs manquants avec des octets nuls. C'est généralement la première étape que je prends si j'essaie de récupérer un disque défaillant ou en panne - obtenir une copie avant de tenter toute récupération, puis effectuer la récupération sur le disque bon (cloné). Je laisse l'outil de récupération gérer les secteurs vides qui n'ont pas pu être copiés.

De plus, vous pouvez constater que la vitesse de dd peut être affectée par le paramètre bs (taille de bloc). J'essaie généralement avec bs=32768, mais vous pouvez tester sur vos propres systèmes pour voir ce qui fonctionne le plus rapidement pour vous. (Cela suppose que vous n'ayez pas besoin d'utiliser une taille de bloc spécifique pour une autre raison, par exemple si vous écrivez sur une bande.)

19 votes

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)

6 votes

Il ne faut pas utiliser une taille de bloc trop grande si on essaie de sauter des blocs défectueux, sinon on en sautera trop. 4096 est suffisamment grand.

0 votes

Considérez ceci pour discuter des paramètres bs les plus rapides : serverfault.com/questions/147935/…

21voto

Ramiro Berrelleza Points 1017

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=/image.img

Assurez-vous bien sûr d'avoir les autorisations appropriées pour lire directement depuis /dev/hdb (je recommanderais de l'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 train d'être modifié - le monter en lecture seule est également acceptable). Une fois terminé, image.img sera un clone octet par octet de l'ensemble du disque.

Il y a quelques inconvénients à utiliser dd pour cloner des disques. Tout d'abord, dd copiera l'ensemble de votre disque, même les espaces vides, et si cela est fait sur un grand disque, peut entraîner 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 d'origine, mais vous ne pourrez pas utiliser d'espace supplémentaire que vous pourriez avoir sur le disque cible jusqu'à ce que vous redimensionniez vos partitions.

Vous pouvez également faire 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, pour la plupart, fait un excellent travail. Cependant, il y a quelque temps, j'ai eu un disque dur qui était sur le point de mourir, donc j'ai utilisé dd pour essayer de copier autant d'informations que possible avant qu'il ne meure complètement. J'ai alors découvert 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 l'a amené à abandonner et à arrêter la copie. À l'époque, je n'ai pas trouvé de moyen d'indiquer à dd de continuer malgré une erreur de lecture (bien qu'il semble qu'il en ait un paramètre), donc j'ai passé pas mal de temps à spécifier manuellement les sauts et les recherches pour passer par-dessus les sections illisibles.

J'ai passé du temps à rechercher des solutions à ce problème (après avoir terminé la tâche) et j'ai trouvé un programme appelé ddrescue, qui, selon le site, fonctionne comme dd mais continue la lecture même en cas d'erreur. Je n'ai jamais réellement utilisé le programme, mais cela vaut la peine d'être envisagé, surtout si le disque à copier est ancien, ce qui peut avoir des secteurs défectueux même si le système semble fonctionner normalement.

1 votes

Vous pouvez en fait aussi utiliser un montage en lecture seule. Un système de fichiers peut être remonté avec: `mount -o remount,ro /chemin/vers/périphérique`

0 votes

Bon point, j'ai ajouté une note dans ma réponse à ce sujet.

0 votes

J'ai utilisé ddrescue pour récupérer des données d'un disque dur en train de mourir, et je confirme que c'est génial.

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