dd (Unix)

Un article de Wikipédia, l'encyclopédie libre.

Dd

Informations
Type Utilitaire UNIX (d)Voir et modifier les données sur Wikidata

dd est une commande unix permettant de copier un fichier – avec ou sans conversion(s) au passage – en ne sélectionnant qu'une partie de données à copier. Il est particulièrement adapté à la copie sur des périphériques blocs tels que des disquettes, des disques durs ou des lecteurs CD-ROM.

Origine du nom[modifier | modifier le code]

Plusieurs théories existent pour justifier le nom de cette commande.

L'une dit que l'on voulait nommer cette commande cc pour « Copy and Convert », mais ce nom de commande étant déjà utilisée par le compilateur C, on a utilisé la lettre suivante de l'alphabet.

Selon le manuel d'utilisation de certaines distributions Unix, ce serait l'acronyme de « data dump » ou ddtank.

Sa syntaxe est inspirée de l'instruction DD du JCL du système OS/360 d'IBM. Dennis Ritchie, l'un des deux créateurs d'Unix, a confirmé que là a toujours été l'explication du nom de la commande[1].

Le rétroacronyme satirique « Data Destroyer » (destructeur de données) lui est parfois attribué, car une simple erreur de manipulation de cette commande sur un disque dur peut détruire irrémédiablement les données sans aucun avertissement.

Syntaxe[modifier | modifier le code]

La syntaxe de dd est différente des autres commandes Unix traditionnelles : dd utilise des options de la forme option=valeur au lieu des habituelles -o valeur ou --option=valeur.

Les principales options de dd sont les suivantes :

  • if=fichier_entree (Input File) : lit ce fichier en entrée. Cela peut être aussi bien un fichier régulier qu'un périphérique de type bloc. Par défaut, c'est l'entrée standard qui est utilisée (par exemple le clavier) ;
  • of=fichier_sortie (Output File) : écrit dans ce fichier en sortie ;
  • bs=t_b (Block Size) : copie les données par blocs de t_b octets ;
  • count=n_b : ne copie que n_b blocs ;
  • skip=n_e : ignore les n_e premiers blocs du fichier d'entrée[2] (ne copie le fichier d'entrée qu'à partir du bloc de rang n_e + 1) ;
  • seek=n_s : ignore les n_s premiers blocs du fichier de sortie[2] (ne commence à écrire dans le fichier de sortie qu'à partir du bloc de rang n_s + 1) ;
  • ibs=n_o : fixe la taille des blocs d'entrée à n_o octets. Par défaut 512 octets ;
  • conv=t_c1,t_c2 : effectue une ou plusieurs conversions des types t_c1, t_c2, etc. :
    • Par exemple, ascii convertit de l'EBCDIC (codage IBM) en ASCII,
    • ebcdic : ASCII vers EBCDIC,
    • ibm : EBCDIC vers ASCII avec les règles IBM,
    • swab : inverse les deux octets de chaque mot de 2 octets (swap bytes),
    • lcase : convertit en minuscules,
    • ucase : convertit en majuscules,
    • sync : complète les blocs d'entrée avec des zéros pour obtenir des blocs de ibs octets,
    • noerror : continue même s'il y a des erreurs ;
  • --help : message d'aide.

Particularité[modifier | modifier le code]

Contrairement à des commandes comme cp, qui copient un fichier de façon « naïve » (lecture d'une partie du fichier sur un premier périphérique, puis copie sur le second, ce qui n'utilise pas la simultanéité et ralentit donc les opérations d'un facteur 2 environ), dd lance deux tâches asynchrones, d'une part de lecture et d'autre part d'écriture, assurant ainsi des copies environ deux fois plus rapides du fait de la simultanéité d'opération des deux périphériques concernés. Ce procédé ne fut introduit dans Windows qu'avec sa version 8 (2012).

GNU ddrescue[modifier | modifier le code]

GNU ddrescue est une alternative développée indépendamment de la commande UNIX dd, dont la particularité de ne pas s’arrêter lorsqu’une lecture échoue lui permet, entre autres, la récupération d’une partie d’un disque endommagé. Cette version est maintenue par le projet GNU[3]. Ddrescue recommande par ailleurs lzip (en) pour la compression des sauvegardes en raison de ses capacités de récupération de données, notamment lorsqu’il s’agit de fusionner plusieurs copies de sauvegarde. La combinaison ddrescue/lziprecover apparait également la meilleure option pour la récupération des données à partir de plusieurs sources.

Notes et références[modifier | modifier le code]

  1. « origin of the UNIX dd command », sur groups.google.com (consulté le )
  2. a et b Linux en concentré Manuel de référence, Ellen Siever, Stephen Figgins & Aaron Weber, éditions O'Reilly ; 4e édition en français.
  3. (en) « GNU ddrescue », sur directory.fsf.org, FSF, .