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
dd [Le 11/09/2022, 15:43]
luigifab [Créer une clé USB bootable] status=progress
dd [Le 22/04/2024, 00:01] (Version actuelle)
Benjamin Loison [Introduction] Retrait d'espaces en trop
Ligne 3: Ligne 3:
  
 ====== Commande “dd” ====== ====== Commande “dd” ======
-<note warning>​Page en cours de réécriture complète</​note>​+
  
 =====Introduction===== =====Introduction=====
  
 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. 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.
-<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.
Ligne 52: Ligne 52:
 <​note>​__**Histoires de têtes et de cylindres...**__ <​note>​__**Histoires de têtes et de cylindres...**__
  
-Pour bien comprendre les notions originelles de tête, cylindre et secteur, auxquelles l'​auteur fait appel dans le paragraphe précédent,​ vous pourrez ​lire ces deux petites ​pages très éclairantes ​:+Pour bien comprendre les notions originelles de tête, cylindre et secteur, auxquelles l'​auteur fait appel dans le paragraphe précédent,​ vous pouvez ​lire cette pages très éclairante ​:
   * [[wpfr>​Disque_dur#​G.C3.A9om.C3.A9trie|Géométrie des disques durs]]   * [[wpfr>​Disque_dur#​G.C3.A9om.C3.A9trie|Géométrie des disques durs]]
-  * http://​www.redhat.com/​docs/​manuals/​enterprise/​RHEL-4-Manual/​fr/​admin-guide/​s1-storage-data-addr.html 
  
 D'​autre part, il faut bien comprendre que les notions de cylindre et de tête sous-jacentes au mode d'​adressage LBA, sont «abstraites;​» et déconnectées de la réalisation matérielle du disque (votre disque n'a sûrement pas 255 têtes réelles...). D'​autre part, il faut bien comprendre que les notions de cylindre et de tête sous-jacentes au mode d'​adressage LBA, sont «abstraites;​» et déconnectées de la réalisation matérielle du disque (votre disque n'a sûrement pas 255 têtes réelles...).
Ligne 124: Ligne 123:
   * Lire ici la procedure: [[https://​korben.info/​realiser-limage-dun-disque-dur-testdisk.html]]   * Lire ici la procedure: [[https://​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]] +  * Lire 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 ====
 +<note important>​Il est important de noter que la grande partition ne doit pas contenir plus de données que ne peut en contenir la petite.</​note>​
 La seule différence entre une grande partition et une petite partition, hormis la taille, est la table de partition. Si vous copiez sda vers sdb, un disque entier avec une seule partition, sdb étant plus petit que sda, alors vous devez faire : La seule différence entre une grande partition et une petite partition, hormis la taille, est la table de partition. Si vous copiez sda vers sdb, un disque entier avec une seule partition, sdb étant plus petit que sda, alors vous devez faire :
  
Ligne 134: Ligne 133:
 </​code>​ </​code>​
  
-Une autre technique pour traiter ce genre de situation, est proposée à [[http://​www.linuxquestions.org/​questions/​showthread.php?​t=362506&​page=20| la page 20 du fil en anglais]]. La technique proposée fait usage de commandes du type de resize2fs.+Une autre technique pour traiter ce genre de situation, est proposée à [[http://​www.linuxquestions.org/​questions/​showthread.php?​t=362506&​page=20| la page 20 du fil en anglais]]. La technique proposée fait usage de commandes du type de //resize2fs//.
  
 ===Les paramètres skip et seek=== ===Les paramètres skip et seek===
Ligne 192: Ligne 191:
 </​code>​ </​code>​
 où xx est évidemment le nom de la partition concernée, afin de vérifier l'​intégrité du système de fichiers. Pour info, l'​option -f force la vérification,​ sans se contenter d'un simple "​check"​ du journal. où xx est évidemment le nom de la partition concernée, afin de vérifier l'​intégrité du système de fichiers. Pour info, l'​option -f force la vérification,​ sans se contenter d'un simple "​check"​ du journal.
-De toutes façons, si vous ne ne faites pas, la commande suivante vous l'​exigera avant de s'​exécuter.+De toutes façons, si vous ne faites pas, la commande suivante vous l'​exigera avant de s'​exécuter.
  
 3° agrandir le système de fichiers : 3° agrandir le système de fichiers :
Ligne 244: Ligne 243:
 <​code>​ <​code>​
 #!/bin/bash #!/bin/bash
-for n in `seq 7`; do dd if=/​dev/​urandom of=/dev/sdX bs=8b conv=notrunc;​ done+for n in $(seq 7); do dd if=/​dev/​urandom of=/dev/sdX bs=8b conv=notrunc;​ done
 </​code>​ </​code>​
  
Ligne 284: Ligne 283:
 ==== Créer un DVD bootable ==== ==== Créer un DVD bootable ====
 exemple exemple
-<​code>​dd if=/​home/​$USER/​Téléchargements/​lubuntu-18.04.1-desktop-i386.iso of=/​dev/​sr0 ​ status=progress &&​sync+<​code>​dd if=/​home/​$USER/​Téléchargements/​lubuntu-18.04.1-desktop-i386.iso of=/​dev/​sr0 ​ status=progress && sync
 1089364480 bytes (1,1 GB, 1,0 GiB) copied, 2420 s, 450 kB/s  1089364480 bytes (1,1 GB, 1,0 GiB) copied, 2420 s, 450 kB/s 
 2127840+0 enregistrements lus 2127840+0 enregistrements lus
Ligne 318: Ligne 317:
 ==== Faire de multiples copie d'un support grâce à un fichier Master-image compressé ==== ==== Faire de multiples copie d'un support grâce à un fichier Master-image compressé ====
  
-On génère d'​abord le Master-image de notre support de stockage au format compressé gzip, +On génère d'​abord le Master-image de notre support de stockage au format compressé gzip. Cette méthode maintient le MBRles Flag... 
-<​code>​ +=== En ligne de commande === 
-  sudo dcfldd if=/dev/sdX bs=4k  conv=notrunc,​noerror | gzip -c > ~/​master-image.gzip ​  +Sauvegarde 
-</​code>​+<code bash>​sudo dd if=/dev/sdX bs=1M conv=notrunc,​noerror status=progress | gzip -c > ~/​master-image.gzip</​code> 
 +Déploiement sur un support de stockage au moins aussi GRAND. 
 +<code bash>​gzip -cd ~/​master-image.gzip | sudo dd of=/dev/sdX bs=1M status=progress conv=notrunc,​noerror</​code>​ 
 +=== Avec une application === 
 +<code bash>​sudo apt install dcfldd</​code>​ 
 +<code bash>sudo dcfldd if=/dev/sdX bs=4k  conv=notrunc,​noerror | gzip -c > ~/​master-image.gzip  ​</​code>​ 
 +On déploie le fichier Master-image sur un support de stockage PLUS GRAND. 
 +<code bash> gzip -cd ~/​master-image.gzip | sudo dcfldd of=/dev/sdX bs=4k  conv=notrunc,​noerror  ​</code
 +<note tip>​Cette méthode ne convient pas si le disque dispose d'une table de partition GPT car le double de la table va être mal positionné ​ si le disque recepteur n'a pas une taille identique.</​note>
  
-On déploie le fichier Master-image sur un support de stockage PLUS GRAND 
-<​code>​ 
-  gzip -cd ~/​master-image.gzip | sudo dcfldd of=/dev/sdX bs=4k  conv=notrunc,​noerror  ​ 
-</​code>​ 
-Cette méthode maintient le MBR, les Flag... 
  
  
Ligne 395: Ligne 397:
 </​code>​ </​code>​
  
-====Etat de la mémoire====+====État de la mémoire====
  
 <​code>​ <​code>​
Ligne 654: Ligne 656:
 Avec 234 441 647 secteurs au total, et 16 065 secteurs par cylindre, vous obtenez 14 593.317584812 cylindres, un nombre qui n'est pas entier, et il y a alors quelques secteurs excédentaires qui ne constituent pas un cylindre entier. Ceci vous laisse avec 5 102 secteurs qui ne peuvent pas être partitionnés car une partition ne comprend que des cylindres entiers. C'est comme avoir une partie de personne, cela ne constitue pas vraiment une personne. Avec 234 441 647 secteurs au total, et 16 065 secteurs par cylindre, vous obtenez 14 593.317584812 cylindres, un nombre qui n'est pas entier, et il y a alors quelques secteurs excédentaires qui ne constituent pas un cylindre entier. Ceci vous laisse avec 5 102 secteurs qui ne peuvent pas être partitionnés car une partition ne comprend que des cylindres entiers. C'est comme avoir une partie de personne, cela ne constitue pas vraiment une personne.
  
-Ainsi, qu'​arrive t-il à ces secteurs ? Ils deviennent des **secteurs en surplus** après la dernière partition. Vous ne pouvez pas en principe les lire avec un système d'​exploitation. Mais dd peut. C'est vraiment une bonne idée de vérifier ce qui peut être écrit dans les secteurs en surplus. Pour notre disque dur Seagate de 120 Go vous soustrayez du nombre total de secteurs (234 441 647) ceux en surplus (5 102) = 234 436 545 secteurs partitionables.+Ainsi, qu'​arrive-t-il à ces secteurs ? Ils deviennent des **secteurs en surplus** après la dernière partition. Vous ne pouvez pas en principe les lire avec un système d'​exploitation. Mais dd peut. C'est vraiment une bonne idée de vérifier ce qui peut être écrit dans les secteurs en surplus. Pour notre disque dur Seagate de 120 Go vous soustrayez du nombre total de secteurs (234 441 647) ceux en surplus (5 102) = 234 436 545 secteurs partitionables.
  
 Pour y voir plus clair sur ces histoires de têtes, cylindres et secteurs, jetez un coup d'oeil plus haut. Pour y voir plus clair sur ces histoires de têtes, cylindres et secteurs, jetez un coup d'oeil plus haut.
Ligne 937: Ligne 939:
 === conv=valeur[,​valeur. . . ] === === conv=valeur[,​valeur. . . ] ===
 Où les '​valeurs'​ sont des symboles séparés par des virgules, tirés de la liste suivante : Où les '​valeurs'​ sont des symboles séparés par des virgules, tirés de la liste suivante :
-  * ascii : Convertit ​EBCDIC en ASCII.+  * ascii : Convertis ​EBCDIC en ASCII.
   * asciib : Convertit EBCDIC en ASCII en utilisant les translations de caractères compatibles avec BSD.   * asciib : Convertit EBCDIC en ASCII en utilisant les translations de caractères compatibles avec BSD.
   * ebcdic : Convertit ASCII en EBCDIC. Lors d'une conversion d'​enregistrements ASCII de longueur fixe sans caractères NEWLINE (nouvelle ligne), commence par créer un tube avec : **dd conv<​nowiki>​=</​nowiki>​unblock**.   * ebcdic : Convertit ASCII en EBCDIC. Lors d'une conversion d'​enregistrements ASCII de longueur fixe sans caractères NEWLINE (nouvelle ligne), commence par créer un tube avec : **dd conv<​nowiki>​=</​nowiki>​unblock**.
Ligne 947: Ligne 949:
  
   * block : Les données d'​entrée sont considérées comme une suite d'​enregistrements de longueur variable terminés par un caractère NEWLINE (fin de ligne) ou par un caractère EOF (fin de fichier), indépendamment des frontières entre blocs dans les données d'​entrée. ​ Chaque enregistrement est ensuite converti en un enregistrement ayant une longueur fixe, spécifiée par la taille de bloc pour la conversion (voir **cbs=**). Tous les caractères NEWLINE sont effacés de la ligne d'​entrée. Des caractères SPACE (espace) sont ajoutés aux lignes dont la taille est inférieure à celle de leur taille de bloc pour la conversion. Les lignes plus longues que la taille de bloc pour la conversion sont tronquées de façon à ce qu'​elles contiennent le plus grand nombre possible de caractères pouvant tenir dans cette taille. Le nombre des lignes tronquées est signalé.   * block : Les données d'​entrée sont considérées comme une suite d'​enregistrements de longueur variable terminés par un caractère NEWLINE (fin de ligne) ou par un caractère EOF (fin de fichier), indépendamment des frontières entre blocs dans les données d'​entrée. ​ Chaque enregistrement est ensuite converti en un enregistrement ayant une longueur fixe, spécifiée par la taille de bloc pour la conversion (voir **cbs=**). Tous les caractères NEWLINE sont effacés de la ligne d'​entrée. Des caractères SPACE (espace) sont ajoutés aux lignes dont la taille est inférieure à celle de leur taille de bloc pour la conversion. Les lignes plus longues que la taille de bloc pour la conversion sont tronquées de façon à ce qu'​elles contiennent le plus grand nombre possible de caractères pouvant tenir dans cette taille. Le nombre des lignes tronquées est signalé.
-  * unblock : Convertit les enregistrements de taille fixe en enregistrements de taille variable. Lit un nombre d'​octets égal à la taille de bloc pour la conversion ​spécifié ​par **cbs=** (ou le nombre d'​octets restant en entrée, s'il est inférieur à la taille de bloc pour la conversion),​ efface tous les caractères SPACE (espace) de remplissage en fin d'​enregistrement et ajoute un caractère NEWLINE (fin de ligne).+  * unblock : Convertit les enregistrements de taille fixe en enregistrements de taille variable. Lit un nombre d'​octets égal à la taille de bloc pour la conversion ​spécifiée ​par **cbs=** (ou le nombre d'​octets restant en entrée, s'il est inférieur à la taille de bloc pour la conversion),​ efface tous les caractères SPACE (espace) de remplissage en fin d'​enregistrement et ajoute un caractère NEWLINE (fin de ligne).
  
 Les valeurs **block** et **unblock** sont mutuellement exclusives. Les valeurs **block** et **unblock** sont mutuellement exclusives.
Ligne 954: Ligne 956:
   * ucase : Transforme les minuscules en majuscules lorsque la locale définie par  LC_CTYPE le permet. Les caractères pour lesquels aucune correspondance majuscules/​minuscules n'est spécifiée dans la locale ne sont pas modifiés par cette conversion.   * ucase : Transforme les minuscules en majuscules lorsque la locale définie par  LC_CTYPE le permet. Les caractères pour lesquels aucune correspondance majuscules/​minuscules n'est spécifiée dans la locale ne sont pas modifiés par cette conversion.
   * swab : Permute chaque paire d'​octets d'​entrée. Si l'​enregistrement d'​entrée en cours possède un nombre impair d'​octets,​ le dernier octet de l'​enregistrement d'​entrée est ignoré.   * swab : Permute chaque paire d'​octets d'​entrée. Si l'​enregistrement d'​entrée en cours possède un nombre impair d'​octets,​ le dernier octet de l'​enregistrement d'​entrée est ignoré.
-  * noerror : N'​arrête pas le processus en cas d'​erreur d'​entrée. Lorsque survient une erreur d'​entrée,​ un message de diagnostic est envoyé vers la sortie d'​erreur standard, suivi par le décompte en cours des bloc d'​entrée et de sortie dans le même format que celui utilisé en complétion. Si la conversion **sync** est spécifiée,​ les données manquantes sont remplacées par des octets nuls qui sont traités normalement. Autrement, le bloc d'​entrée sera omis de la sortie. **notrunc** ne tronque pas le fichier de sortie. Dans le fichier de sortie les blocs non explicitement écrits par cette invocation de dd seront préservés. (Voir aussi le précédent opérande : **of=file**).+  * noerror : N'​arrête pas le processus en cas d'​erreur d'​entrée. Lorsque survient une erreur d'​entrée,​ un message de diagnostic est envoyé vers la sortie d'​erreur standard, suivi par le décompte en cours des blocs d'​entrée et de sortie dans le même format que celui utilisé en complétion. Si la conversion **sync** est spécifiée,​ les données manquantes sont remplacées par des octets nuls qui sont traités normalement. Autrement, le bloc d'​entrée sera omis de la sortie. **notrunc** ne tronque pas le fichier de sortie. Dans le fichier de sortie les blocs non explicitement écrits par cette invocation de dd seront préservés. (Voir aussi le précédent opérande : **of=file**).
   * notrunc : Le fichier de sortie ne subit pas de troncation (en son absence les blocs de données formés d'​octets à zéro sont remplacés par une chaîne de cinq astérisques).   * notrunc : Le fichier de sortie ne subit pas de troncation (en son absence les blocs de données formés d'​octets à zéro sont remplacés par une chaîne de cinq astérisques).
   * sync : Assemble chaque bloc d'​entrée à la taille du tampon **ibs=**, ajoutant des octets nuls. (Si soit **block** soit **unblock** est aussi specifié, ajoute des caractères SPACE, à la place d'​octets nuls.)   * sync : Assemble chaque bloc d'​entrée à la taille du tampon **ibs=**, ajoutant des octets nuls. (Si soit **block** soit **unblock** est aussi specifié, ajoute des caractères SPACE, à la place d'​octets nuls.)
Ligne 981: Ligne 983:
 LC_CTYPE LC_CTYPE
  
-Définit ​la locale utilisée pour l'​interprétation comme caractères des séquences d'​octets de données texte (par exemple, caractères à octet unique, par opposition aux caractères multi-octets dans les arguments ou les fichiers d'​entrée),​ la classification des caractères en majuscules ou minuscules, et le mappage des caractères d'une casse à une autre.+Définis ​la locale utilisée pour l'​interprétation comme caractères des séquences d'​octets de données texte (par exemple, caractères à octet unique, par opposition aux caractères multi-octets dans les arguments ou les fichiers d'​entrée),​ la classification des caractères en majuscules ou minuscules, et le mappage des caractères d'une casse à une autre.
  
 LC_MESSAGES LC_MESSAGES
Ligne 1076: Ligne 1078:
 And the winner is ... : dd ! :-) And the winner is ... : dd ! :-)
  
-=====Interfaces graphiques===== 
-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===== =====Pour aller plus loin=====
Ligne 1094: Ligne 1092:
 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. 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+http://​linux.maruhn.com/​sec/​sdd.html ​FIXME (lien injoignable ?)
  
 ====Tutoriel sur l'​utilitaire==== ====Tutoriel sur l'​utilitaire====
-  * [[https://​wiki.debian-fr.xyz/​La_commande_dd|La commande dd]] **(fr)**+  * [[https://​wiki.debian-fr.xyz/​La_commande_dd|La commande dd]] **(fr)** ​FIXME (lien injoignable ?)
   * [[http://​www.softpanorama.org/​Tools/​dd.shtml|DD Command (guide extrêment complet)]] **(en)**   * [[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)**   * [[https://​wiki.archlinux.org/​title/​Dd|DD (documentation Arch Linux)]] **(en)**
  • dd.1662903805.txt.gz
  • Dernière modification: Le 11/09/2022, 15:43
  • par luigifab