Comment fonctionne la commande dd sous Linux avec des exemples

Dd est un utilitaire très puissant et utile disponible sur les systèmes d’exploitation Unix et de type Unix. Comme indiqué dans son manuel, son but est de convertir et de copier les fichiers. Sur Unix et les systèmes d’exploitation de type Unix comme Linux, presque tout est traité comme un fichier, même les périphériques de bloc: cela rend DD utile, entre autres, pour cloner des disques ou effacer des données. L’utilitairedd est disponible dès la sortie de l’emballage, même dans l’installation la plus minimale de toutes les distributions., Dans ce tutoriel, nous verrons comment l’utiliser et comment modifier son comportement en utilisant certaines des options les plus couramment utilisées pour faciliter votre travail D’administration système Linux.,/td>

aucun logiciel spécial n’est nécessaire pour suivre ce tutoriel sauf dd autres familiarité avec l’interface de ligne de commande et les redirections Conventions # – nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu’utilisateur root être exécuté en tant qu’utilisateur normal non privilégié

utilisation de base

la syntaxe de base deddest très simple., Par défaut, le programme lit standard input et écrit dans standard output. Toutefois, on peut spécifier d’autres input et output fichiers en utilisant respectivement le if et of options de ligne de commande. Ici, dd diffère de la grande majorité des commandes shell, car n’utilise pas la syntaxe standard --option ou -o pour les options.,

SUBSCRIBE NEWSLETTER&RSS
abonnez-vous à RSS et NEWSLETTER et recevez les dernières nouvelles Linux, emplois, conseils de carrière et tutoriels.

nous allons voir un exemple de dd d’utilisation. L’un des cas d’utilisation les plus typiques de l’utilitaire est la sauvegarde de l’enregistrement de démarrage principal: le premier secteur sur un système partitionné MBR., La longueur de ce secteur est généralement512 octets: il contient l’étape 1 dugrub bootloader et la table de partition de disque. Supposons que nous souhaitions sauvegarder leMBR du disque /dev/sda, tout ce que nous avons à faire est d’invoquer dd avec la syntaxe suivante:

$ sudo dd if=/dev/sda bs=512 count=1 of=mbr.img

analysons la commande ci-dessus. Tout d’abord, nous avons préfixé l’appel DD réel avec la commande sudo, afin d’exécuter la commande avec des privilèges administratifs. Ceci est nécessaire pour accéder au périphérique de bloc /dev/sda., Nous avons ensuite invoqué dd spécifiant la source d’entrée avec l’optionif et le fichier de sortie avecof. Nous avons également utilisé les optionsbs Etcount pour spécifier respectivement la quantité de données à lire à la fois, ou la taille des blocs, et la quantité totale de blocs à lire. Dans ce cas, nous aurions pu omettre l’option bs, car 512 octets est la taille par défaut utilisée par dd., Si nous exécutons la commande ci-dessus, nous verrons qu’elle produit la sortie suivante:

1+0 records in1+0 records out512 bytes copied, 0.000657177 s, 779 kB/s

la sortie ci-dessus nous montre le nombre d’enregistrements lus et écrits, la quantité de données copiées, le temps pendant lequel la tâche a été terminée et la vitesse de transfert. Nous devrions maintenant avoir un clone du secteur MBR, stocké dans le fichier mbr.img. Évidemment, le suffixe de fichier n’a pas de signification réelle sur Linux, donc l’utilisation du « .img » l’un est complètement arbitraire: vous voudrez peut-être utiliser « .,dd  » pour laisser le nom de fichier refléter la commande qui a été utilisée pour créer le fichier.

dans l’exemple ci-dessus, nous utilisons l’option bs pour définir à la fois la quantité d’octets à lire et à écrire. Pour définir séparément les valeurs des deux opérations, nous pouvons utiliser les options ibs Et obs, qui définissent respectivement le nombre d’octets lus et écrits à la fois.,

sauter des blocs lors de la lecture et de l’écriture

Il y a des cas où nous pouvons vouloir ignorer une certaine quantité de tailles de blocs lors de la lecture ou de l’écriture dans un fichier. Dans de tels cas, nous devons utiliser les optionsskip Etseek, respectivement: elles sont utilisées pour ignorer les blocs de données spécifiés, au début de l’entrée et au début de la sortie.,

un exemple d’une telle situation est lorsque nous voulons sauvegarder/restaurer les données cachées entre leMBRet la première partition du disque, qui commence généralement au secteur2048, pour des raisons d’alignement. Les secteurs2047 de cette zone contiennent généralement, sur une configuration de partitionMBR, l’étape 1.5 du chargeur de démarrage grub. Comment Pouvons-nous demander à dd de cloner uniquement cette zone, sans inclure le MBR?, Tout ce que nous devons faire est d’utiliser l’option skip:

$ sudo dd if=/dev/sda of=hidden-data-after-mbr count=2047 skip=1

dans ce cas, nous avons demandé à dd de copier 2047 des blocs de 512 octets du fichier /dev/sda disque à partir du second., Dans la situation inverse, lorsque nous voulons restaurer les données clonées et les réécrire dans la même zone de disque, nous voulons utiliser l’option seek, qui ignore le nombre spécifié de blocs au début de la sortie:

$ sudo dd if=hidden-data-after-mbr of=/dev/sda seek=1

dans ce cas, nous avons demandé à dd de copier les données du hidden-data-after-mbr et de 3e528259a3″>

bloc périphérique à partir du deuxième bloc.

Compresser les données lues par jj

Comme nous l’avons déjà dit, l’une des opérations les plus courantes effectuées à l’aide de dd est de clonage de disque., La commande dd produit un clone parfait d’un disque, puisqu’il copie les périphériques de bloc octet par octet, donc le clonage d’un 160 GO de disque, produit une sauvegarde de la même taille. Lors du clonage d’un disque dans un fichier, Nous pouvons cependant canaliser les données lues par dd via des utilitaires de compression comme gzip, pour optimiser le résultat et réduire la taille finale du fichier., Disons par exemple que nous voulons créer un clone du périphérique bloc /dev/sda entier, nous pourrions écrire:

$ sudo dd if=/dev/sda bs=1M | gzip -c -9 > sda.dd.gz

dans l’exemple ci-dessus, nous avons demandé à dd de lire à partir du périphérique /dev/sda, et nous avons également changé la taille du bloc à 1M, ce qui peut nous donner de meilleures performances Nous avons ensuite acheminé les données, puis les avons traitées avec le programme gzip que nous avons appelé avec l’option -c (abréviation de --to-stdout) Et -9 qui demande au programme d’utiliser la compression maximale disponible., Enfin, nous avons redirigé la sortie vers le  » sda.dd.gz fichier ». En passant, si vous voulez en savoir plus sur redirections, vous pouvez lire notre article sur le sujet.

le nettoyage d’un bloc périphérique

un Autre dd de cas d’utilisation, est l’essuyage d’un appareil. Il existe de nombreuses situations dans lesquelles nous pouvons avoir besoin d’effectuer une telle opération: nous pouvons vouloir vendre un disque et nous assurer que son contenu précédent est complètement effacé pour des raisons évidentes de confidentialité, ou nous pouvons vouloir effacer les données avant de configurer le cryptage., Dans le premier cas, il suffirait d’écraser le disque avec des zéros:

$ sudo dd if=/dev/zero bs=1M of=/dev/sda

la commande ci-dessus indique à dd de lire à partir du périphérique /dev/zero qui fournit des caractères nuls et de les écrire sur les périphériques jusqu’à ce qu’il soit complètement rempli.

avant de configurer une couche de cryptage sur notre système, nous pouvons remplir le disque avec des données aléatoires à la place, pour rendre les secteurs its qui contiendront des données impossibles à distinguer des vides et éviter les fuites de métadonnées., Dans ce cas, nous voulons lire les données des périphériques /dev/random ou /dev/urandom

$ sudo dd if=/dev/urandom bs=1M of=/dev/sda

Les deux commandes nécessiteront un temps important pour terminer, en fonction de la taille et du type du périphérique bloc en question et de la source des données aléatoires utilisées, /dev/random étant plus lent (il bloque jusqu’à ce qu’il ne recueille pas assez de bruit environnemental), mais renvoyant des données aléatoires de meilleure qualité que /dev/urandom.,

la Conversion des données

Le conv options de dd est utilisé pour appliquer des conversions de données. Les options doivent être fournies avec une liste de symboles séparés par des virgules en tant qu’arguments. Voici quelques – unes des plus utilisées:

  • noerror – cela permet à dd de continuer même après une erreur de lecture;
  • notrunc – cette option indique à dd de ne pas tronquer le fichier de sortie;
  • sync-cette option a du sens surtout lorsqu’elle est utilisée avec noerror. Il demande à dd de tamponner tous les blocs d’entrée avec des NULs.,

un cas typique dans lequel nous pouvons vouloir exécuter dd avec l’optionconv=sync,noerror, est lors du clonage d’un disque qui contient des secteurs endommagés. Dans un tel cas, l’option noerror fera en sorte que dd continue à fonctionner même si un secteur ne peut pas être lu avec succès, et l’option sync fera en sorte que la quantité de données n’a pas été lue soit remplacée par NULs, de puisqu’il n’est pas possible de le lire).,

Conclusions

Dans ce tutoriel, nous avons appris à utiliser le très puissant commande dd. Nous avons vu certains des cas typiques dans lesquels le programme est utilisé, tels que le clonage de disque, et nous apprenons à connaître sa syntaxe et les options les plus importantes que nous pouvons utiliser pour modifier son comportement. Puisque dd est un utilitaire très puissant, il doit être utilisé avec une extrême attention: juste en changeant la cible d’entrée et de sortie, on peut, dans certaines situations, détruire complètement les données sur un disque.

Author: admin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *