Copie physique, transformations : dd

La commande dd réalise une copie physique d'un flux d'entrée vers un flux de sortie. Chaque octet souhaité du flux d'entrée est copié vers le flux de sortie, indépendamment de ce que représente la donnée.

Syntaxe

dd [if=fichier_entree] [of=fichier_sortie] [ibs=nboctets] [obs=nboctets] [bs=nboctets] [skip=nbblocs] [seek=nbblocs] [count=nbblocs]
Principales options :
if=fichier_entree : Fichier à traiter. Si aucun fichier n'est spécifié, l'entrée standard est traité.
of=fichier_sortie : Fichier de sortie. Si aucun fichier n'est spécifié, la sortie standard est utilisée.
ibs=nboctets : Traiter les données en entrée par blocs de nboctets octets (défaut : 512 octets).
obs=nboctets : Ecrire les données en sortie par blocs de nboctets octets (défaut : 512 octets).
bs=nboctets : Traiter les données d'entrée et de sortie par bloc de nboctets.
skip=nbblocs : Sauter nbblocs en entrée avant de commencer le traitement.
seek=nbblocs : En sortie, écrire à partir du bloc nbblocs.
count=nbblocs : Ecrire uniquement nbblocs de l'entrée vers la sortie.

Exemples

Copie du disque /dev/sda sur le disque /dev/sdb par blocs de 8ko

$ fdisk -l
 
Disque /dev/sda: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00040afc
 
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1         994     7977984   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2             994        1045      407553    5  Etendue
/dev/sda5             994        1045      407552   82  Linux swap / Solaris
 
Disque /dev/sdb: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00000000
 
Le disque /dev/sdb ne contient pas une table de partition valide

$ dd if=/dev/sda of=/dev/sdb bs=8k
1048576+0 enregistrements lus
1048576+0 enregistrements écrits
8589934592 octets (8,6 GB) copiés, 859,097 s, 10,0 MB/s
$

$ fdisk -l
 
Disque /dev/sda: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00040afc
 
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1         994     7977984   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2             994        1045      407553    5  Etendue
/dev/sda5             994        1045      407552   82  Linux swap / Solaris
 
Disque /dev/sdb: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00040afc
 
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1   *           1         994     7977984   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sdb2             994        1045      407553    5  Etendue
/dev/sdb5             994        1045      407552   82  Linux swap / Solaris

Idem mais sur un disque sur une machine distante

$ dd if=/dev/sda | ssh 192.168.1.19 dd of=/dev/sdb bs=8k

Supprimer les 5 premiers octets du fichier fic1

$ cat fic1
ceci est un test
$ od -c fic1
0000000   c   e   c   i       e   s   t       u   n       t   e   s   t
0000020  \n
0000021
$ dd bs=1 skip=5 if=fic1 of=fic11
12+0 enregistrements lus
12+0 enregistrements écrits
12 octets (12 B) copiés, 0,00010661 s, 113 kB/s
$ cat fic11
est un test
$ od -c fic11
0000000   e   s   t       u   n       t   e   s   t  \n
0000014
$

Retirer le dernier octet d'un fichier de 6 903 921 octets. La taille du bloc est fixée à 6 903 920 octets. Le nombre de blocs traités est de 1

$ ls -l mon_fichier4
-rw-r--r-- 1 root root 6903921 25 mai   16:36 mon_fichier4
$ dd if=mon_fichier4 of=mon_fichier41 bs=6903920 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
6903920 octets (6,9 MB) copiés, 0,183292 s, 37,7 MB/s
$ ls -l mon_fichier41
-rw-r--r-- 1 root root 6903920 26 mai   11:21 mon_fichier41
$

Etiquettes: