Commande de base: dd

dd la commande qui déboîte ...

GIF animé : terminal avec saisi de commande dd pour entête article.

Alors je ne sais pas si vous êtes nombreux à utiliser cette commande mais, personnellement elle m’est indispensable !

Je l’utilise pour les sauvegardes de partition ou de disque complet (Entendre tout type de stockage pas seulement les disques dur ;) ). Forcement, je l’utilise également pour les restaurations de mes backup :p ainsi que pour écrire des images bootables sur des clefs USB.

Exemples concrets

Je viens d’installer et de configurer un Raspberry pi. Le système est sur une carte micro-sd de 32 Go. Avant de mettre en service, je fais un petit backup.

dd if=/dev/sdb of=/media/backup/rpi.img

Cette ligne de commande va lire l’entièreté du périphérique sdb et écrire le contenu dans le fichier rpi.img

  • dd : ben, c’est le nom de la commande :p
  • if= : désigne l’entrée à lire (ici le périphérique /dev/sdb)
  • of= : désigne la sortie à écrire (ici le fichier /media/backup/rpi.img)

En gros, la commande dd li un truc A (if=) et l’écrit sur B (of=).

Alors en vrai, je ne fais pas exactement ça mais, il faut poser les base ;). Le “souci” de faire comme ça, c’est que cela va créer un fichier de sauvegarde d’une taille égale au stockage d’entrer, ici 32 Go.

Pipe gzip !

En ligne de commande, il est possible de connecter les commandes les une aux autres. Du coup, il est très simple de demander a dd de lire le contenu d’un périphérique et de le donner a une autre commande comme gzip pour compresser directement la sauvegarde.

dd if=/dev/sdb | gzip > /media/backup/rip.img.gz

Le of= a disparu. Il est remplacé par le pipeline “|”, qui permet de spécifier que la sortie de la commande dd est l’entrée de la commande qui suis le pipeline, ici gzip. Puis on redirige “>” la sortie de gzip vers un fichier auquel on ajoute l’extension “gz” comme moyen mnémotechnique pour ce souvenir qu’il est compressé avec gzip.

Pour info, dans le test que j’ai fait, je suis passé d’une image non compressée d’environ 30 Go a une image compressée de 2.5 Go.

Restaurer, c’est pas pire !

gzip -d /media/backup/rpi.img.gz | dd of=/dev/sdb

Voilà, opération inverse. On demande à gzip de décompresser le backup et on “pipe” vers dd avec le périphérique de sortie désigné avec le paramètre of= et bim ;).

Et pour les clefs USB bootables ?

Alors là il faut une image préparée comme une linux mint ou tails. Puis en gros, comme la première commande de l’article.

dd if=image.iso of=/dev/sdb

Tips

Après l’exécution d’une commande dd il est de bon ton de lancer une commande sync. Cela permet de vérifier que toutes les écritures sont terminées.

Conclusion

Avec la commande dd on peut cloner n’importe quel fichier vers un autre fichier, que ce soient des fichiers classiques, périphériques de stockage, partition ou périphériques spéciaux. Par exemple avec /dev/urandom on peut écrire des données aléatoires sur un périphérique de stockage ce qui est une bonne pratique avant de s’en séparer ;) .

Une dernière chose, sans doute la plus importante ! Cette commande est dangereuse, il est facile de faire une erreur et d’écraser les données qu’on voulait conserver ! Il FAUT toujours prendre le temps de relire une ligne de commande qui intègre dd afin d’être certain de ne pas faire d’erreur irréversible !