GNU/Linux >> Tutoriels Linux >  >> Linux

5 exemples pratiques de la commande dd sous Linux

La commande dd sous Linux est un utilitaire pour copier et convertir des fichiers et a de nombreuses utilisations pratiques.

Il a été suggéré que le nom est dérivé d'une ancienne fonction IBM Job Control Language où dd signifiait « Définition de données ». Sous Linux, l'abréviation signifie "Data Duplicator" ou "Disk Dump" ou une variété d'autres allitérations selon votre source.

Cela lui a peut-être même valu le surnom poignant de "destructeur de données", ce qui m'amène à un point important. Veuillez faire preuve de prudence lors de la pratique de la commande dd.

Cette commande est capable de faire de sérieux dégâts. Assurez-vous de bien vérifier votre syntaxe pour éviter une erreur coûteuse. Vous ne voulez pas être la personne qui confond les noms de partition et regarde avec angoisse la destruction de sa partition racine et son remplacement par un fichier vierge.

Se familiariser avec la commande dd

Voici la syntaxe de la commande dd :

dd if=<filename> of=<filename> [options]

Il existe un large éventail d'utilisations pour cette commande, je vais présenter quelques approches courantes.

Médias physiques/clones de partition/sauvegardes

Dans la syntaxe ci-dessus, 'if' et 'of' sont respectivement pour le fichier d'entrée et le fichier de sortie. C'est la fonctionnalité de base de dd. Il duplique les données d'une source à une autre. Vous n'avez pas besoin d'utiliser un support physique avec dd.

Manipulation de texte

Il est possible d'utiliser stdin (entrée standard) à partir de votre clavier pour collecter les entrées et les pointer vers un fichier. Il est également possible de convertir rapidement la casse et une variété d'autres outils d'édition de texte utiles sont inclus dans la page de manuel.

J'ai mentionné IBM plus tôt en faisant allusion à la longue histoire de ce programme. L'une des fonctionnalités originales de cette commande était en fait centrée sur la conversion d'EBCDIDC, un schéma d'encodage créé par IBM, en ASCII.

Manipulation du système de fichiers

Vous pouvez également copier des fichiers avec, mais la commande cp est recommandée plutôt que dd pour cette application simple. Nous avons un article où vous pouvez en savoir plus sur la commande cp.

Quelques notes comportementales

Lors de la copie avec dd , vous devez également savoir que par défaut, il copiera le complete informations provenant d'une source spécifiée.

Cela signifie que si vous essayez de dupliquer une partition ou un disque, cela copiera également l'espace libre.

Ainsi, par exemple, si vous clonez un disque dur de 4 To, vous aurez besoin d'un lecteur de destination d'au moins 4 To pour éviter les fichiers tronqués et les erreurs. Rappelez-vous également que si le disque ne contient que 1 To de données, dd copiera toujours les 3 To d'espace restants. C'est une mauvaise décision qui fera perdre beaucoup de temps et de ressources.

Il existe certaines contraintes que nous pouvons ajouter à dd et d'autres mesures que nous pouvons prendre pour modifier ce comportement. Il existe en fait une quantité écrasante de contrôles qui peuvent être utilisés en conjonction avec dd. Je vais essayer d'aborder certaines de celles qui, à mon avis, pourraient être les plus utiles à nos lecteurs, mais le but de cet article est de donner une introduction à dd, et non de documenter toutes les fonctions possibles.

Attention ! Pour vous entraîner, utilisez une machine virtuelle

Je vous exhorte à conceptualiser votre objectif et à l'exécuter avec soin pour éviter de corrompre ou de détruire des fichiers importants. Évidemment, nous ne sommes pas responsables de la perte de vos informations. Si vous faites une erreur. Ne dites pas que nous ne vous avons pas prévenu.

Je vous recommande de vous entraîner sur une machine virtuelle factice pour vous familiariser avant d'essayer de modifier des actifs du "monde réel". En effet, la commande dd a la capacité de modifier et donc d'endommager votre système de fichiers si vous ne l'utilisez pas correctement.

Pour ce tutoriel, j'ai décidé d'essayer quelque chose en dehors de la famille Debian et j'ai créé une copie de Fedora 31 dans VirtualBox.

5 exemples pratiques de la commande dd

Avec les avertissements et quelques informations contextuelles à l'écart, nous sommes prêts à passer à certaines applications pour cette commande simple mais puissante.

Exemple 1 :cloner des disques

Cloner un disque sur un autre peut être très facile avec dd. Pour mon exemple, j'ai deux disques nommés "sda" et "sdb".

N'oubliez pas que "sda" tentera de se copier sur "sdb" en utilisant tout le contenu du lecteur, pas seulement les données.

Vous devez allouer suffisamment d'espace sur votre fichier de sortie pour tenir compte de l'espace inutilisé sur le secteur. Vous pouvez également choisir de repartitionner le lecteur à la taille exacte actuellement remplie par les données. Je recommanderais cette méthode. Cela réduira le temps nécessaire pour effectuer l'opération et créera un document plus utile.

Lorsque vous êtes prêt à cloner un disque, vous pouvez exécuter fdisk pour identifier vos disques, leurs partitions et leur capacité.

sudo fdisk -l 

L'exécution de cette commande répertorie les lecteurs et partitions disponibles et leurs tailles respectives. Cela peut être utile pour identifier correctement votre appareil cible.

Encore une fois, pour notre application, nous utilisons les noms "sda" et "sdb" et nous supposerons qu'ils ont la même taille.

[[email protected] ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

La sortie nous indique que l'écriture a réussi, nous pouvons ignorer le message indiquant qu'il ne reste plus d'espace sur "sdb".

Le récapitulatif répertorie également la quantité de données copiées, le temps que cela a pris et la rapidité avec laquelle elles ont été copiées. Nous examinerons cela un peu plus lorsque j'aborderai la taille des blocs.

Exemple 2 :Sauvegarde d'une partition de disque

Les étapes de clonage d'un périphérique et de sauvegarde d'une partition sont similaires. Au lieu que notre fichier cible soit un appareil, nous pouvons créer un fichier ".img" (image disque brute).

Supposons que notre système dispose d'une partition distincte pour notre répertoire personnel à "sda2" et que nous souhaitons la sauvegarder dans un fichier nommé "home_backup.img" dans notre répertoire actuel.

dd if=/dev/sda2 of=home_backup.img

C'est si facile! Alors maintenant, vous n'avez plus aucune excuse pour ne pas avoir une bonne routine de sauvegarde.

Bien sûr, c'était facile, mais il y a toujours plus à apprendre.

Traitement de la taille de bloc dans la commande dd

Avant de passer à l'exemple suivant, parlons de BS, ou taille de bloc. Si vous l'avez vu utilisé pour spécifier une valeur avec les commandes dd, vous vous demandez peut-être pourquoi il est là.

Si votre curiosité vous amène à une recherche sur Internet, alors je suis prêt à parier que vous êtes probablement toujours je me demande pourquoi il est là.

Je ferai de mon mieux pour donner une explication en langage clair. Les périphériques de bloc sont généralement des supports physiques avec un stockage fini.

Vous pouvez rechercher des informations sur un support tel qu'un disque en recherchant un bloc de données spécifique. Ainsi, par exemple, le système peut lire un CD-ROM et rechercher des informations à partir du bloc 500 (un nombre arbitraire). Il peut également être utilisé pour "réserver" des informations et peut-être utiliser des informations du bloc 500 au bloc 1500.

Ces blocs peuvent être segmentés de manière à rendre l'analyse du système efficace. Cela peut refléter l'espace de stockage du support ou les spécifications système standard auxquelles le support est susceptible d'être associé.

Je vais continuer avec l'exemple d'un CD-ROM qui a sa propre taille de bloc définie (2048). Chaque bloc doit avoir un maximum de 2048 octets. Même si un bloc ne contient que 100 octets de données, il occupera toujours les mêmes 2 048 octets.

Dans certains cas, vous souhaiterez peut-être définir la taille de bloc pour accélérer l'exécution de dd ou empêcher la corruption des données. Pour en revenir à notre exemple de CD-ROM, la création de blocs de taille différente pourrait provoquer des anomalies au moment de la lecture des données.

Si elle n'est pas définie, dd utilisera une taille de bloc de 512. Il s'agit de la plus petite taille de bloc qu'un disque dur typique peut lire.

Si votre support n'est pas limité à une certaine taille de bloc, vous pouvez probablement l'ajuster en toute sécurité pour les performances (temps d'écriture). Regardons quelques exemples.

Performance avec une taille de bloc non spécifiée

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img
[sudo] password for linuxhandbook: 
dd: writing to 'home_backup.img': No space left on device
31974953+0 records in
31974952+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 113.848 s, 144 MB/s

Performance avec une taille de bloc de 1024

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img bs=1024
[sudo] password for linuxhandbook: 
dd: error writing 'home_backup.img': No space left on device
15987477+0 records in
15987476+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 75.4371 s, 217 MB/s

Vous pouvez voir que le processus a été effectué à une vitesse plus rapide. Une autre exécution avec une taille de bloc de 4096 était plus rapide mais avec un débit de 327 Mo/s. La mise en cache du système peut également jouer un rôle dans la vitesse, mais c'est un sujet pour un autre jour.

Vous avez peut-être remarqué la variation du nombre d'enregistrements entrants et sortants. En effet, nous modifions la taille de chaque bloc et donc la capacité des blocs individuels, même si le fichier de sortie reste de la même taille. Pour cette raison, l'ajustement de la valeur bs peut avoir des conséquences imprévues. Par exemple, cela pourrait entraîner des écarts lors de l'exécution d'une somme de contrôle.

Exemple 3 :Supprimer des données et réinitialiser le disque

Vous souvenez-vous de tous les avertissements précédents ? Cette commande remplacera chaque bloc de 'sda' par des zéros.

dd if=/dev/zero of=/dev/sda

Comment cela marche-t-il? Essentiellement, identique à toutes les autres commandes in et out dd. Qu'est-ce que "/dev/zéro" ?

Il s'agit d'un pseudo-périphérique inclus dans les systèmes d'exploitation Unix/Linux qui écrira des zéros dans un fichier jusqu'à ce qu'il atteigne la fin du fichier.

Vous pouvez également utiliser « dev/random » qui génère des bits de données aléatoires. Cela peut être inutile si vous prévoyez d'utiliser un fichier image brut pour remplacer le contenu puisque l'utilisation de dd copiera déjà l'espace inutilisé.

Notez que certaines personnes malveillantes trompent les utilisateurs sans méfiance en exécutant cette commande dans divers forums Linux. Maintenant que vous savez ce que fait cette commande, vous ne serez plus la proie de cette mauvaise farce.

Exemple 4 :Créer un fichier .ISO à partir d'un CD/DVD

Vous pouvez copier directement depuis le lecteur de cd-rom si votre ordinateur en possède encore un. Plus tôt, j'ai mentionné que la taille d'octet standard d'un cd-rom est de 2048. Nous allons définir la taille d'octet pour qu'elle corresponde à celle-ci afin d'éviter les problèmes de conversion, puis ajouter quelques autres commandes.

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

Permettez-moi d'expliquer quelques choses. Avec conv=noerror , toutes les erreurs seront ignorées. Le programme se poursuivra jusqu'au bloc final sans s'arrêter. Cela ne s'arrêtera pas pour eux.

Lorsqu'il est utilisé en conjonction avec "noerror", "sync" garantit que tous les blocs de données manquants seront automatiquement complétés avec des informations nulles.

Cela signifie que les données existantes seront mappées aux mêmes emplacements, préservant probablement autant de contenu que possible.

Il est important de vous assurer que vos fichiers source et destination ont le même ensemble "bs" pour ces opérations, sinon ils n'auront pas les résultats escomptés.

Exemple 5 :Créer une clé USB amorçable

Vous pouvez utiliser dd pour créer une clé USB amorçable et c'est aussi simple que prévu. En fait, c'est l'une des utilisations les plus populaires de la commande dd.

Il y a une étape supplémentaire impliquée ici. Nous utilisons la commande mkfs pour créer le système de fichiers sur notre clé USB avant d'exécuter "dd".

Sans options, il utilise le système ext2 par défaut. Donc, en supposant que la clé USB que nous voulons préparer s'appelle "sdb" et que nous voulons changer le système de fichiers en ext4, nous exécuterions la commande suivante :

sudo mkfs.ext4 /dev/sdb

Si vous souhaitez utiliser avec un système Windows, vous pouvez remplacer la première partie de la commande par mkfs.ntfs.

Vous pouvez également utiliser la syntaxe suivante :

mkfs -t [for type] $filesystem.

Une fois le support de démarrage préparé, nous pouvons passer à notre commande dd.

dd if=someFile.iso of=/dev/sdb

Utilisez l'image montable .iso et copiez-la sur le nom de lecteur correspondant à votre périphérique USB.

Conclusion

Merci d'avoir lu. J'espère que vous avez apprécié cette introduction sur "dd". Il y a tellement de façons différentes d'utiliser cette commande. J'ai essayé de couvrir beaucoup d'exemples plus utiles. Si vous avez quelque chose que vous aimeriez voir ou une question directe, je serais ravi de vous aider. Faites-moi savoir ce que vous en pensez ci-dessous dans les commentaires.


Linux
  1. Commande cp sous Linux :7 exemples pratiques

  2. Commande d'arrêt de Linux :5 exemples pratiques

  3. 10 exemples pratiques de commandes Linux nm

  4. 7 Exemples de commandes Linux df

  5. 8 Exemples de commandes Linux TR

5 exemples pratiques de la commande Tail sous Linux

commande echo sous Linux :7 exemples pratiques

5 exemples pratiques de la commande Read sous Linux

Exemples essentiels de la commande ps sous Linux

Commande Ping pratique dans des exemples Linux

Exemples de commandes id sous Linux