3.4 KiB
dd
dd permet de copier et convertir des données au niveau bloc, sans passer par la sémantique d'un système de fichiers.
Le nom officiel signifie Dataset Definition (héritage d'IBM/JCL), mais sa réputation lui a valu les surnoms ironiques de Data Destroyer ou Disk Destroyer : une faute de frappe sur of= peut écraser un disque entier sans confirmation.
dd permet de manipuler des zones qui n'appartiennent pas à un système de fichiers : secteur d'amorçage (MBR), tables de partition, espace libre contenant des traces de fichiers effacés, etc. L'un de ses usages principaux est donc la création d'une copie exacte (bit à bit) d'une partition ou d'un disque.
Astuce : pour les copies longues sur supports défectueux, préférez
ddrescue, qui reprend la copie après une erreur de lecture au lieu d'abandonner.
Exemples d'utilisation
Créer une clé USB bootable
Pour écrire une image ISO sur une clé USB.
On considère :
/dev/sdX: la clé USB non montéedebian.iso: l'image ISO présente dans le dossier courant
# dd if=debian.iso of=/dev/sdX bs=1M; sync
Réaliser une image d'un DVD
Créer une image ISO de sauvegarde d'un CD ou d'un DVD :
On considère :
/dev/cdrom: le chemin d'accès au lecteurdebian.iso: le nom de l'image générée
$ dd if=/dev/cdrom of=debian.iso
Découper un fichier
Pour découper un fichier en tranches de 100 Mio (avec dd, K = 1024 octets, donc bs=10K count=10K = 100 Mio par tranche).
On considère :
grosfichier: le fichier à découpergrosfichier-partN: les fragments successifs
$ dd bs=10K count=10K if=grosfichier of=grosfichier-part1
$ dd bs=10K count=10K skip=10K if=grosfichier of=grosfichier-part2
$ dd bs=10K count=10K skip=20K if=grosfichier of=grosfichier-part3
$ dd bs=10K count=10K skip=30K if=grosfichier of=grosfichier-part4
En pratique, la commande
splitest mieux adaptée à ce cas d'usage.
Copier la table MBR
Pour sauvegarder le MBR (et la table des partitions primaires) d'un disque.
On considère :
/dev/sda: le disque sourcefull-mbr.bin: le fichier de sauvegarde
$ dd if=/dev/sda of=full-mbr.bin bs=512 count=1
Effacer un disque avec des zéros
Pour écraser toutes les données d'un disque en le remplissant de zéros :
$ dd if=/dev/zero of=/dev/sda
Pour un effacement sécurisé, préférez
shred(plusieurs passes avec données aléatoires) oublkdiscardsur SSD.
Tester le débit d'un disque
dd permet une mesure rapide des performances séquentielles en écriture.
Pour isoler la performance d'écriture, on utilise /dev/zero comme source. Écrire directement sur le périphérique (of=/dev/sda) donnerait la mesure la plus pure, mais détruirait son contenu : on passe donc par un fichier (of=/media/disk_6/testfile), ce qui inclut le coût du système de fichiers — c'est-à-dire les conditions réelles d'utilisation.
L'option oflag=direct contourne le cache du noyau pour mesurer le disque, pas la RAM. Notez qu'avec bs=1G, dd alloue 1 Gio en mémoire ; réduisez la valeur (ex. bs=512M) si la RAM disponible est limitée.
$ dd if=/dev/zero of=/media/disk_6/testfile bs=1G count=1 oflag=direct