Création de l'image d'une partition ou d'un DVD
sous Linux avec l'utilitaire dd

L'utilitaire dd de Linux :

L'utilitaire dd de Linux, présent dans toutes les distributions, permet de copier des données, bloc par bloc, d'un périphérique vers un autre. Un "périphérique" peut être :

Au niveau du disque dur, ce qui est appelé "bloc" par dd est en réalité 2 secteurs du disque, c'est à dire 1ko (un secteur étant un ensemble insécable de 512 octets, accessible "d'un coup" par la tête de lecture du disque dur). L'utilitaire dd permet donc de réaliser une image "physique" d'une partition, en copiant tous ses secteurs un par un. Cela permet de sauvegarder l'intégralité d'une partition, quelque soit le système de fichier présent sur la partition (FAT32, Ext2, Ext3, NTFS, etc ...)

 

Application de dd : sauvegarde et restauration du secteur boot du disque dur :

Le secteur boot du disque dur est le premier secteur du disque en LBA. C'est à ce secteur boot que le BIOS passe la main au démarage du PC, après avoir testé le matériel. C'est également dans ce secteur que LILO est installé (si vous avez choisi une installation de LILO dans le MBR). Comme tous les secteur d'un disque dur, le secteur boot a une taille de 512 octets.

Pour sauvegarder le secteur boot sous Linux avec l'utilitaire dd, la ligne de commande est :

dd   if=/dev/hda   of=/home/secteur_boot.dd   bs=512   count=1

On obtient alors un fichier /home/secteur_boot.dd d'une taille de 512 octets, contenant la valeur des 512 octets du secteur boot du disque dur /dev/hda

Pour restaurer le secteur boot sous Linux avec l'utilitaire dd, la ligne de commande est :

dd   if=/home/secteur_boot.dd   of=/dev/hda   bs=512   count=1

Le paramètre bs ("Bloc Size") de dd définie la taille en octets des blocs manipulés (lus ou écrits), et le paramètre count permet de définir le nombre de bloc à copier. Par défaut, la taille d'un bloc est de 1ko pour dd.

 

Sauvegarde de toute une partition avec l'utilitaire dd :

Bien que l'utilitaire dd réalise des images parfaites du disque dur, il présente 2 inconvénients :

Une des conséquences de ces remarques est que le fichier image créé par dd sera très grand : de la taille de la partition. Par exemple, pour une parttion de 5Go, le fichier image fera 5Go QUELQUE SOIT LE CONTENU DE LA PARTITION (qu'elle soit pleine à 98% ou à 1% le fichier image aura la même taille) : le fichier généré par dd est "brut" (non compressé), et représente dans l'ordre l'ensemble des secteurs de la partition.

Pour diminuer la taille de l'image, nous allons la compresser avec gzip. Les utilitaires dd et gzip peuvent utiliser l'entrée et la sortie standard pour recevoir et transmettre le flux de données qu'ils traitent : ils pouront donc être enchaînés avec des tubes sur la ligne de commande pour se transmettre les données.

 

Création d'une image compressée :

La ligne de commande suivante réalise une image compressé de la partition /dev/hda1, et la met dans le fichier compressé /mnt/hdb5/sauvegarde.gz :

dd   if=/dev/hda1   |   gzip   -v6   |   dd   of=/mnt/hdb5/sauvegarde.gz

Grâce à la compression par gzip, la taille du fichier image sera environ égale à la moitié de la taille de la partition.

 

Restauration d'une partition à partir de son image .gz :

La restauration est environ 3 fois plus rapide que la création (10 minutes par Go environ). La ligne de commande suivante restaure la partition /dev/hda1 qui a été sauvegardée précédemment :

zcat   /mnt/hdb5/sauvegarde.gz   |   dd   of=/dev/hda1

L'utilitaire zcat lit un fichier compressé .gz, et envoie le résultat de la décompression sur sa sortie standard. Grâce au tube, ce flux de données est redirigé vers l'entrée standard de dd, qui copie alors les informations bloc par bloc sur le périphérique /dev/hda1 : ainsi, chaque secteur de la partition /dev/hsa1 retrouve sa valeur d'origine, qu'il avait avant la sauvegarde.

Remarques :
 

 

Avantage de l'utilisation de dd sous Linux par rapport à Drive Image sous DOS :

Comme nous sommes obligés de faire les sauvegardes et les restaurations sous Linux (et que nous le faisons très volontier :-), nous bénéfitions de tous les avantages du système Linux lors de la création des images (avantages que nous n'avions pas en bootant sur une disquette contenant seulement Drive Image), et notament :

 

Comparaison de la taille des images, pour une même partition, entre Drive Image et gzip :

J'ai sauvegardé la partition de mon disque dur contenant Linux Red Hat 9 avec les 2 méthodes : Drive Image sous DOS, puis copie physique avec dd (compressé par gzip) sous Linux. La taille totale de la partition est de 3.5 Go.

Le fichier image réalisé avec Drive Image 3.0 sous DOS a une taille de 1.7 Go
Le fichier image réalisé par dd et compressé avec gzip a une taille de 1.5 Go

L'image réalisé par dd sous Linux est donc plus petite que l'image créée par Drive Image sous DOS.

Pour finir, ne me demandez pas quelle méthode j'ai définitivement adoptée pour sauvegarder régulièrement mes partitions, je vous laisse deviner : Drive Image sous DOS, ou dd sous Linux ?

 

Comment sauvegarder la partition d'une machine sur une autre machine, grâce à NFS ?

Il arrive parfois qu'on n'ait pas assez de place sur un disque dur pour y créer sa propre image. Par exemple, on a un ordinateur possédant un seul dirque dur de 4Go plein à 98% : il est alors impossible d'enregistrer une image du disque (ou d'une partition) sur le disque local. La solution est alors de profiter de la place libre sur un disque installé sur un autre ordinateur, et de sauvegarder l'image par le réseau. Pour transférer l'image d'un PC à l'autre à travers le réseau, nous allons ici utiliser NFS.

 

Configuration de base

Voici la configuration (simplifiée) de mon réseau : il est constitué de 2 machines, fonctionnant toutes les deux sous Linux :

L'ordinateur Asus fonctionne sous Linux Red Hat 9.0 (mais le principe décrit ici reste valable pour des distributions Linux plus récentes), et possède un disque dur amovible (monté sur un tiroir) avec une partition /dev/hdb5 destinée à recevoir les fichiers images des partitions des différentes machines du réseau.

L'ordinateur Alpha fonctionne sous Linux RedHat 7.2 (mais le principe décrit ici reste valable pour des distributions Linux plus récentes). On veut sauvegarder la partition /dev/hda1 de l'ordinateur Alpha sur la partition /dev/hdb5 de l'ordinateur Asus.

Pour créer un lien entre les deux machines, nous allons utiliser le système de fichier réseau NFS, qui va permettre à Alpha de mounter dans son arborescence un répertoire de Asus. La machine Alpha est ici le client NFS, et la machine Asus est le serveur NFS (Asus met son disque dur à la disposition de Alpha).

Commençons par créer un nouveau répertoire image_dd à la racine de l'arborescence Linux sur chacune des machines Alpha et Asus.

cd /
mkdir image_dd

 

Configuration du serveur NFS

Sur le serveur Asus il faut mounter la partition /dev/hdb5 dans le répertoire image_dd, puis partager ce répertoire par NFS. Pour cela nous allons rajouter une ligne dans deux fichiers de configuration de Linux :

Dans le fichier /etc/fstab il faut rajouter la ligne suivante :

/dev/hdb5     /image_dd     ext2     defaults     1     1

Dans le fichier /etc/exports il faut rajouter la ligne suivante :

/image_dd     (rw)

Remarques diverses :

 

Configuration du client NFS

Pour mounter la partition /dev/hdb5 de Asus (le serveur NFS) sur Alpha (le client NFS) il faut taper la ligne de commande suivante sur le client Alpha :

mount   -t   nfs   192.168.0.3:/image_dd    /image_dd

Dans cette ligne, l'adresse ip 192.168.0.3 est l'adresse ip du serveur NFS.

 

Sauvegarde d'une partition de Alpha en créant le fichier image sur Asus

Une fois NFS installé et configuré, pour sauvegarder la partition /dev/hda1 de Alpha en créant le fichier image directement sur la partition /dev/hdb5 de Asus (sans faire une image en local), il suffit de taper la ligne de commande suivante sur le client Alpha (comme vu précédemment) :

dd   if=/dev/hda1   |   gzip   -v6   |   dd   of=/image_dd/sauvegarde.gz

Le répertoire /image_dd du client Alpha est "relié" grâce à NFS à la partition /dev/hdb5 du serveur Asus. En d'autres termes, la partition /dev/hdb5 de Asus est mountée dans le répertoire /image_dd de Alpha (le répertoire /image_dd de Alpha est le point de mountage de la partition /dev/hdb5 de Asus).

 

Restauration d'une partition sur Alpha

Enfin, pour restaurer une partition sur l'ordinateur Alpha, alors que le fichier image de cette partition est enregistré sur l'ordinateur Asus, il faut taper la ligne de commande suivante sur le client NFS Alpha :

zcat   /image_dd/sauvegarde.gz   |   dd   of=/dev/hda1

Ici encore le répertoire /image_dd de Alpha représente le point de mountage de la partition /dev/hdb5 de Asus.

Le grand avantage de cette méthode de sauvegarde par le réseau est avant tout la possibilité de sauvegarder des disques dur qui sont pleins et qui ne possède pas suffisamment de place libre pour enregistrer leur propre fichier image. En contre parti, cette méthode sera plus lente qu'une sauvegarde en local.