« La commande dd » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(19 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{sid}}  
__toc__
{{Ébauche|La commande dd}}


----


{{Ébauche|La commande dd}}
Pour pouvoir copier ou modifier une partition, elle ne doit pas être en cours d'utilisation.<br />
Imaginez que vous cherchiez à copier un livre que l'auteur est en train de modifier où n'a pas encore terminé d'écrire…


La commande dd.
La commande dd


= Introduction: =
= Introduction: =
Ligne 13 : Ligne 14 :
"dd copie un fichier (par défaut, depuis l'entrée standard vers la sortie standard) en permettant de sélectionner la taille de bloc, et d'effectuer des conversions."
"dd copie un fichier (par défaut, depuis l'entrée standard vers la sortie standard) en permettant de sélectionner la taille de bloc, et d'effectuer des conversions."


Utilisée fréquement, la commande dd est très simple d'utilisation, très puissante et... tout aussi dangereuse.
Utilisée fréquemment, la commande dd est très simple d'utilisation, très puissante et... tout aussi dangereuse.
Vérifiez toujours bien les commandes deux (trois ?) fois avant de les lancer.
Vérifiez toujours bien les commandes deux (trois ?) fois avant de les lancer.


<span style="color:#FF0000;">'''LES COMMANDES QUI SUIVENT PEUVENT ÊTRE EXTRÊMEMENT DESTRUCTIVES SI ELLES NE SONT PAS CONVENABLEMENT UTILISÉES. VOUS ÊTES PRÉVENUS!'''</span>
<span style="color:#FF0000;">'''LES COMMANDES QUI SUIVENT PEUVENT VOUS FAIRE PERDRE TOUTES LES INFORMATIONS CONTENUES DANS VOTRE MACHINE SI ELLES NE SONT PAS CONVENABLEMENT UTILISÉES. VOUS ÊTES PRÉVENUS!'''</span>
 
'''NOTE:''' Pour pouvoir être copiée, déplacée, agrandie ou réduite, la partition source doit au préalable être "démountée" du système (voir "umount").


== Syntaxe ==
== Syntaxe ==


La commande dd se présente généralement sous cette forme:
La syntaxe d'une ligne de commandes utilisant dd se présente généralement sous cette forme:


dd if=<source> of=<cible> bs=<taille des blocs> skip= seek= conv=<conversion>
<pre>dd if=<source> of=<cible> bs=<taille des blocs> skip= seek= conv=<conversion></pre>


#source = données à copier;
#source = D'où proviennent les données à copier;
#cible = endroit ou copier les données sources;
#cible = où seront copiées les données traitées par la commande;
#bs = taille des blocs, de puissance 2, généralement égale à 512;
#bs = taille des blocs, de puissance 2, par défaut égale à 512 octets;
#skip = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de la lecture;
#skip = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de la lecture;
#seek = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de l'écriture.  
#seek = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de l'écriture.  
Ligne 35 : Ligne 38 :
= Utilisation =  
= Utilisation =  


== Copier une partition de disque dur sur un autre disque dur ==
== Copier une partition d'un disque dur vers un partition d'un autre disque dur ==


Copie l'intégralité de la partition sda9 vers la partition sdb1, ne pas s'arrếter sur les erreurs de lecture.
Copie l'intégralité de la partition sda9 vers la partition sdb1 et ne pas interrompre la copie en cas d'erreurs.


  dd if=/dev/sda9 of=/dev/sdb1 bs=4096 conv=notrunc,noerror
  dd if=/dev/sda9 of=/dev/sdb1 bs=4096 conv=noerror
   
   
  256000+0 enregistrements lus
  256000+0 enregistrements lus
Ligne 45 : Ligne 48 :
  1048576000 octets (1,0 GB) copiés, 30,778 s, 34,1 MB/s
  1048576000 octets (1,0 GB) copiés, 30,778 s, 34,1 MB/s


notrunc = Ne pas limiter la taille du fichier de sortie.
noerror = Continuer même en cas d'erreur.
 
noerror = Continuer même après des erreurs de lecture.


Remarque au sujet de l'UUID.
Remarque au sujet de l'UUID.


Copier une partition vers une autre copie aussi son UUID. Vous vous retrouvez alors avec deux partitions qui portent le même numéro...
Copier une partition autre vers une partition copie aussi l'UUID puisqu'il est inscrit dans la partition même.< br />
Vous vous retrouveriez alors avec deux partitions qui ont le même UUID...


  # blkid
  # blkid
Ligne 58 : Ligne 60 :
  /dev/sdb1: UUID="a5355774-2e6b-45fe-8993-0f23602c1616" TYPE="ext2"
  /dev/sdb1: UUID="a5355774-2e6b-45fe-8993-0f23602c1616" TYPE="ext2"


Il faut alors générer un nouveau numéro pour ne pas avoir de conflit (partition démontée...):
Il faut alors modifier l'UUID de la partition copiée pour ne pas avoir de conflit si la partition originale et sa copie sont accessibles au système :
 


  # tune2fs -U random /dev/sdb1
  # tune2fs -U random /dev/sdb1
Ligne 69 : Ligne 72 :
Copie de l'intégralité (y compris le mbr) du disque sdg vers le disque sdh:
Copie de l'intégralité (y compris le mbr) du disque sdg vers le disque sdh:


  dd if=/dev/sdg of=/dev/sdh conv=notrunc,noerror
  dd if=/dev/sdg of=/dev/sdh conv=noerror
   
   
  4030464+0 enregistrements lus
  4030464+0 enregistrements lus
Ligne 75 : Ligne 78 :
  2063597568 octets (2,1 GB) copiés, 1160,41 s, 1,8 MB/s
  2063597568 octets (2,1 GB) copiés, 1160,41 s, 1,8 MB/s


== Réaliser l'image ISO d'un CD ==
== Réaliser un fichier image ISO copie d'un CD-ROM ==


  dd if=/dev/sr0 of=/home/laurent/cd.iso bs=2048 conv=notrunc
  dd if=/dev/sr0 of=/home/laurent/cd.iso bs=2048
   
   
  737+0 enregistrements lus
  737+0 enregistrements lus
Ligne 83 : Ligne 86 :
  1509376 octets (1,5 MB) copiés, 3,3215 s, 454 kB/s
  1509376 octets (1,5 MB) copiés, 3,3215 s, 454 kB/s


Pour monter l'image obtenue:
Pour monter le fichier image ISO obtenu :


  # mkdir /mnt/cd
  # mkdir /mnt/cd
  # mount -o loop -t iso9660 cd.iso /mnt/cd
  # mount -o loop -t iso9660 cd.iso /mnt/cd


Insertion permanente dans fstab:
Montage permanent par /etc/fstab :


  /chemin_vers_iso/cd.iso  /mnt/cd  iso9660 rw,user,noauto 0 0
  /chemin_vers_iso/cd.iso  /mnt/cd  iso9660 rw,user,noauto 0 0
Ligne 100 : Ligne 103 :
Autant dire qu'il ne sera plus possible de récupérer quoi que ce soit sur ce périphérique...
Autant dire qu'il ne sera plus possible de récupérer quoi que ce soit sur ce périphérique...


  for n in `seq 7`; do dd if=/dev/urandom of=/dev/sdc bs=8b conv=notrunc; done
  for n in $(seq 7); do dd if=/dev/urandom of=/dev/sdc bs=8b; done
   
   
  dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
  dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
Ligne 130 : Ligne 133 :
  62464+0 enregistrements écrits
  62464+0 enregistrements écrits
  255852544 octets (256 MB) copiés, 36,897 s, 6,9 MB/s
  255852544 octets (256 MB) copiés, 36,897 s, 6,9 MB/s
== Sauvegarder le chargeur de boot d'un disque dur ==
dd if=/dev/sda of=ChrgBoot.dd bs=440 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
440 octets (440 B) copiés, 0,000473112 s, 930 kB/s
Cette commande copiera les 440 premiers octets du disque dur dans un fichier.


== Sauvegarder le MBR d'un disque dur ==
== Sauvegarder le MBR d'un disque dur ==


  dd if=/dev/sda of=MBR.image bs=446 count=1
  dd if=/dev/sda of=MBR.dd bs=512 count=1
   
  1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 7,4232e-05 s, 6,9 MB/s
 
Cette commande copiera les 512 premiers octets du disque dur dans un fichier.
 
 
== Sauvegarder la table des partitions d'un disque dur ==
 
$ dd if=/dev/sda of=TablePart.dd bs=64 count=1 skip=446
  1+0 enregistrements lus
  1+0 enregistrements lus
  1+0 enregistrements écrits
  1+0 enregistrements écrits
  446 octets (446 B) copiés, 3,0622e-05 s, 14,6 MB/s
  64 octets (64 B) copiés, 0,000558829 s, 115 kB/s
 
Cette commande copiera les 512 premiers octets du disque dur dans un fichier.
 
pour restaurer la table de partition
dd if=TablePart.dd of=/dev/sda bs=64 count=1 seek=446
64+0 enregistrements lus
64+0 enregistrements écrits
64 octets (64 B) copiés, 0,00132602 s, 48,3 kB/s
 
Cette commande copiera la table des partitions contenue dans le fichier '''TablePart.dd''' sur le disque '''/dev/sda'''
 
== Sauvegarder un disque dur ou une partition dans une image compressée ==
 
La ligne de commandes suivante permet de créer un fichier compressé, qui pourra être utilisé pour restaurer la partition "n" ("n" est une valeur numérique) du disque "/dev/sdX" ("X" est une lettre alphabétique).<br />
(peu importe le type de partition)
 
dd if=/dev/sdXn | gzip -c > /media/suportamovible/fichierimage_part_dd.gz
 
Dans cette ligne de commandes, le programme "dd" lit par blocs (de 512 octets par défaut) le contenu de la partition "n" du disque "X" (/dev/sdXn).<br />
Le flux de sortie du programme "dd" est connecté par un tube anonyme (|) au flux d'entrée du programme "gzip".<br />
"gzip" va compresser ce flux et le retourner par son flux de sortie (option "c") qui sera re-dirigé par ">" vers le fichier "/media/suportamovible/fichierimage_part_dd.gz".<br />
Si le fichier "/media/suportamovible/fichierimage_part_dd.gz" existait avant l'exécution de cette ligne de commandes, il serait "écrasé".<br /><br />
 
Pour restaurer la partition ainsi sauvegardée faire :


Cette commande copiera les 446 premiers octets du disque dur dans un fichier.
gzip -cd /media/suportamovible/fichierimage_part_dd.gz | dd of=/dev/sdXn
 
Dans cette commande, le programme "gzip" dé-compresse (option "d") le fichier "/media/suportamovible/fichierimage_part_dd.gz".<br />
Le flux de sortie du programme "gzip" (option "c") est connecté à un tube anonyme (|) qui est connecté à l'entrée du programme "dd".<br />
La sortie (of=) du programme "dd" se fera sur la partition "n" du disque "X" (/dev/sdXn),<br />
et le contenu de cette partition sera écrasé et remplacé par le contenu du fichier sauvegardé par la ligne de commandes précédente.
 
==[[Clef_usb_d'installation|Graver une ISO sur une clef USB]]==


= Références =
= Références =
Ligne 151 : Ligne 203 :


[[Utilisateur:Lol|Lol]] 8 mars 2011 à 07:09 (CST)
[[Utilisateur:Lol|Lol]] 8 mars 2011 à 07:09 (CST)
[[Catégorie:Commandes_de_base]]
 
[[Catégorie:Commandes]]
 
[[Niveau de difficulté::Intermédiaire]]

Dernière version du 31 décembre 2017 à 12:52

Cet article est une ébauche. N'hésitez pas à contribuer ou à en discuter.


Pour pouvoir copier ou modifier une partition, elle ne doit pas être en cours d'utilisation.
Imaginez que vous cherchiez à copier un livre que l'auteur est en train de modifier où n'a pas encore terminé d'écrire…

La commande dd

Introduction:

Extrait de la page de man de dd :

"dd copie un fichier (par défaut, depuis l'entrée standard vers la sortie standard) en permettant de sélectionner la taille de bloc, et d'effectuer des conversions."

Utilisée fréquemment, la commande dd est très simple d'utilisation, très puissante et... tout aussi dangereuse. Vérifiez toujours bien les commandes deux (trois ?) fois avant de les lancer.

LES COMMANDES QUI SUIVENT PEUVENT VOUS FAIRE PERDRE TOUTES LES INFORMATIONS CONTENUES DANS VOTRE MACHINE SI ELLES NE SONT PAS CONVENABLEMENT UTILISÉES. VOUS ÊTES PRÉVENUS!

NOTE: Pour pouvoir être copiée, déplacée, agrandie ou réduite, la partition source doit au préalable être "démountée" du système (voir "umount").

Syntaxe

La syntaxe d'une ligne de commandes utilisant dd se présente généralement sous cette forme:

dd if=<source> of=<cible> bs=<taille des blocs> skip= seek= conv=<conversion>
  1. source = D'où proviennent les données à copier;
  2. cible = où seront copiées les données traitées par la commande;
  3. bs = taille des blocs, de puissance 2, par défaut égale à 512 octets;
  4. skip = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de la lecture;
  5. seek = Ignorer le nombre indiqué de blocs (dont la taille est fournie par ibs) au début de l'écriture.
  6. conv = Modifier le fichier comme indiqué par l'argument conversion, qui peut prendre les valeurs suivantes (pas d'espace autour des virgules lorsque plusieurs arguments sont fournis) :
ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync.

Utilisation

Copier une partition d'un disque dur vers un partition d'un autre disque dur

Copie l'intégralité de la partition sda9 vers la partition sdb1 et ne pas interrompre la copie en cas d'erreurs.

dd if=/dev/sda9 of=/dev/sdb1 bs=4096 conv=noerror

256000+0 enregistrements lus
256000+0 enregistrements écrits
1048576000 octets (1,0 GB) copiés, 30,778 s, 34,1 MB/s

noerror = Continuer même en cas d'erreur.

Remarque au sujet de l'UUID.

Copier une partition autre vers une partition copie aussi l'UUID puisqu'il est inscrit dans la partition même.< br /> Vous vous retrouveriez alors avec deux partitions qui ont le même UUID...

# blkid
...
/dev/sda9: UUID="a5355774-2e6b-45fe-8993-0f23602c1616" TYPE="ext2"
/dev/sdb1: UUID="a5355774-2e6b-45fe-8993-0f23602c1616" TYPE="ext2"

Il faut alors modifier l'UUID de la partition copiée pour ne pas avoir de conflit si la partition originale et sa copie sont accessibles au système :


# tune2fs -U random /dev/sdb1
# blkid
/dev/sda9: UUID="a5355774-2e6b-45fe-8993-0f23602c1616" TYPE="ext2"
/dev/sdb1: UUID="75aa7a37-d2a2-4cf4-88f8-616067c7a684" TYPE="ext2"

Cloner un disque dur en entier

Copie de l'intégralité (y compris le mbr) du disque sdg vers le disque sdh:

dd if=/dev/sdg of=/dev/sdh conv=noerror

4030464+0 enregistrements lus
4030464+0 enregistrements écrits
2063597568 octets (2,1 GB) copiés, 1160,41 s, 1,8 MB/s

Réaliser un fichier image ISO copie d'un CD-ROM

dd if=/dev/sr0 of=/home/laurent/cd.iso bs=2048

737+0 enregistrements lus
737+0 enregistrements écrits
1509376 octets (1,5 MB) copiés, 3,3215 s, 454 kB/s

Pour monter le fichier image ISO obtenu :

# mkdir /mnt/cd
# mount -o loop -t iso9660 cd.iso /mnt/cd

Montage permanent par /etc/fstab :

/chemin_vers_iso/cd.iso   /mnt/cd  iso9660 rw,user,noauto 0 0

Effacer un lecteur

ATTENTION, COMMANDE DANGEREUSE!

Pour les paranos... La commande suivante remplie 7 fois de suite un périphérique avec des données aléatoires. Autant dire qu'il ne sera plus possible de récupérer quoi que ce soit sur ce périphérique...

for n in $(seq 7); do dd if=/dev/urandom of=/dev/sdc bs=8b; done

dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 37,0691 s, 6,9 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 37,1506 s, 6,9 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 36,6351 s, 7,0 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 36,4881 s, 7,0 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 36,4908 s, 7,0 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 36,5277 s, 7,0 MB/s
dd: écriture de « /dev/sdc »: Aucun espace disponible sur le périphérique
62465+0 enregistrements lus
62464+0 enregistrements écrits
255852544 octets (256 MB) copiés, 36,897 s, 6,9 MB/s

Sauvegarder le chargeur de boot d'un disque dur

dd if=/dev/sda of=ChrgBoot.dd bs=440 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
440 octets (440 B) copiés, 0,000473112 s, 930 kB/s

Cette commande copiera les 440 premiers octets du disque dur dans un fichier.

Sauvegarder le MBR d'un disque dur

dd if=/dev/sda of=MBR.dd bs=512 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 7,4232e-05 s, 6,9 MB/s

Cette commande copiera les 512 premiers octets du disque dur dans un fichier.


Sauvegarder la table des partitions d'un disque dur

$ dd if=/dev/sda of=TablePart.dd bs=64 count=1 skip=446
1+0 enregistrements lus
1+0 enregistrements écrits
64 octets (64 B) copiés, 0,000558829 s, 115 kB/s

Cette commande copiera les 512 premiers octets du disque dur dans un fichier.

pour restaurer la table de partition

dd if=TablePart.dd of=/dev/sda bs=64 count=1 seek=446
64+0 enregistrements lus
64+0 enregistrements écrits
64 octets (64 B) copiés, 0,00132602 s, 48,3 kB/s

Cette commande copiera la table des partitions contenue dans le fichier TablePart.dd sur le disque /dev/sda

Sauvegarder un disque dur ou une partition dans une image compressée

La ligne de commandes suivante permet de créer un fichier compressé, qui pourra être utilisé pour restaurer la partition "n" ("n" est une valeur numérique) du disque "/dev/sdX" ("X" est une lettre alphabétique).
(peu importe le type de partition)

dd if=/dev/sdXn | gzip -c > /media/suportamovible/fichierimage_part_dd.gz 

Dans cette ligne de commandes, le programme "dd" lit par blocs (de 512 octets par défaut) le contenu de la partition "n" du disque "X" (/dev/sdXn).
Le flux de sortie du programme "dd" est connecté par un tube anonyme (|) au flux d'entrée du programme "gzip".
"gzip" va compresser ce flux et le retourner par son flux de sortie (option "c") qui sera re-dirigé par ">" vers le fichier "/media/suportamovible/fichierimage_part_dd.gz".
Si le fichier "/media/suportamovible/fichierimage_part_dd.gz" existait avant l'exécution de cette ligne de commandes, il serait "écrasé".

Pour restaurer la partition ainsi sauvegardée faire :

gzip -cd /media/suportamovible/fichierimage_part_dd.gz | dd of=/dev/sdXn

Dans cette commande, le programme "gzip" dé-compresse (option "d") le fichier "/media/suportamovible/fichierimage_part_dd.gz".
Le flux de sortie du programme "gzip" (option "c") est connecté à un tube anonyme (|) qui est connecté à l'entrée du programme "dd".
La sortie (of=) du programme "dd" se fera sur la partition "n" du disque "X" (/dev/sdXn),
et le contenu de cette partition sera écrasé et remplacé par le contenu du fichier sauvegardé par la ligne de commandes précédente.

Graver une ISO sur une clef USB

Références

Page de man

Unix DD Command and Image Creation

The real dd command


Lol 8 mars 2011 à 07:09 (CST)

Intermédiaire