draft: dd

This commit is contained in:
Cédrix
2026-05-16 19:13:01 +02:00
parent 7a439577c7
commit f43659019d
2 changed files with 88 additions and 0 deletions
@@ -0,0 +1,4 @@
{
"title": "dd",
"_updated_at": "2026-05-16 17:13:01"
}
@@ -0,0 +1,84 @@
# 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
- <https://www.gnu.org/software/coreutils/dd>
- <https://fr.wikipedia.org/wiki/Dd_(Unix)>