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

3voto

Comment copier en utilisant dd (dans ce cas, vers une machine distante, mais le même principe s'applique à une copie locale) en affichant la progression.

Cela fonctionne en stockant le pid via le descripteur de fichier 3 dans /tmp/pid, qui est ensuite utilisé pour les arrêts ultérieurs avec le signal USR1. Une particularité était de filtrer la sortie de la progression sur stderr pour n'obtenir qu'une seule ligne en filtrant stderr à travers un sous-shell.

(dd bs=1M if=$lv-snapshot & echo $! >&3 ) 3>/tmp/pid  2> >(grep 'copied' 1>&2) | gzip --fast | ssh $DEST "gzip -d | dd bs=1M of=$lv" &
# Besoin de ce sleep pour laisser le temps aux commandes ci-dessus de s'exécuter
sleep 1
PID=$(

0 votes

Pas vraiment pertinent par rapport à la question, mais c'est un astuce de shell intéressante utilisant un sous-shell et des descripteurs de fichiers élevés (supérieurs à stderr) pour transmettre des données à l'extérieur, +1

0 votes

Je me référais moi-même à cette page pour différentes options dd lors du clonage de disques, donc il semblait approprié à l'époque de mettre le résultat final de ce que j'ai utilisé pour le clonage, d'autant plus que je le trouvais plutôt sympa :)

0 votes

Echo $! > /tmp/pid

3voto

Znik Points 338

La plupart des informations ont été décrites dans les recettes précédemment insérées, mais pas toutes.

Sous Linux, vous pouvez cloner un disque dur ou une partition avec la commande dd. Attention, si vous faites une erreur, vous perdrez toutes vos données.

Tout d'abord, la destination ne doit pas être utilisée, deuxièmement la source ne doit pas être utilisée, ou remontée en mode lecture seule. Sinon, la copie sera endommagée. Si le remontage est impossible, veuillez créer un lecteur bootable (HDD/SSD/clé USB) avec n'importe quelle distribution live Linux. Je préfère Knoppix, mais c'est à vous de choisir. Si possible, vous pouvez démarrer ou changer le niveau système en 1, pour le mode utilisateur unique, ou vous pouvez redémarrer directement en mode utilisateur unique, cela dépend de la distribution. Si vous ne clonez qu'une seule partition, cette partition doit être démontée ou remontée en lecture seule :

umount /point_de_montage_ou_dispositif

ou

remount -o,ro /point_de_montage_ou_dispositif

Si vous voulez cloner un disque dur entier, vous devez démonter ou remonter toutes les partitions.

Vous devez identifier le dispositif source et de destination. Veuillez regarder le dmesg, toutes les informations nécessaires sur le dispositif y sont stockées, avec le fabricant, etc. Alternativement, l'identification peut être basée sur la taille du dispositif, si elle est différente. Ensuite, la destination doit être la même taille ou plus grande que la source. Vous devez calculer la source, par exemple : fdisk -l /dev/sda à l'exception de la géométrie de la partition (il peut y avoir un GPT), vous trouverez :

par exemple :

# fdisk -l /dev/sda

Disque /dev/sda : 21.5 Go, 21474836480 octets
255 têtes, 63 secteurs/piste, 2610 cylindres, total 41943040 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
taille d'E/S (minimale/optimale) : 512 octets / 512 octets
Identifiant du disque : 0x000f1d1e

   Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sda1   *        2048    40136703    20067328   83  Linux
/dev/sda2        40138750    41940991      901121    5  Étendue
/dev/sda5        40138752    41940991      901120   82  partition de swap Linux /    Solaris

ensuite, essayons avec un diviseur supérieur à 512, nous avons 41943040 secteurs physiques :

41943040 / 256 = 163840, très bon, nous pouvons copier en blocs de 256 secteurs. Pouvons-nous en faire plus ? Essayons :

41943040 / 1024 = 40960, je pense que c'est suffisant, nous sélectionnerons celui-ci. Calculons la taille du groupe de secteurs :

512 (taille de secteur) * 1024 = 524288 octets soit 512K. Ensuite, nous pouvons utiliser le paramètre bs=512K ou moins, mais divisez cela par 2^x. Pour les disques durs modernes avec une grande mémoire cache interne, c'est suffisamment pratique. Pour les anciens disques avec une mémoire cache beaucoup plus petite, une valeur de 32K ou moins est suffisante.

Ensuite, après la préparation, nous pouvons faire une copie : dd if=/dev/dispositif_source of=/dev/dispositif_destination bs=32K et la copie sera faite. Faites attention, la moindre erreur écrasera vos données importantes. Sur la destination, tout sera écrasé.

Si vous essayez de récupérer des données sur un disque source endommagé, il vaut mieux utiliser la taille de secteur native, qui est généralement de 512 octets, et ajouter l'option conv=notrunc. Sinon, les lacunes dans la source causées par les secteurs défectueux seront réassemblées par un décalage de secteur sur la destination. Cela endommagera la copie avec peu de chances de réparation. Dans ce cas, la commande sera :

dd if=/dev/source of=/dev/destination bs=512 conv=notrunc

, et attendez longtemps que le lecteur et le système abandonnent et passent secteur par secteur jusqu'à la fin.

dd est un outil utile pour déplacer une partition vers un nouvel emplacement. Créez simplement une partition, faites un dd vers la nouvelle partition (qui peut être plus grande, beaucoup plus grande), et si possible, étendez le système de fichiers copié pour remplir toute la nouvelle partition, ext3/ext4/xfs/zfs/btrfs ont cette fonctionnalité. Enfin, vous devez modifier /etc/fstab, puis démontez/remontez si possible, ou redémarrez le système.

Vous pouvez bien sûr cloner n'importe quel type de partition. La commande dd ne tient pas compte du type de système de fichiers, elle ne fait rien avec sa structure. Cette commande peut donc être utilisée pour cloner des partitions NTFS ou d'autres types de partition.

Il y a un petit truc. Si vous ne définissez pas de paramètres, alors dd mettra la sortie dans sa sortie standard. Vous pouvez donc faire une copie brute compressée du disque ou de la partition, par exemple :

dd if=/dev/sda bs=512 | gzip >/emplacement/quelconque/ordinateurUn_sda.gz

Bien sûr, cela doit être fait hors ligne. Vous pouvez restaurer cela en :

zcat /emplacement/quelconque/ordinateurUn_sda.gz | dd of=/dev/sda bs=512

, puis tout le disque dur sda sera écrasé par cette sauvegarde, et toutes les données actuelles seront perdues. Vous pouvez également faire la même chose avec une partition Windows NTFS et le disque dur utilisé par celle-ci. Bien sûr, vous pouvez utiliser une autre commande de compression, selon votre préférence.

2voto

Steven Points 2979

Dd ne fournit pas d'informations sur l'avancement - du moins la plupart des versions sous Linux. J'en ai vu certaines qui ne le font pas mais je ne me souviens pas de la variété Unix.

La page de manuel dit : Envoyer un signal USR1 à un processus 'dd' en cours d'exécution lui permet d'afficher les statistiques d'E/S sur l'erreur standard et de reprendre la copie.

J'utilise régulièrement cette fonctionnalité.

1 votes

Tout en étant utile, je doute de sa praticité pour un débutant.

2 votes

Ou ajoutez un argument status=progress à l'invocation de dd.

2voto

Quelqu'un devait dire ceci: essayez Clonezilla (http:// clonezilla.org/)

Qu'obtenez-vous? Pour copier uniquement les parties utilisées du système de fichiers. Clonezilla utilise dd, grub, sfdisk, parted, partimage, ntfsclone, et/ou partclone. Selon les options que vous choisissez.

Une documentation décente se trouve à l'adresse suivante: http://clonezilla.org/clonezilla-live/doc/

0 votes

J'ai trouvé la documentation un peu difficile, et cloner un disque PATA Linux sur un disque SATA ne m'a pas laissé avec quelque chose que je pouvais démarrer (pour l'instant). Mais beaucoup plus rapide pour obtenir le même résultat que dd, et cela a parfaitement fonctionné pour les mises à niveau de mon disque d'ordinateur portable.

1voto

Ryan Guill Points 6115

Pour les volumes NTFS, je préfère utiliser ntfsclone. C'est une partie du paquet ntfsprogs.

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