Linux/Unix

dd (Disk Dump) : 7 exemples pratiques d’utilisation

dd ( Disk Dump) est un utilitaire puissant UNIX qui permet de de copier tout ou partie d’un disque par blocs d’octets (La petite unité de stockage d’un système de fichiers). Contrairement à la commande « cp », la commande « dd » permet de reproduire les bloc des disque.

La perte des données est une catastrophe, cela aura un impact financier sur les entreprises de toutes tailles et en tant que administrateur système cela peut coûter cher à votre travail. Ainsi la sauvegarder des donnée est une chose primordiale que vous devez faire en tant que administrateur système.

Dans cet article nous allons voir 7 exemples pratiques d’utilisation de la commande dd pour sauvegarder le système Linux.

Il faut faire attention quant à l’utilisation de la commande dd car vous risquez de perdre vos données.

Copier une partition de disque vers une autre du même disque

[root@server ~]# dd if=/dev/sdb1 of=/dev/sdb2 bs=512
1243137+0 enregistrements lus
1243137+0 enregistrements écrits
636486144 octets (636 MB) copiés, 30,3182 s, 21,0 MB/s

-if  (Input File) : indique la source, ici c’est la partition sdb1.
-of  (Output File) : indique la destination, ici la partition sdb2.
-bs  (Block Size) : Indique la taille du block.

Vous pouvez aussi ajouter le paramétré « conv=noerror » qui permet de continuer même en cas d’erreur :

[root@server ~]# dd if=/dev/sdb1 of=/dev/sdb2 bs=512 conv=noerror

N’oublier pas de changer l’UUID de l’un des partition pour éviter le conflit car copier une partition autre vers une partition copie aussi l’UUID. Ci-dessous les UUID des deux partition après avoir copier les données :

[root@server ~]# blkid 
/dev/sdb1: UUID="083604d6-ed62-43fe-8d49-3f830ba22bb3" TYPE="ext4" 
/dev/sdb2: UUID="083604d6-ed62-43fe-8d49-3f830ba22bb3" TYPE="ext4"
/dev/sdc1: UUID="083604d6-ed62-43fe-8d49-3f830ba22bb3" TYPE="xfs"
/dev/sde1: UUID="u4M1vo-z01R-4UGk-pz4V-pDOz-dLwK-c1N0Jc" TYPE="LVM2_member"

Vous pouvez changer l’UUID avec la commande tune2fs :

[root@server ~]# tune2fs -U random /dev/sdb2

[root@server ~]# blkid 
/dev/sdb1: UUID="083604d6-ed62-43fe-8d49-3f830ba22bb3" TYPE="ext4" 
/dev/sdb2: UUID="4f282bb3-6dd5-4032-8dd7-0c5dd5cfa8cc" TYPE="ext4"

Copier une partition de disque vers une autre d’un autre disque

[root@server ~]# dd if=/dev/sde1 of=/dev/sdf1
^C2600121+0 enregistrements lus
2600121+0 enregistrements écrits
1331261952 octets (1,3 GB) copiés, 17,3755 s, 76,6 MB/s

Noubliez pas de changer l’UUID de l’un des partitions pour éviter le conflit.

Cloner un disque dur en entier

Nous allons copier l’intégralité du disque (sde) vers au autre (sdf) :

[root@server ~]# dd if=/dev/sde of=/dev/sdf conv=noerror
41943040+0 enregistrements lus
41943040+0 enregistrements écrits
21474836480 octets (21 GB) copiés, 274,661 s, 78,2 MB/s

Créer une image d’un disque

Au lieu de copier un disque vers un autre, vous pouvez aussi crée une image d’un disque et le sauvegarder sur un support de stockage pour la restaurer après.
Je vais prendre un exemple pratique pour que puisiez bien comprendre :

J’ai un disque /dev/sdg ( dont la taille est 20G ) dans lequel j’ai créer une partition /dev/sdg1 dont la taille est 500Mo:

[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdg    8:96  0  20G   0  disk
└─sdg1 8:97  0  500M 0  part

Après avoir créé un système de fichier (ici ext4)  sur la partition et l’avoir monté ( sur /data ), j’y ai mis quelques données pour s’assurer si la restauration sera bien effectuée :

[root@server ~]# cp -r /etc/ /data
[root@server ~]# ls -lh /data/
total 5K
drwxr-xr-x. 76 root root 5,0K 16 juin  00:45 etc

Maintenant je crée une image du disque /dev/sdg et je vais la mettre dans la racine / :

[root@server ~]# dd if=/dev/sdg of=/image.iso
4194304+0 enregistrements lus
4194304+0 enregistrements écrits
2147483648 octets (20 GB) copiés, 13,4115 s, 160 MB/s

L’image a été bien créé :

[root@server ~]# du -sh /image.iso
2,0G    /image.iso

Remarquez que la taille de l’image iso égale la taille de disque (20G) et pas la taille de la partition (500M) car j’ai fais l’image de l’a totalité du disque et pas seulement la partition.

je vais maintenant restaurer cette image sur un nouveau disque /dev/sdd :

[root@server ~]# lsblk
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
sdd 8:48 0 20G 0 disk
[root@server ~]# dd if=/image.iso of=/dev/sdd
4194304+0 enregistrements lus
4194304+0 enregistrements écrits
2147483648 octets (20GB) copiés, 30,8078 s, 69,7 MB/s

Je vais maintenant vérifier l’état la restauration  :

[root@server ~]# lsblk
sdd               8:48   0   20G  0 disk
└─sdd1            8:49   0  500M  0 part

Comme vous pouvez le remarquer la partition sdd1 a été créé automatiquement avec une taille de 500Mo exactement comme celle de sdg1.

Et les donnée ont bien été restauré :

[root@server ~]# mount /dev/sdd1 /data/

[root@server ~]# ls -lh /data/
total 18K
drwxr-xr-x. 76 root root 5,0K 16 juin 00:45 etc

Sauvegarder le MBR d’un disque dur :

La taille du MBR est 512 octet , la commande ci-dessous permet de copier les premier 512 octet du disque et les sauvegarde dans un fichier nommé MBR :

[root@server ~]# dd if=/dev/sdg of=/MBR bs=512 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 0,0147203 s, 34,8 kB/s

count=1 : count indique le nombre de bloc ( ici nous avons indiqué un seul bloc )

Sauvegarder le boot loader d’un disque dur :

Le chargeur de boot est situé dans les premiers 446 octets donc :

[root@server ~]# dd if=/dev/sdg of=/Bootloader bs=446 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
446 octets (446 B) copiés, 0,0335509 s, 13,3 kB/s

Sauvegarder la table des partitions d’un disque dur

La taille de la table des partition  est 64 octets et située après les 446 octets du chargeur de boot ainsi il faut indiquer à la commande « dd » d’éviter les premiers 446 octet . Cela est possible avec l’option skip :

[root@server ~]# dd if=/dev/sdg of=/PartitionTable bs=64 count=1 skip=446
1+0 enregistrements lus
1+0 enregistrements écrits
64 octets (64 B) copiés, 0,0189608 s, 3,4 kB/s

Comme vous pouvez le remarquer « dd » a copier seulement les premiers 64 octets  : 64 octets (64 B) copiés, 0,0189608 s, 3,4 kB/s

 

 

 

 

Laisser un commentaire

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