Articles

dd (Unix) (Français)

Posted by admin

la commande dd peut être utilisée à diverses fins. Pour les commandes de copie simple, il a tendance à être plus lent que les alternatives spécifiques au domaine, mais il excelle dans sa capacité unique à « écraser ou tronquer un fichier à tout moment ou à rechercher dans un fichier », une interface assez bas niveau vers L’API de fichier Unix.

Data transferEdit

dd peut dupliquer des données entre fichiers, périphériques, partitions et volumes. Les données peuvent être entrées ou sorties vers et depuis n’importe lequel d’entre eux; mais il existe des différences importantes concernant la sortie lors de l’accès à une partition., De plus, pendant le transfert, les données peuvent être modifiées à l’aide des options conv en fonction du support. (À cette fin, cependant, dd est plus lent que cat.)

l’option noerror signifie continuer s’il y a une erreur, tandis que l’option sync provoque le remplissage des blocs de sortie.

En place modificationEdit

jj pouvez modifier les données en place., Par exemple, cela remplace les 512 premiers octets d’un fichier par des octets nuls:

dd if = / dev / zero of=path / to / file bs = 512 count=1 conv=notrunc

l’option de conversion notrunc signifie Ne pas tronquer le fichier de sortie-c’est-à-dire que si le fichier de sortie existe déjà, remplacez simplement les octets spécifiés et laissez le reste du fichier de sortie seul. Sans cette option, dd créerait un fichier de sortie de 512 octets.,

l’enregistrement d’amorçage Maître de sauvegarde et de restoreEdit

L’exemple ci-dessus peut également être utilisé pour sauvegarder et restaurer n’importe quelle région d’un appareil à un fichier, telles que l’enregistrement d’amorçage maître.

Pour dupliquer les deux premiers secteurs d’une disquette:

dd if=/dev/fd0 of=MBRboot.img bs=512 count=2 

disk wipeEdit

Main article: Data erasure

pour des raisons de sécurité, il est parfois nécessaire d’avoir un disque wipe d’un périphérique mis au rebut. Cela peut être réalisé par un « transfert de données » à partir des fichiers spéciaux Unix.,

  • Pour écrire des zéros sur un disque, utilisez la balise dd if=/dev/zero of=/dev/sda bs=16M.
  • Pour écrire des données sur un disque, utilisez dd if=/dev/urandom of=/dev/sda bs=16M.

par rapport à l’exemple de modification de données ci-dessus, l’option de conversion notrunc n’est pas requise car elle n’a aucun effet lorsque le fichier de sortie du dd est un périphérique bloc.

l’option bs=16M permet à dd de lire et d’écrire 16 mebioctets à la fois. Pour les systèmes modernes, une taille de bloc encore plus grande peut être plus rapide., Notez que le remplissage du lecteur avec des données aléatoires peut prendre plus de temps que la mise à zéro du lecteur, car les données aléatoires doivent être créées par le processeur, tandis que la création de zéros est très rapide. Sur les disques durs modernes, la mise à zéro du lecteur rendra la plupart des données qu’il contient définitivement irrécupérables. Cependant, avec d’autres types de lecteurs tels que les mémoires flash, beaucoup de données peuvent encore être récupérables par la rémanence des données.

Les disques durs modernes contiennent une commande Secure Erase conçue pour effacer définitivement et en toute sécurité toutes les parties accessibles et inaccessibles d’un lecteur., Il peut également fonctionner pour certains disques SSD (lecteurs flash). En 2017, il ne fonctionne pas sur les lecteurs flash USB ni sur les mémoires Flash numériques sécurisées. Lorsqu’il est disponible, c’est à la fois plus rapide que l’utilisation de dd et plus sécurisé. Sur les machines Linux, il est accessible via l’option security security-erase-enhanced de la commande hdparm.

le programme shred offre plusieurs écrasements, ainsi que la suppression plus sécurisée de fichiers individuels.

Data recoveryEdit

La récupération de données implique la lecture à partir d’un lecteur dont certaines parties sont potentiellement inaccessibles., dd est un bon ajustement avec ce travail avec son saut flexible (chercher) et d’autres paramètres de bas niveau. Le vanilla DD, cependant, est maladroit à utiliser car l’utilisateur doit lire les messages d’erreur et calculer manuellement les régions qui peuvent être lues. La taille d’un seul bloc limite également la granuarité de la récupération, car un compromis doit être fait: utiliser un petit pour plus de données récupérées ou utiliser un grand pour la vitesse.

un programme c appelé dd_rescue a été écrit en octobre 1999. Il a supprimé la fonctionnalité de conversion de dd et prend en charge deux tailles de blocs pour faire face au dilemme., Si une lecture utilisant une grande taille échoue, elle retombe sur la plus petite taille pour collecter autant de données que possible. Il peut également s’exécuter en arrière. En 2003, un script dd_rhelp a été écrit pour automatiser le processus d’utilisation de dd_rescue, en gardant une trace des zones lues par lui-même.

en 2004, GNU a écrit un utilitaire distinct, sans rapport avec dd, appelé ddrescue. Il a un algorithme de taille de bloc dynamique plus sophistiqué et garde une trace de ce qui a été lu en interne. Les auteurs de dd_rescue et dd_rhelp le considèrent comme supérieur à leur implémentation., Pour aider à distinguer le nouveau programme GNU de l’ancien script, d’autres noms sont parfois utilisés pour ddrescue de GNU, y compris addrescue (le nom sur freecode.com et freshmeat.net), gddrescue (nom du paquet Debian) et gnu_ddrescue (nom du paquet openSUSE).

un autre programme open source appelé savehd7 utilise un algorithme sophistiqué, mais il nécessite également l’installation de son propre interpréteur de langage de programmation.,performances de lecture et d’écriture du système entier (et généralement mono-thread) pour les blocs de 1024 octets:

générer un fichier avec random dataEdit

pour créer un fichier de 100 octets aléatoires en utilisant le pilote aléatoire du noyau:

dd if=/dev/urandom of=myrandom bs=100 count=1

 dd if=filename of=filename1 conv=ucase,notrunc 

progress indicatoredit

étant un programme principalement conçu comme un filtre, DD ne fournit normalement aucune indication de progression., Cela peut être surmonté en envoyant un signal USR1 au processus GNU DD en cours d’exécution, ce qui permet à dd d’imprimer le nombre actuel de blocs transférés.

Le one-liner suivant donne une sortie continue de progression toutes les 10 Secondes jusqu’à ce que le transfert soit terminé, lorsque dd-pid est remplacé par le process-id de dd:

 pendant kill-USR1 dd-pid ; do sleep 10 ; done 

Les nouvelles versions de GNU DD prennent en charge l’option status=progress, qui permet l’impression périodique des statistiques de transfert vers stderr.

Leave A Comment