Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
dd [Le 18/02/2019, 23:00]
37.170.86.175 [Introduction]
dd [Le 23/07/2021, 17:06]
Amiralgaby ajout de tutoriel + déplacement de la section "Pour aller + loin" en bas
Ligne 7: Ligne 7:
 =====Introduction===== =====Introduction=====
  
-La commande dd permet de copier tout ou partie d'un disque **   +La commande dd permet de copier tout ou partie d'un disque ​− **[[smartmontools| EN BON ÉTAT]]** − par blocs d'​octets,​ indépendamment de la structure du contenu du disque en fichiers et en répertoires. ​
----- +
-[[smartmontools| EN BON ETAT]]** par blocs d'​octets,​ indépendamment de la structure du contenu du disque en fichiers et en répertoires. ​+
 <note help>​Pour dupliquer un disque, il est préférable d'​utiliser la commande ddrescue ​ ( [[:​ddrescue]] ) qui dispose d'une possibilité de reprise en cas d'​arrêt intempestif.</​note>​ <note help>​Pour dupliquer un disque, il est préférable d'​utiliser la commande ddrescue ​ ( [[:​ddrescue]] ) qui dispose d'une possibilité de reprise en cas d'​arrêt intempestif.</​note>​
  
 Contrairement à la copie avec [[/​tutoriel/​console_commandes_de_base#​cp|la commande cp]] ou la copie avec [[archivage|la commande tar]], la copie avec dd permet de reproduire des zones de disque qui ne font pas partie d'un système de fichier : secteur de démarrage (le MBR), tables de partition, traces laissées sur le disque par des fichiers effacés etc. L'un de ses emplois les plus importants est donc //la création d'une copie de sauvegarde exacte de votre partition système et sa récupération//,​ par l'​entremise d'un //live-CD// ou //​live-DVD//​ en cas de pépin. Contrairement à la copie avec [[/​tutoriel/​console_commandes_de_base#​cp|la commande cp]] ou la copie avec [[archivage|la commande tar]], la copie avec dd permet de reproduire des zones de disque qui ne font pas partie d'un système de fichier : secteur de démarrage (le MBR), tables de partition, traces laissées sur le disque par des fichiers effacés etc. L'un de ses emplois les plus importants est donc //la création d'une copie de sauvegarde exacte de votre partition système et sa récupération//,​ par l'​entremise d'un //live-CD// ou //​live-DVD//​ en cas de pépin.
  
-D'​autres fonctions que la copie au sens strict, un peu «spéciales» ​mais parfois utiles, sont également rendues disponibles grâce à dd, comme vous le verrez dans les sections qui suivent : recherche dans les fichiers effacés, recherche dans la mémoire vive, création de disque virtuel etc... +D'​autres fonctions que la copie au sens strict, un peu « spéciales » mais parfois utiles, sont également rendues disponibles grâce à dd, comme vous le verrez dans les sections qui suivent : recherche dans les fichiers effacés, recherche dans la mémoire vive, création de disque virtuel etc...
  
 <note warning>​Attention,​ la commande //dd// permet de faire beaucoup de choses intéressantes,​ mais elle peut aussi être dangereuse, soyez prudent en l'​utilisant :​ une manœuvre hâtive pourrait rendre votre système inutilisable !</​note>​ <note warning>​Attention,​ la commande //dd// permet de faire beaucoup de choses intéressantes,​ mais elle peut aussi être dangereuse, soyez prudent en l'​utilisant :​ une manœuvre hâtive pourrait rendre votre système inutilisable !</​note>​
Ligne 38: Ligne 35:
 **source** représente les données à copier, **cible** est l'​endroit où les copier ; ça se comprend : **if** correspond à l'​**i**nput **f**ile et **of** correspond à l'​**o**utput **f**ile. **source** représente les données à copier, **cible** est l'​endroit où les copier ; ça se comprend : **if** correspond à l'​**i**nput **f**ile et **of** correspond à l'​**o**utput **f**ile.
  
-**bs** est habituellement une puissance de 2, supérieure ou égale à 512, représentant un nombre d'​octets (par exemple: 512, 1024, 2048, 4096, 8192, 16384, mais cela peut être tout nombre raisonnable). ​+**bs** ​(**b**lock **s**ize) ​est habituellement une puissance de 2, supérieure ou égale à 512, représentant un nombre d'​octets (par exemple: 512, 1024, 2048, 4096, 8192, 16384, mais cela peut être tout nombre raisonnable). ​
  
 <note warning>​Attention !! Si vous inversez la **source** et la **cible**, vous pouvez perdre beaucoup de données. Cette caractéristique a inspiré le surnom de dd : le Destructeur de Données !!</​note>​ <note warning>​Attention !! Si vous inversez la **source** et la **cible**, vous pouvez perdre beaucoup de données. Cette caractéristique a inspiré le surnom de dd : le Destructeur de Données !!</​note>​
Ligne 52: Ligne 49:
  
 //Un cylindre en mode LBA// = 255 têtes x 63 secteurs par piste = 16065 secteurs = 16065 x 512 octets = 16065b. Le **b** signifie **x512** (512 octets étant la taille d'un secteur). **32130b** représente un bloc de deux cylindres. Lorsque vous utilisez des tailles de blocs représentant des nombres entiers de cylindres, vous n'avez jamais à vous soucier de la copie de la dernière fraction de bloc car les partitions sont toujours faites d'un nombre entier de cylindres. Les partitions ne peuvent pas contenir de cylindres partiels. Un cylindre comprend 8 225 280 octets. //Un cylindre en mode LBA// = 255 têtes x 63 secteurs par piste = 16065 secteurs = 16065 x 512 octets = 16065b. Le **b** signifie **x512** (512 octets étant la taille d'un secteur). **32130b** représente un bloc de deux cylindres. Lorsque vous utilisez des tailles de blocs représentant des nombres entiers de cylindres, vous n'avez jamais à vous soucier de la copie de la dernière fraction de bloc car les partitions sont toujours faites d'un nombre entier de cylindres. Les partitions ne peuvent pas contenir de cylindres partiels. Un cylindre comprend 8 225 280 octets.
- 
  
 <​note>​__**Histoires de têtes et de cylindres...**__ <​note>​__**Histoires de têtes et de cylindres...**__
Ligne 85: Ligne 81:
 **bs=4k** indiquera à dd d'​utiliser un bloc de taille 4 kiloctets. J'ai trouvé que **bs=4k** est le plus rapide pour la copie de disques sur une machine moderne. **bs=4k** indiquera à dd d'​utiliser un bloc de taille 4 kiloctets. J'ai trouvé que **bs=4k** est le plus rapide pour la copie de disques sur une machine moderne.
  
-====Copier une partition de disque ​dur sur un autre disque ​dur====+====Copier une partition de disque sur un autre disque====
  
 <​code>​ <​code>​
Ligne 91: Ligne 87:
 </​code>​ </​code>​
  
-Veillez à ce que tous soit attaché après "​conv=",​ +<note warning> 
-sda2 et sdb2 sont des partitions. Vous voulez copier sda2 dans sdb2. Si sdb2 n'​existe pas, dd commencera au début du disque et le créera. ​+  ​* ​sda2 et sdb2 sont des partitions ​: pensez à mettre celles qui correspondent à vos besoins. Faites attention à l'​ordre de **if=** et **of=**. Vous pouvez écrire une partition vierge sur une partition utilisée si vous êtes désordonné. 
 +  * Si sdb2 n'​existe pas, dd commencera au début du disque et le créera 
 +  * L'​argument noerrror serait **risqué** puisqu'​il ignore les erreurs de lecture 
 +  * La partition complète va être copiée : la partition de destination aura exactement la même taille et le même [[uuid_et_label|uuid]] qui est censé être uniqueCela peut être source de conflit. Vous pouvez toujours [[uuid_et_label#​modifier_manuellement_l_uuid_d_un_systeme_de_fichiers|modifier cet uuid manuellement]],​ mais prenez garde que vous perdrez alors l'​exactitude de copie. 
 +</​note>​
  
-<​note ​warning>Faites attention ​à l'​ordre de **if=** et **of=**. Vous pouvez écrire un disque vierge sur un disque utilisé si vous êtes désordonné. ​A priori l'​argument conv=notrunc ne sert à rien : on copie une partition pas un fichier… et l'​argument noerrror est **risqué** puisqu'​il ignore les erreurs de lecture</​note>​+<​note ​tip> 
 +  * Veillez ​à ce que tout soit attaché après "conv=
 +  ​* A priori l'​argument conv=notrunc ne sert à rien : on copie une partition pas un fichier 
 +</​note>​
  
-<note tip>Le fait de copier ainsi une partition implique de copier également son [[uuid_et_label|uuid]] qui est censé être unique. Cela peut être source de conflit. Vous pouvez toujours [[uuid_et_label#​modifier_manuellement_l_uuid_d_un_systeme_de_fichiers|modifier cet uuid manuellement]],​ mais prenez garde que vous perdrez alors l'​exactitude de copie.</​note>​ 
  
-<note tip>Et comment suivre ce qui se passe pendant ​l'exécution de DD... En effet, après avoir lancé la commande, c'est le blackout et vous pouvez attendre longtemps et même penser que rien ne se passe! +Une solution alternative pour voir l'avancement : ouvrez un second terminal et tapez:<​code>​pgrep -l '​^dd$'</​code> ​ qui vous produira une réponse du type "9999 dd". Ce code est le chiffre d'​identification du processus de copie qui vous permet de produire une seconde commande dans le terminal (en root):<​code>​kill -USR1 9999</​code>​ Cette seconde commande peut-être lancée de temps en temps pour patienter.
-Alors, ​ouvrez un second terminal et tapez:<​code>​pgrep -l '​^dd$'</​code> ​ qui vous produira une réponse du type "9999 dd". Ce code est le chiffre d'​identification du processus de copie qui vous permet de produire une seconde commande dans le terminal (en root):<​code>​kill -USR1 9999</​code>​ Cette seconde commande peut-être lancée de temps en temps pour patienter.+
 Alternative en mode root, pour voir la progression toutes les 30 secondes: <​code>​watch -n 30 kill -USR1 9999</​code></​note>​ Alternative en mode root, pour voir la progression toutes les 30 secondes: <​code>​watch -n 30 kill -USR1 9999</​code></​note>​
-Pour suivre l'avancement de la commande dd, vous pouvez ajouter l'​option **status=progress**,​ ou effectuer la commande suivante : <​code>​dd if=/​dev/​source | pv -t -e -r -b | dd of=/​dev/​cible</​code>​ Cela requiert le binaire pv :<​code>​apt-get install pv</​code>​+Une autre solution est d'​effectuer la commande suivante : <​code>​dd if=/​dev/​source | pv -t -e -r -b | dd of=/​dev/​cible</​code>​ Cela requiert le binaire pv :<​code>​apt-get install pv</​code>​
  
 ====Cloner un disque dur en entier==== ====Cloner un disque dur en entier====
Ligne 121: Ligne 122:
   * Lire ici la procedure: [[http://​korben.info/​realiser-limage-dun-disque-dur-testdisk.html]]   * Lire ici la procedure: [[http://​korben.info/​realiser-limage-dun-disque-dur-testdisk.html]]
   * Utiliser de préférence l'​application ddrescue adaptée aux disques en mauvais état.   * Utiliser de préférence l'​application ddrescue adaptée aux disques en mauvais état.
 +  * Lire [[https://​www.cgsecurity.org/​wiki/​Damaged_Hard_Disk|ici]] la procédure utilisant dd ou ddrescue, proposée par Testdisk [[https://​www.cgsecurity.org/​wiki/​Damaged_Hard_Disk]]
  
 ====Copier un grand disque sur un autre disque plus petit==== ====Copier un grand disque sur un autre disque plus petit====
Ligne 217: Ligne 219:
  
 <​code>​ <​code>​
-dd if=/dev/hdc of=/home/user/moncd.iso bs=2048 conv=notrunc+dd if=/dev/hdc of=/home/${USER}/moncd.iso bs=2048 conv=notrunc
 </​code>​ </​code>​
  
Ligne 226: Ligne 228:
 <​code>​ <​code>​
 mkdir /mnt/moncd mkdir /mnt/moncd
-mount -o loop /home/user/moncd.iso /mnt/moncd+mount -o loop /home/${USER}/moncd.iso /mnt/moncd
 </​code>​ </​code>​
  
Ligne 257: Ligne 259:
 ====Créer une clé USB bootable==== ====Créer une clé USB bootable====
  
-**Note : méthode ​réservé ​aux utilisateurs avancés et concentrés,​ une simple erreur de lettre dans le of=/ peut détruire toutes les données du système sur lequel vous travaillez.+<note warning>Note : méthode ​réservée ​aux utilisateurs avancés et concentrés,​ une simple erreur de lettre dans le of=/ peut détruire toutes les données du système sur lequel vous travaillez.</​note>​
  
  
-Remarquez également que toutes les données présentes sur la clef seront perdues** ​+**Remarquez également que toutes les données présentes sur la clé seront perdues.**
  
 Faites un : Faites un :
Ligne 267: Ligne 269:
 </​code>​ </​code>​
  
-Connectez la clé dans le port USB, pour faites à nouveau un ''​sudo fdisk -l,''​ cela permet de repérer le point de montage de la partition.+Connectez la clé dans le port USB, puis faites à nouveau un ''​sudo fdisk -l'' ​cela permet de repérer le point de montage de la partition.
  
-Note : pour un point de montage du type ''/​dev/​sd**x**1''​ on utilisera ​''​**/​dev/​sdx**''​ dans la commande suivante.+Note : pour un point de montage du type ''/​dev/​sd**x**1''​on utilisera ''​**/​dev/​sdx**''​ dans la commande suivante.
  
-Ensuite ​taper :+Ensuite, tapez :
  
 <​code>​ <​code>​
Ligne 303: Ligne 305:
 Pour ma part je travaille sur plusieurs machines, mais sur celle que j'​utilise le plus j'ai deux disques durs SATA. Ils sont complètement identiques. Avant de faire quelque chose qui pourrait être dangereux, je démarre à partir d'un live-CD et je lance : Pour ma part je travaille sur plusieurs machines, mais sur celle que j'​utilise le plus j'ai deux disques durs SATA. Ils sont complètement identiques. Avant de faire quelque chose qui pourrait être dangereux, je démarre à partir d'un live-CD et je lance :
 <​code>​ <​code>​
-dd   ​if=/​dev/​sda ​   of=/dev/sdb ​bs=4096 ​ conv=notrunc,​noerror+dd   ​if=/​dev/​sda ​   of=/​dev/​sdb ​ bs=4096 ​ conv=notrunc,​noerror
 </​code>​ </​code>​
 et je copie ainsi mon lecteur système de travail courant sur le lecteur sdb. Si je casse mon installation sur sda,  je démarre avec le live CD et je fais : et je copie ainsi mon lecteur système de travail courant sur le lecteur sdb. Si je casse mon installation sur sda,  je démarre avec le live CD et je fais :
Ligne 337: Ligne 339:
 Ceci est très utile pour rendre le lecteur presque comme neuf, cela permet de le débarrasser des virus, des chevaux de Troie etc... La plupart des lecteurs ont **0x0000ffh** écrit en usine dans chaque secteur. Ceci est très utile pour rendre le lecteur presque comme neuf, cela permet de le débarrasser des virus, des chevaux de Troie etc... La plupart des lecteurs ont **0x0000ffh** écrit en usine dans chaque secteur.
  
-====Ecrire ​par dessus toute la place libre d'une partition====+====Écrire ​par dessus toute la place libre d'une partition====
  
 C'est à dire rendre impossible la récupération des fichiers effacés. ​ C'est à dire rendre impossible la récupération des fichiers effacés. ​
Ligne 348: Ligne 350:
  
 <​code>​ <​code>​
-rm+rm fichieroccupanttoutlespacelibre
 </​code>​ </​code>​
  
Ligne 446: Ligne 448:
 /dev/random génère autant de bits aléatoires que la réserve entropique peut en contenir. Cela produit des valeurs hautement aléatoires pour des clés de cryptographie. Si davantage d'​octets aléatoires sont nécessaires,​ le processus s'​arrête jusqu'​à ce que la réserve entropique soit remplie de nouveau (bouger la souris aide). /​dev/​urandom n'a pas cette restriction. Si l'​utilisateur exige plus de bits que de présents à ce moment dans la réserve entropique, ils sont produits en utilisant un générateur de nombres pseudo-aléatoires. /dev/random génère autant de bits aléatoires que la réserve entropique peut en contenir. Cela produit des valeurs hautement aléatoires pour des clés de cryptographie. Si davantage d'​octets aléatoires sont nécessaires,​ le processus s'​arrête jusqu'​à ce que la réserve entropique soit remplie de nouveau (bouger la souris aide). /​dev/​urandom n'a pas cette restriction. Si l'​utilisateur exige plus de bits que de présents à ce moment dans la réserve entropique, ils sont produits en utilisant un générateur de nombres pseudo-aléatoires.
  
-====Ecrire ​des données aléatoires par dessus un fichier avant de l'​effacer====+====Écrire ​des données aléatoires par dessus un fichier avant de l'​effacer====
  
 d'​abord,​ faire : d'​abord,​ faire :
Ligne 504: Ligne 506:
  
 Pour bzip2 (plus lent, plus petit), remplacer par bzip2 et bunzip2 Pour bzip2 (plus lent, plus petit), remplacer par bzip2 et bunzip2
- 
  
 ==== Restaurer une partition de disque depuis un fichier image==== ==== Restaurer une partition de disque depuis un fichier image====
Ligne 511: Ligne 512:
 dd if=/​home/​user/​partition.image of=/​dev/​sdb2 bs=4096 conv=notrunc,​noerror dd if=/​home/​user/​partition.image of=/​dev/​sdb2 bs=4096 conv=notrunc,​noerror
 </​code>​ </​code>​
- 
- 
- 
  
 De cette façon, vous pouvez avoir un grand disque dur et le partitionner,​ ainsi vous pouvez sauvegarder votre partition root. Si vous  De cette façon, vous pouvez avoir un grand disque dur et le partitionner,​ ainsi vous pouvez sauvegarder votre partition root. Si vous 
Ligne 876: Ligne 874:
 fdisk -l /dev/sdX > geometry.txt fdisk -l /dev/sdX > geometry.txt
 </​code>​ </​code>​
-=====Pour aller plus loin===== 
-====Récupérer des secteurs défectueux==== 
- 
-Il existe une variante de dd pour récupérer des données sur un média défectueux,​ tel qu'un disque dur avec des mauvais secteurs. Il est appelé dd_rescue. Il est disponible ici : http://​www.garloff.de/​kurt/​linux/​ddrescue/​ 
- 
-<note tip>Nota Bene : Il existe aussi des paquets dans les dépôts à utiliser avec précaution (voir [[:​ddrescue#​installation_de_ddrescue|cet article]]).</​note>​ 
- 
-L'​implémentation de dd pour le département de la défense est appelée dcfldd, et possède quelques caractéristiques comme une barre de progression,​ ainsi vous pouvez planifier vos pauses café : http://​dcfldd.sourceforge.net/​ 
- 
-====Sdd==== 
- 
-Sdd est utile quand la taille des blocs d'​entrée est différente de celle des blocs de sortie, et réussira dans des cas où dd échoue. 
- 
-http://​linux.maruhn.com/​sec/​sdd.html 
- 
-====Un des meilleurs liens sur dd==== 
- 
-http://​www.softpanorama.org/​Tools/​dd.shtml 
  
 ===== Pour plus de détails techniques ===== ===== Pour plus de détails techniques =====
Ligne 1025: Ligne 1005:
 dcfldd est 100% compatible avec dd, mais supporte quelques commandes supplémentaires et affiche par défaut la progression de l'​opération en cours. dcfldd est 100% compatible avec dd, mais supporte quelques commandes supplémentaires et affiche par défaut la progression de l'​opération en cours.
  
 +En cas d'​oubli au départ, on peut également afficher l'​état d'​avancement de la commande **dd** en tapant **Ctrl+t** à tout moment au cours de son éxecution. \\
 +Ce qui nous affiche
 +<​code>​load:​ 1.74  cmd: dd 1645 uninterruptible 0.03u 8.25s
 +149+0 records in
 +148+0 records out
 +620756992 bytes transferred in 704.620913 secs (880980 bytes/sec)
 +</​code>​
  
 ===== Comparatif de vitesse dd/pv vs dcfldd vs dc3dd ===== ===== Comparatif de vitesse dd/pv vs dcfldd vs dc3dd =====
Ligne 1082: Ligne 1069:
 https://​launchpad.net/​gdiskdump https://​launchpad.net/​gdiskdump
  
 +FIXME  Gdiskdump n'est plus mis à jour depuis 2011 et ne se lance pas, surtout si la configuration comporte GPT et MBR ensemble.
  
 +=====Pour aller plus loin=====
 +====Récupérer des secteurs défectueux====
  
 +Il existe une variante de dd pour récupérer des données sur un média défectueux,​ tel qu'un disque dur avec des mauvais secteurs. Il est appelé dd_rescue. Il est disponible ici : http://​www.garloff.de/​kurt/​linux/​ddrescue/​
 +
 +<note tip>Nota Bene : Il existe aussi des paquets dans les dépôts à utiliser avec précaution (voir [[:​ddrescue#​installation_de_ddrescue|cet article]]).</​note>​
 +
 +L'​implémentation de dd pour le département de la défense est appelée dcfldd, et possède quelques caractéristiques comme une barre de progression,​ ainsi vous pouvez planifier vos pauses café : http://​dcfldd.sourceforge.net/​
 +
 +====Sdd====
 +
 +Sdd est utile quand la taille des blocs d'​entrée est différente de celle des blocs de sortie, et réussira dans des cas où dd échoue.
 +
 +http://​linux.maruhn.com/​sec/​sdd.html
 +
 +====Tutoriel sur l'​utilitaire====
 +  * [[https://​wiki.debian-fr.xyz/​La_commande_dd|La commande dd]] **(fr)**
 +  * [[http://​www.softpanorama.org/​Tools/​dd.shtml|DD Command (guide extrêment complet)]] **(en)**
 +  * [[https://​wiki.archlinux.org/​title/​Dd|DD (documentation Arch Linux)]] **(en)**
  
-FIXME  Gdiskdump n'est plus mis à jour depuis 2011 et ne se lance pas, surtout si la configuration comporte GPT et MBR ensemble. 
 ---- ----
 source : http://​wiki.mandriva.com/​fr/​Copie_par_blocs_d%27octets_avec_dd source : http://​wiki.mandriva.com/​fr/​Copie_par_blocs_d%27octets_avec_dd
  • dd.txt
  • Dernière modification: Le 15/12/2023, 15:50
  • par 41.208.170.106