Dd

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Copie et conversion de données bloc à bloc
Commande dd
Danger Destructeur si if=/of= sont inversés ou mal choisis — écrase la destination sans confirmation
Voir aussi Shred

dd copie et convertit des données bloc à bloc (souvent retenu comme « device to device »). Il sert à dupliquer des fichiers ou des disques, générer des fichiers de test, mesurer un débit disque ou effacer un support de stockage.

⚠️ Danger : dd écrase sa destination (of=) sans aucune confirmation ni sauvegarde préalable. Une simple inversion des paramètres if= (source) et of= (destination) — par exemple lancer dd if=/dev/sda of=/dev/zero au lieu de dd if=/dev/zero of=/dev/sda — écrase irrémédiablement le disque source au lieu de le vider, sans le moindre message d'erreur ni possibilité d'annulation une fois lancé. Vérifier systématiquement le sens de la commande et le nom exact des périphériques (lsblk, fdisk -l) avant de valider, en particulier en tant que root sur du matériel de production.

Paramètres principaux

Paramètre Rôle
if=fichier fichier ou périphérique d'entrée (source)
of=fichier fichier ou périphérique de sortie (destination)
bs=n taille des blocs, en octets
count=n nombre de blocs à copier
skip=n nombre de blocs à sauter au début du fichier d'entrée
seek=n nombre de blocs à sauter au début du fichier de sortie
conv=... options de conversion (voir plus bas)

Créer un fichier de test

# fichier de 1 Mo rempli de zéros
dd if=/dev/zero of=file.bin bs=1024 count=1024

# fichier de 10 Mo créé instantanément (fichier creux, via seek + count=0)
dd if=/dev/zero of=10M.bin bs=1024 count=0 seek=$((1024*10))

# 100 octets aléatoires
dd if=/dev/urandom of=/home/octets_aleatoires bs=1 count=100

Mesurer un débit disque

# vitesse d'écriture (250000 blocs de 8k, soit environ 2 Go)
time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile

# vitesse de lecture d'un fichier existant
dd if=/var/log/toto.log of=/dev/null bs=4096k

# créer un fichier de swap
dd if=/dev/zero of=swap bs=1024 count=32768

Cloner un disque

⚠️ Opération destructrice : le disque de destination est totalement écrasé, à réserver à un disque vide ou dont le contenu est déjà sauvegardé.

dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror

Vérifier avant de lancer la copie que /dev/sdb est bien le disque de destination voulu et qu'il est au moins aussi grand que le disque source.

Effacer un disque

dd if=/dev/zero of=/dev/sda conv=notrunc

Un simple dd suffit dans la plupart des cas, mais les données restent parfois récupérables en analysant le support en mode brut. Pour un effacement plus robuste, shred écrit plusieurs passes de données aléatoires :

shred -vfz -n 64 /dev/sdg

Dans un environnement de secours (live CD), dcfldd (variante de dd orientée investigation forensique, avec suivi de progression) peut aussi être utilisé :

dcfldd if=/dev/zero of=/dev/sda

Lire la mémoire vive et le BIOS

# dump de la mémoire vive
dd if=/proc/kcore | hexdump -C | less

# lire la version du BIOS
dd if=/dev/mem bs=32k skip=31 count=1 | strings -n 8 | grep -i bios

Options de conversion (conv=)

Les principales valeurs acceptées par conv=, combinables en les séparant par des virgules :

  • ascii / ebcdic — conversion entre jeux de caractères EBCDIC et ASCII
  • block / unblock — conversion entre enregistrements de longueur variable et enregistrements de longueur fixe
  • lcase / ucase — conversion en minuscules/majuscules
  • noerror — poursuivre la copie même en cas d'erreur de lecture (utile pour récupérer un support endommagé)
  • notrunc — ne pas tronquer le fichier de sortie existant
  • sync — compléter chaque bloc d'entrée à la taille de bs avec des zéros

Voir aussi

  • Shred — effacement sécurisé multi-passes