La commande Linux dd est l'un des utilitaires les plus puissants qui peut être utilisé de différentes manières. Cet outil est principalement utilisé pour copier et convertir des données, il signifie donc duplicateur de données. Cet outil peut être utilisé pour :
- Sauvegarder et restaurer un disque dur entier ou une partition.
- Créer un système de fichiers virtuel et des images de sauvegarde de CD ou de DVD appelés fichiers ISO
- Copiez des régions de fichiers de périphérique bruts comme la sauvegarde de MBR (enregistrement de démarrage principal).
- Conversion de formats de données tels que ASCII en EBCDIC
- Convertir les minuscules en majuscules et vice versa.
Seul le superutilisateur peut exécuter cette commande. Vous devez être très prudent lorsque vous utilisez cette commande car une mauvaise utilisation peut entraîner une énorme perte de données. Ainsi, certaines personnes considèrent cet outil comme un destructeur de données.
Syntaxe de la commande dd
L'utilisation de base de la commande dd est plutôt simple car elle ne prend que deux arguments :if =pour spécifier le fichier d'entrée et de =pour spécifier le fichier de sortie. Les arguments de ces options peuvent être des fichiers ou des appareils de blocage. Cependant, je ne recommanderais pas d'utiliser dd pour copier des fichiers car cp le fait de manière beaucoup plus simple. Cependant, vous pouvez l'utiliser pour cloner un disque dur. La syntaxe est
dd if=<source file name> of=<target file name> [Options]
Nous apprendrons différentes options en parcourant des exemples de commandes dd.
1. Sauvegarder et restaurer un disque entier ou une partition
Il est possible de sauvegarder toutes les données d'un disque/partition entier sur un autre disque/partition. Pas une simple copie en tant que commande cp mais une copie de taille de bloc.
un. Sauvegardez tout le disque sur le disque
Vous pouvez copier toutes les données (disque entier) depuis le disque /dev/sda
vers /dev/sdb
. dd ne sait rien du système de fichiers ou des partitions ; il copiera simplement tout depuis /dev/sda
vers /dev/sdb
. Vous devez indiquer la taille du bloc à copier à chaque fois avec bs
option. Ainsi, cela clonera le disque avec les mêmes données sur la même partition.
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s
Cela ne fonctionne que si le deuxième appareil est aussi grand ou plus grand que le premier. Sinon, vous obtenez des partitions tronquées et sans valeur sur la seconde. Ici, if représente le fichier d'entrée, of représente le fichier de sortie et bs représente la taille du bloc (nombre d'octets à lire/écrire à la fois). Assurez-vous d'utiliser des tailles de bloc en multiples de 1024 octets, ce qui équivaut à 1 Ko. Si vous ne spécifiez pas de taille de bloc, utilisez une taille de bloc par défaut de 512 octets. La conv
paramètre de valeur pas d'erreur permet à l'outil de continuer à copier les données même s'il rencontre des erreurs. L'option de synchronisation permet d'utiliser des E/S synchronisées.
b. Création d'une image disque dd (image de fichier)
Vous pouvez créer une image d'un disque ou une image de fichier. La sauvegarde d'un disque sur une image sera plus rapide que la copie des données exactes. De plus, l'image disque rend la restauration beaucoup plus facile.
# dd if=/dev/sda of=/tmp/sdadisk.img
Vous pouvez stocker le fichier de sortie où vous voulez mais vous devez donner un nom de fichier se terminant par .img
rallonge comme ci-dessus. Au lieu de /tmp/sdadisk.img
, vous pouvez le stocker par exemple dans /sdadisk.img
si vous voulez.
c. Création d'une image disque compressée
Parce que dd crée le contenu exact d'un disque entier, cela signifie qu'il prend trop de taille. Vous pouvez décider de compresser l'image disque avec la commande ci-dessous
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
Le tuyau | L'opérateur transforme la sortie de la commande de gauche en entrée de la commande de droite. Le -c
l'option écrit la sortie sur la sortie standard et conserve les fichiers d'origine inchangés.
d. Sauvegardez une partition ou clonez une partition sur une autre
Au lieu d'un disque entier, vous ne pouvez sauvegarder qu'une simple partition. Il vous suffit d'indiquer le nom de la partition dans le fichier d'entrée comme ci-dessous
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Cela synchronisera la partition /dev/sda1
vers /dev/sdb1
. Vous devez vérifier que la taille de /dev/sdb1
doit être supérieur à /dev/sda1
. Ou vous pouvez créer une image de partition comme ci-dessous
# dd if=/dev/sda1 of=/tmp/sda1.img
e. Restauration d'un disque ou d'une image de partition
Enregistrer un disque ou une partition aide à restaurer toutes les données, s'il y a un problème avec notre disque d'origine. Pour restaurer, vous devez inverser le fichier d'entrée avec le fichier de sortie indiqué lors de l'opération de sauvegarde comme ci-dessous.
# dd if=/tmp/sdadisk.img of=/dev/sda
Vous récupérerez les données qui étaient présentes avant l'opération de sauvegarde et non après l'opération
e. Restauration de l'image compressée
Vous devez d'abord indiquer le fichier compressé et le fichier de sortie qui est le disque compressé avant.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
L'option -d ici est de décompresser. Notez le fichier de sortie. Vous pouvez monter le disque restauré pour voir le contenu. Notez que vos données seront ajoutées après la dernière opération de sauvegarde de compression.
2. Création de systèmes de fichiers virtuels/images de sauvegarde de CD ou de DVD sous forme de fichiers iso
Vous pouvez avoir besoin de créer un système de fichiers virtuel sur Linux pour certaines raisons, comme la création d'une machine virtuelle sur votre hôte Linux. Vous pouvez également avoir besoin de créer une image iso de sauvegarde d'un CD ou d'un DVD
un. Création d'un système de fichiers virtuel
Un système de fichiers virtuel est un système de fichiers qui existe dans un fichier, qui à son tour existe sur un disque physique. Vous pouvez en avoir besoin pour créer par exemple un périphérique de swap ou de boucle supplémentaire ou une machine virtuelle. Nous avons besoin de /dev/zero
qui est un fichier utilisé pour créer un fichier sans données mais avec la taille requise (un fichier avec tous les zéros). En d'autres termes, cela créera un fichier de données avec tous les zéros dans le fichier qui donnera la taille d'un fichier.
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
L'option count
fait référence au nombre de blocs d'entrée à copier. Combiné avec la valeur de taille de bloc, il indique la taille totale à copier. Par exemple bs=1024k
et count=500
donner un size=1024K*500 =524288000 bytes =524MB
Vérifions maintenant la taille de notre fichier
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
Vous pouvez voir que nous avons créé notre système de fichiers virtuel avec la taille indiquée. Vous pouvez maintenant l'utiliser pour créer un périphérique en boucle ou un disque virtuel ou autre chose.
b. Modifier les 512 premiers octets d'un fichier avec des données nulles
Si pendant l'opération vous indiquez un fichier de sortie existant, vous perdrez ses données. Pour certaines raisons, vous pouvez avoir besoin de remplacer une taille de bloc du fichier de sortie.
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
Le notrunc
L'option fait référence à ne pas tronquer le fichier, remplacer uniquement les 512 premiers octets, s'il existe. Sinon, vous obtiendrez un fichier de 512 octets
c. Création d'une image iso de sauvegarde d'un CD ou d'un DVD
Vous vous demandez peut-être pourquoi ne pas simplement copier le contenu de votre CD dans un répertoire. Comment géreriez-vous le secteur de démarrage d'un CD ? Vous ne pouvez pas trouver cela en tant que fichier sur l'appareil car ce n'est que le premier secteur. Parce que dd copie secteur par secteur, d'autre part, il copiera également cette information.
# dd if=/dev/cdrom of=/mycd.iso
Vous devez savoir que vous devez utiliser la boucle -o loop
option, qui vous permet de monter un fichier comme n'importe quel périphérique normal. Donc, pour monter /mycd.iso
sur le /mnt/cd
répertoire, procédez comme ci-dessous
# mount -o loop /mycd.iso /mnt/cd
d) Créer une clé USB amorçable
Supposons que nous ayons téléchargé l'image iso centos ici dans ce répertoire "~/Downloads/".
if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso - le fichier d'entrée se trouve dans le chemin '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'
of=/dev/sdb - le fichier de sortie est dans le chemin '/dev/sdb'
bs=1M - Lire depuis '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso' et écrire dans '/dev/sdb' 1 Mo de données à la fois.
# dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M
3. Sauvegarde et restauration du MBR
Le chargeur de démarrage GRUB est le plus souvent stocké dans le MBR du lecteur amorçable. Le MBR constitue les 512 premiers octets du disque, permettant jusqu'à 466 octets de stockage pour le bootloader. L'espace supplémentaire sera utilisé pour stocker la table de partition de ce lecteur. Si le MBR est corrompu, nous ne pourrons pas démarrer sous Linux.
un. Sauvegarde du MBR
Parce que le MBR constitue les 512 premiers octets du disque, nous avons juste besoin de copier cette taille de bloc
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
Avec le count=1
et bs=512
, seuls 512 octets seront copiés, ce qui correspond à la taille de notre MBR.
Vous pouvez afficher le MBR enregistré avec la commande od qui vide les fichiers en octal et autres formats comme ci-dessous
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
l'option sélectionne les caractères nommés et -x
sélectionne les unités hexadécimales de 2 octets
b. Sauvegarde des données de démarrage du MBR à l'exclusion de la table de partition
Les données du MBR 512 octets sont situées dans le premier secteur du disque dur. Il se compose d'un bootstrap de 446 octets, d'une table de partition de 64 octets et d'une signature de 2 octets. Cela signifie que nous pouvons exclure la table de partition et la signature des octets tout en sauvegardant le MBR en ne conservant qu'une taille de bloc égale à la taille du bootstrap.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. Restauration du MBR à partir de l'image MBR
Vous pouvez restaurer votre MBR comme indiqué sur les commandes précédentes avec
# dd if=/tmp/sdambr.img of=/dev/sda
3. Conversion des formats de données
Si un fichier d'entrée utilise un jeu de caractères qui n'est pas le jeu de caractères natif de l'ordinateur hôte, l'opérateur d'importation doit effectuer une conversion. Par exemple, si ASCII est le format natif des chaînes sur votre ordinateur hôte, mais que le fichier de données d'entrée représente des chaînes utilisant EBCDIC, vous devez convertir EBCDIC en ASCII et vice versa.
un. Convertir le format de données d'un fichier d'EBCDIC en ASCII
S'il y a un fichier ebcdic avec vous, principalement récupéré à partir de systèmes mainframe, alors, vous souhaitez les convertir en ASCII pour apporter des modifications à l'aide d'éditeurs de texte sur des serveurs UNIX
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
La conv
le paramètre de valeur est maintenant ascii car nous convertissons EBCDIC en ASCII
b. Convertir le format de données d'un fichier d'ASCII en EBCDIC
Après avoir modifié la version ASCII et une fois cela fait, vous pouvez la reconvertir en EBCDIC pour qu'elle soit utilisée par votre application.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
La conv
le paramètre de valeur est maintenant e bcdic parce que nous convertissons d'ASCII en EBCDIC. Si vous remplacez simplement un nombre particulier d'octets par un nombre équivalent d'octets ayant des caractères différents, la conversion sera fluide et l'application lisant le fichier ne devrait avoir aucun problème.
4. Conversion de la casse d'un fichier
La commande DD peut également être utilisée pour une chose étonnante. Il peut convertir tout le texte (alphabets) d'un fichier en majuscules ou minuscules et vice versa. Pour l'exemple ci-dessous, nous aurons un fichier pour les tests.
# cat file10 test dd convert
un. Convertir un fichier en majuscule
Comme notre exemple de fichier texte est en minuscules, nous allons le convertir en majuscules
# dd if=~/file10 of=~/file20 conv=ucase
La commande créera le nouveau fichier indiqué. Voyez cela maintenant conv
l'option prend ucase valeur. Vérifions le résultat
# cat file20 TEST DD CONVERT
b. Convertir un fichier en minuscules
Maintenant, nous allons faire l'opération inverse qui convertira en minuscules
# dd if=~/file20 of=~/file30 conv=lcase
Vérifiez que nous utilisons lcase de conv
option pour convertir des majuscules en minuscules.
# cat file30 test dd convert
La commande dd ne convertit pas les noms de fichiers, uniquement son contenu.
Conclusion
La commande dd, bien qu'il ne s'agisse pas techniquement d'une commande d'archivage, est similaire à certains égards car elle peut copier une partition ou un disque entier dans un fichier et vice versa.