# 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`](https://www.gnu.org/software/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ée** - `debian.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 lecteur - `debian.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écouper - `grosfichier-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 `split` est 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 source - `full-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) ou `blkdiscard` sur 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. ```bash $ dd if=/dev/zero of=/media/disk_6/testfile bs=1G count=1 oflag=direct ``` ## Bibliographie - -