dd sur Linux : clone, sauvegarde et copie de partition de disque, SSD

Bloqueur de pub détectée - Vous bloquez l'affichage des publicités.
Pour soutenir le site, merci de bien vouloir laisser les publicités s'afficher.

Plus d'informations : Comment désactiver les bloqueurs de publicité sur un site internet.

dd (data dump) est une commande Linux qui permet de copier des partitions de disques.
On peut donc l'utiliser dans le cadre de clone de disque ou encore pour effectuer des copies de disque ou de partition de disque.
Enfin on peut aussi spécifier un fichier en sortie afin de créer une image de disque.

dd peut être utilisé pour des tâches telles que la sauvegarde du secteur de démarrage d'un disque dur et l'obtention d'une quantité fixe de données aléatoires.
Le programme dd peut également effectuer des conversions sur les données au fur et à mesure de leur copie, y compris la permutation de l'ordre des octets et la conversion vers et depuis les codages de texte ASCII et EBCDIC.

Voici comment utiliser dd pour cloner ou sauvegarder, copier des partition de disque.

dd sur Linux : clone, sauvegarde et copie de partition de disque, SSD

dd sur Linux : clone, sauvegarde et copie de partition de disque

Voici l'utilisation basique de dd :

dd if=<source> of=<cible>

On utilise donc une source et une cible pour spécifier l'ordre de la copie.

La source et la destination peuvent être un disque dur, une partition de disque un DVD-Rom mais aussi un fichier.

  • Dans le cas d'un disque, ce sera donc : /dev/sda, /dev/sdb
  • Avec une partition de disque : /dev/sda1, /dev/sda2, /dev/sdb1

Suivre alors cet article :

Il faut donc bien faire attention dans la source et la destination car si vous inversez, cela écrase les données existantes. Vous risquez alors de perdre des données.

Cloner un disque, SSD

Cloner un disque dur revient à copier le contenu de ce dernier d'un disque ou SSD source vers un disque de destination.
Avec dd, c'est extrêmement simple.
Pour cloner le disque /dev/sda vers le disque /dev/sdb, on l'utilise comme ceci :

dd if=/dev/sda of =/dev/sdb

Il existe un article complet pour cloner un disque ou SSD sur Linux avec dd :

cloner un disque sur Linux avec dd

Créer une image de disque

On peut ensuite créer une image de disque.
Cela consiste à copier l'intégralité d'un disque ou d'une partition de disque vers un fichier.
On peut ensuite restaurer le contenu des données vers un autre disque.

Par exemple pour copier tout le contenu du disque /dev/sda vers le fichier partition.img :

dd if=/dev/sda of=~/partition.img

Bien sûr, on peut très bien ne sauvegarder qu'une partition de disque.
Il suffit de spécifier son numéro :

dd if=/dev/sda1 of=~/partition.img

Enfin pour restaurer l'image et sauvegarde de disque à partir du fichier vers /dev/sdb :

dd if=~/partition.img of=/dev/sdb

Par exemple, ci-dessous, on utilise dd pour copier la partition EFI vers un fichier. Cela permet d'effectuer une sauvegarde de la partition avant modification.
On voit que le fichier .img est alors reconnu comme tel par la commande file.

Créer une image de disque avec dd sur Linux

Là aussi, un article existe :

Créer un fichier ISO avec dd

De la même manière, on peut créer un fichier ISO d'un DVD-Rom, CD-Rom avec dd.
C'est exactement le même principe avec en source le disque amovible et en destination le fichier iso.

dd if=/dev/cdrom of=~/image-cdrom.iso bs=2048 conv=notrunc

Vider le contenu d'un disque

Vous souhaite vendre votre PC et pour cela vider le contenu entier.
Cela est aussi possible avec dd.
Ainsi pour remplacer tous les secteurs d'un disque ou partition par des zéro :

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

Ou encore, on peut aussi écrire des données aléatoires dans le disque :

dd if=/dev/urandom of=/dev/sda

Enfin on peut alors créer une boucle afin d'effectuer plusieurs passage pour s'assurer que la récupération de données est impossible.
Par exemple pour 5 passages consécutifs :

for passage in `seq 5`; do dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc; done

Paramètres de la commande dd

Comme toutes commandes Linux, dd propose plusieurs options et paramètres.
Pour afficher la liste des commandes :

dd --help

Les plus importantes :

  • bs=OCTETS lire et écrire jusqu'à OCTETS octets à la fois (défaut: 512);
  • neutralise ibs et obs
  • cbs=OCTETS convertir OCTETS octets à la fois
  • conv=CONVS convertir le fichier selon la liste des symboles séparés par des virgules
  • count=N ne copier que N blocs d'entrée
  • ibs=OCTETS lire jusqu'à OCTETS octets à la fois (512 par défaut)
  • if=FICHIER lire FICHIER au lieu de l'entrée standard (stdin)
  • iflag=ATTRS lire selon la liste de symboles séparés par des virgules
  • obs=OCTETS écrire OCTETS octets à la fois (512 par défaut)
  • of=FICHIER écrire dans FICHIER au lieu de la sortie standard (stdout)
  • oflag=ATTRS écrire selon la liste de symboles séparés par des virgules
  • seek=N se déplacer de N blocs de taille « obs » au début de la sortie
  • skip=N ignorer N blocs de taille « ibs » au début de l'entrée
  • status=QUELS les renseignements à afficher sur la sortie d'erreur standard :
    • « none » supprimer tout sauf les messages d'erreurs,
    • « noxfer » supprimer les statistiques de transfert final
    • « progress » montrer les statistiques de transfert périodique

conv

Le paramètre conv propose beaucoup d'options dont voici la liste :

  • ascii de l'EBCDIC vers l'ASCII
  • ebcdic de l'ASCII vers l'EBCDIC
  • ibm de l'ASCII vers l'EBCDIC alternatif
  • block remplir les enregistrements terminés par une nouvelle ligne par des espaces jusqu'à la taille « cbs »
  • unblock remplacer les espaces en fin d'enregistrements de taille « cbs » par une nouvelle ligne
  • lcase transformer les majuscules en minuscules
  • ucase transformer les minuscules en majuscules
  • sparse essayer de chercher plutôt qu'écrire la sortie pour les blocs
  • d'entrée NUL
  • swab inverser chaque paire d'octets en entrée
  • sync remplir chaque bloc lu par des NUL jusqu'à la taille « ibs » ; avec
  • « block » ou « unblock », remplir avec des espaces au lieu de NULL
  • excl échouer si le fichier de sortie existe déjà
  • nocreat ne pas créer le fichier de sortie
  • notrunc ne pas tronquer le fichier de sortie
  • noerror continuer même après des erreurs de lecture
  • fdatasync écrire physiquement les données en sortie avant la fin
  • fsync identique, mais écrire aussi les métadonnées

dd prendre d'autres paramètres comme :

Pour copier, disque dur sur disque dur à l'aide de la commande dd donnée ci-dessous, l'option sync vous permet de tout copier à l'aide d'E / S synchronisées.
Enfin noerror permet de continuer en cas d'erreur lors de la copie par dd.

dd if = /dev/sda of = /dev/sdb conv=noerror,sync

Enfin on peut utiliser status=progress pour afficher la progression avec de la vitesse de transfert et de copies.

bs - block size

bs (pour block size) indiquen à dd combien de secteurs doivent être copiés à la fois, que ce soit pour l'entrée, la sortie ou les deux.
Par défaut, la plupart des versions de dd utilisent une taille de bloc de 512 octets à la fois pour l'entrée et la sortie.

Ce paramètre influe sur la vitesse de copie des données.

Avant 1999 lorsque la plupart des disques durs avaient une taille de secteur de 512 octets, mais ces dernières années, la plupart des disques durs ont un taille de secteur d'au moins 4 Ko (4 096 octets).
Ce changement peut sembler insignifiant, mais peut conduire à d'énormes inefficacités lorsqu'il est combiné au fait que de nos jours, de nombreux disques durs grand public ont plus d'un téraoctet de capacité.
Lorsque vous traitez avec un téraoctet ou plus de données, vous voulez vraiment vous assurer de choisir une taille de bloc optimale.

Quelle est la meilleur valeur de bs ?
Pour de meilleurs performances, il faut régler la valeur bs sur la taille du cache disque.
Pour l'obtenir :

sudo hdparm -i /dev/sda

Mais on peut aussi utiliser ce script pour calculer la meilleure valeur de bs.
Ce dernier affiche le débit pour différentes valeurs bs de dd.
On multiple facilement le débit par 1000 avec une bonne valeur de bs.

Comment trouver la meilleure valeur bs de la commande dd

Enfin on indique la taille du bloc dans dd de cette manière :

  • bs=4k pour un bloc de 4 ko
  • bs=1M pour un block de 1 Mo

Par exemple :

dd if = /dev/sda of = /dev/sdb conv=noerror,sync bs=4G

Liens

Vous avez trouvé cet article utile et interressant, n'hésitez pas à le partager...

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article dd sur Linux : clone, sauvegarde et copie de partition de disque, SSD mais vous n'avez pas trouvé la solution à votre problème...
Suivez ces articles du forum pour trouver une réponse ou demandez à votre tour de l'aide sur le forum