Comment la commande DD fonctionne dans Linux avec des exemples

Comment la commande DD fonctionne dans Linux avec des exemples

DD est un utilitaire très puissant et utile disponible sur les systèmes d'exploitation UNIX et UNIX. Comme indiqué dans son manuel, son objectif est de convertir et de copier des fichiers. Sur les systèmes d'exploitation Unix et Unix comme Linux, presque tout est traité comme un fichier, même les appareils de blocs: cela rend DD utile, entre autres choses, pour cloner les disques ou effacer les données. Le dd L'utilitaire est disponible hors de la boîte 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 administration du système Linux.

Dans ce tutoriel, vous apprendrez:

  • Comment utiliser DD
  • Comment modifier le comportement du programme en utilisant certaines des options les plus couramment utilisées


Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution
Logiciel Aucun logiciel spécial n'est nécessaire pour suivre ce tutoriel sauf DD
Autre Familiarité avec l'interface de la ligne de commande et les redirections
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Utilisation de base

La syntaxe de base de dd est très simple. Par défaut, le programme se lit entrée standard et écrit à sortie standard. Nous pouvons cependant spécifier une alternative saisir et sortir fichiers en utilisant respectivement le si et de Options de ligne de commande. Ici, DD diffère de la grande majorité des commandes Shell, car n'utilise pas la norme --option ou -o Syntaxe pour les options.



Voyons un exemple d'utilisation de DD. L'un des cas d'utilisation les plus typiques pour l'utilitaire est la sauvegarde de l'enregistrement de démarrage principal: le premier secteur sur un héritage Mbr système partitionné. La durée de ce secteur est généralement 512 octets: il contient l'étape 1 du chargeur de démarrage et la table de partition de disque. Supposons que nous voulons sauvegarder le Mbr 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'invocation DD réelle avec la commande sudo, afin d'exécuter la commande avec des privilèges administratifs. Ceci est nécessaire pour accéder au / dev / sda bloquer le dispositif. Nous avons ensuite invoqué DD en spécifiant la source d'entrée avec le si option et le fichier de sortie avec de. Nous avons également utilisé le bs et compter Options pour spécifier respectivement la quantité de données qui doivent être lues à un moment, ou la taille du bloc, et la quantité totale de blocs à lire. Dans ce cas, nous aurions pu omettre le bs option, depuis 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 enregistre en 1 + 0 enregistre 512 octets copiés, 0.000657177 S, 779 Ko / s

La sortie ci-dessus nous montre la quantité d'enregistrements lus et écrits, la quantité de données copiée, le temps dans lequel la tâche a été terminée et la vitesse de transfert. Nous devrions maintenant avoir un clone du Mbr secteur, stocké dans le mbr.IMG déposer. De toute évidence, le suffixe de fichier n'a pas de véritable signification 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 utilisée pour créer le fichier.

Dans l'exemple ci-dessus, nous utilisons le bs Option pour définir à la fois la quantité d'octets qui devraient être lus et écrire à la fois. Pour définir des valeurs séparément pour les deux opérations, nous pouvons utiliser le SCI et obob options à la place, qui définissent, respectivement, la quantité d'octets lus et écrits à la fois.

Sauter des blocs lors de la lecture et de l'écriture

Il y a des cas dans nous pouvons vouloir ignorer une certaine quantité de tailles de blocs lors de la lecture ou de l'écriture à un fichier. Dans de tels cas, nous devons utiliser le sauter et chercher Options, respectivement: ils sont utilisés 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 le Mbr et la première partition sur le disque, qui commence généralement au secteur 2048, pour des raisons d'alignement. Le 2047 Les secteurs de cette zone contiennent généralement, sur un héritage Mbr Configuration de la partition, l'étape 1.5 du chargeur de démarrage Grub. Comment pouvons-nous demander à DD de cloner ce domaine, sans inclure le Mbr? Tout ce que nous devons faire est d'utiliser le sauter option:

$ sudo dd if = / dev / sda de = couvert-data-after-mbr = 2047 skip = 1

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

$ sudo dd if = Hidden-data-after-mbr de = / dev / sda Seek = 1

Dans ce cas, nous avons demandé à DD de copier des données caché-data-après-MBR Et pour l'écrire sur le / dev / sda Appareil de bloc à partir du deuxième bloc.



Compression des données lues par DD

Comme nous l'avons déjà dit auparavant, l'une des opérations les plus courantes effectuées avec DD est le clonage du disque. La commande DD produit un clone parfait d'un disque, car il copie les périphériques de bloc d'octet par octet, donc cloner un disque de 160 Go, produit une sauvegarde de la même taille exacte. Lors du clonage d'un disque à un fichier, nous pouvons cependant tuer les données lues par DD, mais les utilitaires de compression comme gzip, Pour optimiser le résultat et réduire la taille du fichier final. Disons par exemple que nous voulons créer un clone de l'ensemble du périphérique de bloc de dev / sda, 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 de l'appareil / dev / sda, et nous avons également changé la taille du bloc en 1 m, ce qui peut nous donner de meilleures performances dans une telle situation. Nous avons ensuite tué les données, en les traitant davantage avec le gzip programme que nous avons invoqué avec le -c (court pour --to-stdout) et -9 Option qui demande au programme d'utiliser la compression maximale disponible. Enfin, nous avons redirigé la sortie vers le «SDA.dd.Fichier GZ. Au fait, si vous voulez en savoir plus sur redirections Vous pouvez lire notre article sur le sujet.

Essuyer un appareil de bloc

Un autre cas d'utilisation DD 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 de confidentialité évidentes, ou nous pouvons vouloir effacer les données avant de configurer le cryptage. Dans le premier cas, il serait suffisant pour écraser le disque avec des zéros:

$ sudo dd if = / dev / zero bs = 1m de = / dev / sda

La commande ci-dessus demande à DD de lire à partir du périphérique / dev / zéro qui fournit des caractères nuls et de les écrire sur les appareils jusqu'à ce qu'il soit complètement rempli.

Avant de configurer une couche de chiffrement sur notre système, nous pouvons vouloir remplir le disque avec des données aléatoires à la place, pour rendre les secteurs de ITS qui contiendront les données indiscernables des fuites de métadonnées vides et éviter les fuites de métadonnées. Dans ce cas, nous voulons lire les données du / dev / aléatoire ou / dev / urandom dispositifs:

$ sudo dd if = / dev / urandom bs = 1m de = / dev / sda

Les deux commandes nécessiteront beaucoup de temps pour terminer, selon la taille et le type du dispositif de bloc en question et la source de données aléatoires utilisées, / dev / aléatoire être plus lent (il bloque jusqu'à ce qu'il ne recueille pas suffisamment de bruit environnemental), mais renvoyant des données aléatoires de meilleure qualité que / dev / urandom.



Conversion de données

Le convocation Les options de DD sont utilisées pour appliquer les conversions de données. Les options doivent être fournies avec une liste de symboles séparés par des virgules comme arguments. Ici, certains des plus utilisés:

  • Noerror - Ceci utilise DD continue même après qu'une erreur de lecture est rencontrée;
  • NOTRUNC - Cette option demande à DD de ne pas tronquer le fichier de sortie;
  • Sync - Cette option a un sens surtout lorsqu'il est utilisé avec Noerror. Il demande à DD de remplir tous les blocs d'entrée avec NULS.

Un cas typique dans lequel nous pouvons vouloir exécuter DD avec le conv = sync, noerror L'option, c'est lorsque le clonage d'un disque contient des secteurs endommagés. Dans un tel cas le pas d'erreur L'option fera continuer à fonctionner DD même si un secteur ne peut pas être lu avec succès, et le synchronisation L'option sera effectuée pour que la quantité de données n'ait pas été lue son remplacement par Nuls, Pour que la durée des données soit conservée même si les données réelles sont perdues (car il n'est pas possible de les lire).

Conclusions

Dans ce tutoriel, nous avons appris à utiliser la commande DD très puissante. Nous avons vu certains des cas typiques dans lesquels le programme est utilisé, comme le clonage du disque, et nous apprenons à connaître sa syntaxe et les options les plus importantes que nous pouvons utiliser pour modifier son comportement. Étant donné que DD est un utilitaire très puissant, il doit être utilisé avec une attention extrême: simplement 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.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Comment cloner un système Linux
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Téléchargement Linux
  • Clone partition sur Linux
  • Boucles imbriquées dans les scripts bash
  • Comment doubler Kali Linux et Windows 10