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
Apache : Apprendre à créer des virtual Hosts
Transfère des fichiers sous linux : scp, tftp et rsync
Iptables : 12 commandes à connaître
Le fonctionnement du routeur
Fail2Ban : How to protect Linux services