Sauvegarde d'une machine virtuelle par snapshots LVM

Cédric TINTANET

Dans ce tutoriel nous allons voir les possibilités que nous avons sous Linux de sauvegarder une machine virtuelle Windows qui a été installée dans un volume logique LVM.
Commentez

- Titre : Sauvegarde d'une machine virtuelle par snapshots LVM

- Auteur : Cédric TINTANET

- Parution : 16 novembre 2008

- Mise à jour : 24 mars 2020

- Licence : Copyright ® 2008 TINTANET Cédric. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Quelques rappels sur la sauvegarde en général

- II-A. Les différents types de sauvegarde

- II-A-1. Sauvegarde sur bande ou cartouche numérique

- II-A-2. Sauvegarde sur CD / DVD / Disque dur

- II-A-2-a. Évolution du DVD

- II-A-3. Sauvegarde par Internet

- II-A-4. Le clonage

- II-B. Les différentes méthodes de sauvegarde

- II-B-1. Sauvegarde complète

- II-B-2. Sauvegarde incrémentale

- II-B-3. Sauvegarde différentielle

- II-C. Quelques logiciels de sauvegarde

- III. Introduction à LVM

- III-A. Quelques définitions à connaitre

- IV. Introduction à la cryptologie à clef publique

- V. Cas concret d'une sauvegarde de machine virtuelle installée dans un snapshot LVM

- V-A. Tutoriel

- V-A-1. Volumes logiques et snapshots

- V-A-2. Ntfsprogs et l'utilitaire ntfsclone

- V-A-3. Sauvegarde de la machine virtuelle Windows

- V-A-4. Restauration de la machine virtuelle Windows

- VI. Conclusion

- VII. Remerciements

I - Introduction

Dans un premier temps je ferai un rapide état des lieux des différents types et méthodes de sauvegarde. Ensuite je ferai une petite introduction sur LVM (Logical Volume Manager) ainsi qu'à la cryptologie. Enfin nous entrerons dans le vif du sujet en vous montrant un cas concret de sauvegarde de machine virtuelle Windows sous Linux. Bonne lecture.

II - Quelques rappels sur la sauvegarde en général

II-A - Les différents types de sauvegarde

II-A-1 - Sauvegarde sur bande ou cartouche numérique

Réputée pour sa fiabilité dans le temps, la cartouche a été adoptée par de nombreuses sociétés comme support de sauvegarde.
Lorsque le système d'information devient volumineux, la mise en place d'une robotique (baie de sauvegarde automatisée avec bras articulé pour placer les cartouches dans le lecteur) s'avère nécessaire.

II-A-2 - Sauvegarde sur CD / DVD / Disque dur

C'est une possibilité, mais les médias de sauvegarde tels que les disques compacts ou DVD sont réputés moins fiables que les bandes ou cartouches numériques. Donc moins utilisés en milieu professionnel.
Par contre pour le particulier, la sauvegarde sur DVD peut s'avérer judicieuse. Aujourd'hui presque tous les ordinateurs personnels sont équipés d'un graveur de DVD.
De plus les capacités de stockage de ces médias augmentent, et la dernière génération de DVD est capable de stocker jusqu'à 15,8 Go de données.
Donc pour un prix raisonnable le particulier pourra facilement sauvegarder ses données sur DVD.

II-A-2-a - Évolution du DVD

- La première version de DVD (le DVD-5) était capable de stocker jusqu'à 4,3 Go en simple couche.

- La deuxième version du DVD (le DVD-9) était composée de deux couches de stockage, ce qui lui a permis de pratiquement doubler sa capacité de stockage par rapport au DVD-5.

- On a vu également apparaître à partir du dvd-10 les DVD simple couche double face pour une capacité légèrement supérieure à celle du DVD-9 : 8,8 Go.

- Enfin la dernière évolution du DVD (le DVD-18) est un DVD double face double couche pour une capacité totale de 15,8 Go environ.

II-A-3 - Sauvegarde par Internet

L'augmentation de la bande passante nous permet aujourd'hui de réaliser de gros transferts par Internet.
Il devient alors possible de sauvegarder ses données vers un site distant, voire chez votre hébergeur si celui-ci vous fournit l'espace de stockage suffisant.
Bien sûr si vous pouvez sauvegarder vos données chez votre hébergeur, celles-ci deviendront disponibles alors à partir de n'importe quel ordinateur, ce qui peut être à la fois un avantage et un inconvénient :

- un avantage qui vous permettra d'accéder à vos données à partir de n'importe quel ordinateur dans le monde disposant d'une connexion Internet ;

- un inconvénient pour la confidentialité de ces données. On prendra donc soin de crypter les données à sauvegarder (par une clef de cryptage gpg, SSL, etc.) avant de les envoyer chez l'hébergeur.

II-A-4 - Le clonage

Le clonage d'une machine permet de faire une image de son disque dur ou d'une ou plusieurs partitions du disque dur.
On dit souvent par abus de langage que l'on fait un ghost de sa machine, abus de langage, car ghost est l'acronyme de General Hardware Oriented System Transfer qui est un logiciel de clonage développé par la société Symantec.
L'image pourra être stockée soit sur une partition cachée du disque dur (dans le cas du clonage d'une partition), soit sur un média de sauvegarde tel que le CD ou le DVD ou encore sur un serveur de stockage sur un réseau local.
Les administrateurs pourront se servir des images stockées sur les serveurs de stockage pour réaliser des installations automatiques de parcs de machines.

Vous trouverez une liste de logiciels de clonage à cette adresse :
Liste des logiciels de clonage

II-B - Les différentes méthodes de sauvegarde

Afin d'économiser de l'espace de stockage et de réduire les temps de sauvegarde, on peut choisir de faire une sauvegarde complète une seule fois et ensuite enregistrer uniquement les changements qui ont eu lieu depuis la dernière sauvegarde. Ce sont ces principes que je vais tout de suite détailler dans les paragraphes suivants.

II-B-1 - Sauvegarde complète

Il s'agit d'une sauvegarde intégrale des données où on recopie à l'identique toutes les données sur le média de sauvegarde. Elle est nécessaire pour que par la suite on ait la possibilité de réaliser des sauvegardes incrémentales ou différentielles.

II-B-2 - Sauvegarde incrémentale

Une sauvegarde incrémentale copie tous les fichiers nouveaux ou modifiés depuis la dernière sauvegarde que celle-ci soit incrémentale ou complète. Pour restaurer un système, on aura besoin de la sauvegarde complète ainsi que de toutes les sauvegardes incrémentales.

II-B-3 - Sauvegarde différentielle

Une sauvegarde différentielle copie tous les fichiers nouveaux ou modifiés depuis la dernière sauvegarde complète. Pour restaurer un système, on aura besoin de la sauvegarde complète et la dernière sauvegarde différentielle.

II-C - Quelques logiciels de sauvegarde

Dans le monde propriétaire

- Veritas Netbackup (aujourd'hui symantec netbackup).

- Data Protector (HP Data Protector).

- Legato Networker (http://fr.wikipedia.org/wiki/EMC_Legato_Networker).

Dans le monde du libre

- Mondorescue (http://www.mondorescue.org/).

- Rsync (ça n'est pas un vrai logiciel de sauvegarde, mais plutôt un logiciel de synchronisation de fichiers).

- Rdiff-Backup (logiciel de sauvegarde basé sur l'utilitaire rsync permettant de faire de la sauvegarde incrémentale « http://www.nongnu.org/rdiff-backup/ »).

- Bacula (http://fr.wikipedia.org/wiki/Bacula).

- Partimage (sauvegarde de partitions http://www.partimage.org/Index.fr.html).

III - Introduction à LVM

III-A - Quelques définitions à connaitre

Volume physique
Dans le jargon LVM, le ou les volumes physiques sont les supports de stockage physiques (en général des disques durs) que l'on utilisera dans un Volume Group.

Volume Group
Un volume group est constitué de plusieurs volumes physiques regroupés. La taille du volume group est la taille de l'ensemble des volumes dont il est constitué.

Volume logique
Un volume logique est une partie de l'espace d'un volume group, que l'on va utiliser pour y stocker des données. Il est possible de modifier la taille de ce volume logique, et sa taille maximale ne pourra bien sûr pas dépasser la taille de l'ensemble des volumes physiques qui forment le volume Group auquel il appartient.

Illustration du concept LVM

Snapshots
Les snapshots LVM permettent à un instant T de faire une photographie d'un volume logique (et surtout des données qui s'y trouvent). Le snapshot à l'instant T ne contient que des pointeurs sur les données du volume logique original. À l'instant T+1, le contenu du volume logique original aura changé, et le snapshot va donc contenir en termes de données les différences entre le moment T et le moment T+1. Le snapshot nous permet donc d'accéder aux données d'un volume logique à un instant T, ce qui peut être très utile pour les sauvegardes par exemple.
Le snapshot c'est un peu comme si vous possédiez un document papier dont vous savez pertinemment que le contenu sera (dans le futur) modifié par plusieurs personnes et que vous vouliez garder maintenant une trace de son contenu actuel en faisant une photocopie pour archive.
Le document original pourra donc être modifié, vous avez récupéré le contenu du document à l'instant T où vous l'avez photocopié.

IV - Introduction à la cryptologie à clef publique

Je vais essayer ici de faire une brève description de la cryptologie à clef publique.
Le cryptage à clef publique fonctionne avec deux clefs :

- une clef publique ;

- une clef privée.

Une entité (personne ou serveur) va générer une paire de clefs privée/publique.
La clef publique comme son nom l'indique pourra être distribuée aux entités qui souhaitent communiquer de façon confidentielle (cryptée) avec le propriétaire de la paire de clefs publique/privée.
La clef privée permettra de déchiffrer les messages qui l'auront été avec la clef publique, mais ce ne sera pas son unique fonction.
En effet le destinataire d'un message crypté pourra authentifier son émetteur grâce à un système de signature du message.
Pour expliquer le principe de signature, nous allons prendre deux entités A et B possédant chacune une paire de clefs publiques/privées.

- A génère sa paire de clefs publique/privée et enverra sa clef publique à B.

- B génère sa paire de clefs publique/privée et enverra sa clef publique à A.

- B doit envoyer un message crypté à A (il faut que A soit sûr que le message qu'il recevra provient bien de B).

- B va générer une signature du message qu'il va envoyer à A.
Pour cela il va calculer un checksum de son message et va le crypter à l'aide de sa clef privée.

- B va ensuite crypter le message qu'il va envoyer à A à l'aide de la clef publique de A.

- B va enfin envoyer le message crypté ainsi que la signature.

- A va recevoir le message crypté ainsi que la signature.

- A va dans un premier temps déchiffrer le message (envoyé par B) à l'aide de sa clef privée.

- A va calculer un checksum du message qu'il vient de décrypter et va décrypter la signature à l'aide de la clef publique de B.

- Si le checksum calculé juste au-dessus et le décryptage de la signature envoyée par B sont les mêmes alors A en déduira que c'est bien B qui a écrit le message.

La signature va permettre donc d'authentifier l'émetteur d'un message.

V - Cas concret d'une sauvegarde de machine virtuelle installée dans un snapshot LVM

Dans le paragraphe précédent, je parlais de snapshots LVM. Ce qui nous intéresse dans les snapshots c'est bien sûr de pouvoir faire une photo à l'instant T de contenu d'un volume logique.
Si ce volume logique contient une ou plusieurs partitions d'une machine virtuelle (car oui tout comme un disque dur on peut partitionner un volume logique), alors on obtiendra une photo à l'instant T du contenu de ses partitions dont on pourra se servir pour sauvegarder notre machine virtuelle.
Faire une sauvegarde de machine virtuelle à partir d'un snapshot a l'avantage de pouvoir minimiser les temps d'interruption de services.
Pourquoi minimiser ?
Tout simplement parce qu'il faudra s'assurer au moment où on réalise le snapshot, que les éventuelles bases de données qui fonctionnent sur notre machine virtuelle se trouvent dans un état cohérent.
On pourra choisir alors d'arrêter les bases de données des machines virtuelles le temps de la création du snapshot (qui est très rapide). Voici comment on pourrait voir les choses :

- un petit agent en écoute placé sur la machine virtuelle, pourra être contacté au moment de la sauvegarde par l'hyperviseur ;

- cet agent se chargera de l'arrêt des bases de données sur la machine virtuelle et informera l'hyperviseur dès qu'il aura fini son travail ;

- l'hyperviseur ayant reçu la confirmation de l'arrêt des bases sur la machine virtuelle va créer le snapshot ;

- une fois le snapshot créé, il n'y a plus de raisons que les bases de notre machine virtuelle ne soient pas redémarrées. L'hyperviseur va donc contacter l'agent afin que celui-ci s'occupe de le faire ;

- la sauvegarde pourra être réalisée à partir du snapshot de la machine virtuelle.

On aura ainsi minimisé le temps d'arrêt des bases sur la machine. Si on avait dû passer par une sauvegarde classique on aurait été contraint d'arrêter les bases de données pendant le temps de la sauvegarde qui lui est infiniment plus long que la création du snapshot.

L'agent en question devra sur la machine virtuelle inclure un mécanisme d'identification de la machine qui s'adresse à lui afin d'autoriser uniquement l'hyperviseur qui sera chargé de la sauvegarde à demander l'arrêt temporaire des services.
Ceci pourra passer par l'utilisation de certificats, ou d'une paire de clefs privée/publique (clefs openssl, voire gpg…).
On créera une paire de clefs (privée/publique) sur l'hyperviseur et la clef publique sera dispatchée sur les machines virtuelles.
Lorsque l'hyperviseur se connectera à l'agent (fonctionnant sur la machine virtuelle), celui-ci enverra un challenge sous forme de chaîne cryptée par la clef publique à l'hyperviseur.
Seule la clef privée (détenue par l'hyperviseur) pourra décrypter ce challenge.
Si l'hyperviseur décrypte correctement le challenge envoyé par l'agent (en considérant bien sûr que la clef privée n'existe que sur l'hyperviseur) le signe avec sa clef privée et le renvoie à l'agent alors celui-ci sera « quasi » sûr qu'il communique avec l'hyperviseur.
L'administrateur aura la charge d'appliquer les sécurités nécessaires afin que la clef privée stockée sur l'hyperviseur ne soit pas dupliquée sur d'autres machines.
On pourra également sur la machine virtuelle, réaliser un filtrage des requêtes d'arrêt de services par adresse IP et n'autoriser que l'IP de l'hyperviseur.
Voici, modélisés par des grafcets, le comportement de l'hyperviseur (celui qui sauvegardera la machine) et de l'agent fonctionnant sur la machine virtuelle :

Comportement de l'hyperviseur se connectant à l'agent

Comportement de l'agent sur la machine virtuelle

La programmation d'un tel agent dépasse le cadre de cet article, mais il n'est pas exclu qu'il fasse l'objet d'un prochain article.

V-A - Tutoriel

V-A-1 - Volumes logiques et snapshots

Nous entrons maintenant dans la partie technique.
Pour cela nous disposons d'un hyperviseur hôte (Xen, KVM peu importe) qui héberge une machine virtuelle Windows XP.
Pour simplifier, on considèrera que la machine en question est celle de Monsieur tout le monde et qu'il n'y a donc pas de services sensibles à arrêter lors de la création du snapshot de la machine.
On considèrera également que cette machine virtuelle ne dispose que d'un disque système et que ce disque est bien sûr un volume logique LVM que nous nommerons lvsysteme.
Ce volume logique appartiendra à un Volume Group nommé vgwinxp.
Après avoir installé notre machine, et avoir créé une partition système occupant toute la place du disque système essayons de voir plus en détail ce qui s'est passé sur notre volume logique lvsysteme.

fdisk -l /dev/mapper/vgwinxp-lvsysteme
Disk /dev/mapper/vgwinxp-lvsysteme: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/mapper/vgwinxp-lvsysteme1 * 1 2609 20956761 7 HPFS/NTFS

Nous pouvons constater qu'il existe dans notre volume logique une partition primaire de type NTFS qui occupe pratiquement l'intégralité de l'espace disponible.
A priori le système nous dit que l'on peut y accéder par le fichier périphérique suivant : /dev/mapper/vgwinxp-lvsysteme1.

Utilisons la commande ls pour vérifier la présence de fichier de type périphérique :

ls -l /dev/mapper/vgwinxp-lvsysteme1
Aucun fichier ou répertoire de ce type

Curieux … Il n'y est pas.

Explication
Par défaut le système ne va pas scanner la table des partitions d'un volume logique et ne va donc pas créer de fichier de type périphérique dans le répertoire /dev permettant d'y accéder.
C'est bien beau tout ça, mais comment faire alors pour avoir accès à la partition système de notre machine virtuelle à partir de l'hyperviseur ?
La commande kpartx va nous y aider.
Cette commande lit la table des partitions à partir d'un fichier périphérique spécifié (ici ce périphérique sera /dev/mapper/vgwinxp-lvsystème correspondant au volume logique sur lequel on a créé notre partition système pour Windows) et crée les fichiers périphériques dans le répertoire /dev si ceux-ci n'existent pas.

kpartx -a /dev/mapper/vgwinxp-lvsysteme
ls -l /dev/mapper/vgwinxp-lvsysteme1
brw-rw&#8212;- 1 root disk 254, 20 2008-04-11 12:32 /dev/mapper/vgwinxp-lvsysteme1

Oh joie nous avons enfin créé le fichier périphérique qui nous permettra directement d'accéder à la partition NTFS système de notre machine virtuelle à partir de l'hyperviseur.
Mais me direz-vous, « nous n'avons toujours pas utilisé les snapshots ??? » et je vous répondrai que c'est maintenant que nous allons le faire…

Le snapshot étant une image à l'instant T de notre volume logique, il contiendra donc une image à l'instant T de notre partition système Windows et, c'est la toute la magie de cette technologie, tout comme le volume logique original la commande kpartx nous permettra de créer le fichier de type périphérique dans le répertoire /dev pour accéder à l'image de cette partition NTFS contenue dans le snapshot.
Créons donc notre snapshot de volume logique :

#Je crée ici un snapshot de 10 Go de notre volume logique lvsysteme et je le nomme lvsnapwin
lvcreate -L10G -n lvsnapwin -s /dev/vgwinxp/lvsysteme

Le snapshot sera créé en quelques secondes ainsi que le fichier périphérique correspondant : /dev/mapper/vgwinxp-lvsnapwin. Relançons la commande fdisk, mais cette fois sur le snapshot :

fdisk -l /dev/mapper/vgwinxp-lvsnapwin
Disk /dev/mapper/vgwinxp-lvsnapwin: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/mapper/vgwinxp-lvsnapwin1 * 1 2609 20956761 7 HPFS/NTFS

Comme on s'en serait douté, le système nous dit qu'il a trouvé dans le snapshot du volume logique une partition de type NTFS.
En fait en créant un snapshot du volume logique, nous avons par la même occasion créé un snapshot de la partition système qu'il contient.
Utilisons kpartx tout comme il l'a été fait plus haut pour créer un nouveau fichier de type périphérique dans le répertoire /dev correspondant à ce snapshot de partition.

kpartx -a /dev/mapper/vgwinxp-lvsnapwin
ls -l /dev/mapper/vgwinxp-lvsnapwin1
brw-rw&#8212;- 1 root disk 254, 20 2008-04-11 12:32 /dev/mapper/vgwinxp-lvsnapwin1

Nous disposons donc du snapshot de notre partition système Windows et du fichier de type périphérique /dev/mapper/vgwinxp-lvsnapwin qui va nous permettre de l'exploiter.

V-A-2 - Ntfsprogs et l'utilitaire ntfsclone

Nous allons maintenant sauvegarder notre partition Windows système à partir de son snapshot. La partition à sauvegarder est de type NTFS.
Aujourd'hui Linux gère très bien les partitions NTFS et les outils qui le permettent sont tout à fait mûrs.
L'utilitaire ntfsclone faisant partie d'un ensemble d'utilitaires NTFS disponibles via ntfsprogs va permettre de réaliser cette sauvegarde.

ntfsclone est une commande qui comme son nom l'indique permet de cloner une partition NTFS.
On peut donc très facilement avec cet outil recopier un système de fichiers NTFS entier vers une partition vierge ou vers un fichier (qui pourra être compressé).
En cas de crash de la partition qui a été sauvegardée (la partition source), on pourra toujours grâce à ntfsclone restaurer notre partition à partir de sa sauvegarde.

Syntaxe de ntfsclone

- ntfsclone --save-image [options] <Partition_accueil_de_la_sauvegarde> <partition_ntfs_a_sauvegarder>

- ntfsclone --restore-image [options] <partition_ntfs_a_restaurer> <sauvegarde_de_la_partition>

Petit détail qui peut avoir son importance

Comme vous l'avez sans doute remarqué, le premier argument est toujours le fichier ou la partition sur lesquels les données vont être écrites, que ce soit dans le cas d'une sauvegarde ou d'une restauration et le dernier argument est toujours la partition ou le fichier dont les données vont être recopiées. Donc, faites attention à ne pas faire l'erreur de passer comme premier argument à ntfsclone la partition/le fichier source (dont les données vont être copiées), car ceci pourrait être fatal pour vos données.

V-A-3 - Sauvegarde de la machine virtuelle Windows

Nous choisirons ici de sauvegarder le snapshot de notre partition système Windows dans un fichier compressé. Pour cela nous allons utiliser la syntaxe suivante :

ntfsclone --save-image -o - /dev/mapper/vgwinxp-lvsnapwin1 | bzip -2 > /repertoire/winxp.img.bz2

Comme vous pouvez le constater, au lieu de diriger le résultat de ntfsclone vers un fichier ou une partition, nous le redirigeons vers un tube. De l'autre côté de ce tube l'utilitaire de compression bzip2 récupèrera les données, les compressera et les stockera dans le fichier winxp.img.bz2

Sauvegarde d'une partition NTFS dans un fichier compressé

Un indicateur de progression s'affichera alors tout au long de la sauvegarde de notre partition.
Si vous disposez d'un serveur NFS/SSH/SAMBA vous pourrez choisir de sauvegarder votre fichier compressé sur ce serveur et vous aurez ainsi réalisé une sauvegarde en réseau.
Au point où nous en sommes nous venons de faire une sauvegarde de la partition système de notre machine virtuelle, mais ça ne suffit pas.
Il vous faudra également sauvegarder le MBR (Master Boot Record) de votre machine virtuelle qui se trouve dans les 512 premiers octets du disque système qui contient le chargeur de démarrage de votre machine virtuelle ainsi que la table des partitions.
Pour sauvegarder le MBR nous allons utiliser la commande dd :

dd if=/dev/mapper/vgwinxp-lvsnapwin of=/repertoire/winxp.mbr bs=512 count=1

Ici on sauvegarde dans le fichier winxp.mbr les premiers 512 octets du disque système de notre Windows XP (là où se trouve le MBR).

Conseil d'ami

Je vous conseille vivement de jongler avec plusieurs fichiers de sauvegarde pour votre machine virtuelle.

Travailler avec trois fichiers de sauvegarde différents et faire un roulement sur ceux-ci vous permettra de toujours avoir une sauvegarde de réserve au cas où la sauvegarde du jour se serait mal passée et que le fichier généré serait corrompu et donc inexploitable pour une éventuelle restauration.

Exemple : votre sauvegarde se passe mal, et peu de temps après,le même jour, la machine virtuelle est corrompue par un virus.

Avec un seul fichier de sauvegarde, il nous sera impossible de restaurer la machine.

Avec trois fichiers de sauvegarde, on aura encore la possibilité de restaurer la machine avec le fichier de la veille.

Exemple de roulement

#Le lundi:
ntfsclone --save-image -o - /dev/mapper/vgwinxp-lvsnapwin1 | bzip -2 >/repertoire/winxp_1.img.bz2
#Le mardi:
ntfsclone --save-image -o - /dev/mapper/vgwinxp-lvsnapwin1 | bzip -2 >/repertoire/winxp_2.img.bz2
#Le mercredi:
ntfsclone --save-image -o - /dev/mapper/vgwinxp-lvsnapwin1 | bzip -2 >/repertoire/winxp_3.img.bz2
#Le jeudi (on écrase le premier fichier créé le lundi):
ntfsclone --save-image -o - /dev/mapper/vgwinxp-lvsnapwin1 | bzip -2 >/repertoire/winxp_1.img.bz2

V-A-4 - Restauration de la machine virtuelle Windows

Mettons-nous dans une situation critique.
Nous sommes lundi matin (on pourrait s'arrêter là, mais on va continuer…).
Vous ne disposez pas de raid sur vos volumes physiques (LVM) et malheureusement un crash disque inopiné vous fait perdre le volume logique qui contenait la partition système de votre machine virtuelle (adieu /dev/mapper/vgwinxp-lvsysteme).

Mais tout n'est pas si noir et un espoir subsiste, car vous disposez d'au moins un fichier de sauvegarde de votre machine virtuelle.
Bravo vous êtes un administrateur prévoyant. (Sinon ben… Game Over.)
Vous vous employez donc à recréer un volume group sur des disques sains :

vgcreate vgnewwinxp pv1 pv2 pv3 ... (pv comme physical volume lvm)

Et à l'intérieur de ce volume group vous allez recréer un volume logique de la même taille que celui que vous avez perdu :

Lvcreate -n lvsysteme -L taille vgnewwinxp

Créez maintenant votre partition système à l'intérieur même de votre volume logique grâce à fdisk ou encore parted (ou gparted la version graphique de parted).
Utilisez la commande kpartx comme indiqué au paragraphe IV-A-1 pour créer un fichier de type périphérique qui vous permettra d'y avoir accès depuis votre hyperviseur.

sudo fdisk -l /dev/mapper/vgnewwinxp-lvsysteme
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2e83731b.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won\'t be recoverable.

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4):1
First cylinder (1-1305, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 1305

Command (m for help): p

Disk /dev/mapper/vgnewwinxp-lvsysteme: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x2e83731b

Device Boot      Start         End      Blocks   Id  System
/dev/mapper/vgnewwinxp-lvsysteme1               1        1305    10482381   83  Linux

kpartx -a /dev/mapper/vgnewwinxp-lvsysteme
ls -l /dev/mapper/vgnewwinxp-lvsysteme1
brw-rw&#8212;- 1 root disk 254, 20 2008-04-11 15:32 /dev/mapper/vgnewwinxp-lvsysteme1

Maintenant que tout est prêt, il est grand temps de passer à la restauration de votre machine :

bunzip2 -c /repertoire/winxp_1.img.bz2 | ntfsclone --restore-image --overwrite
/dev/mapper/vgnewwinxp-lvsysteme1 -

Une fois de plus, on utilise un tube avec à l'entrée de ce tube le résultat de la décompression du fichier de sauvegarde et à la sortie du tube ntfsclone qui récupère ces données (décompressées) pour les restaurer sur /dev/mapper/vgnewwinxp-lvsysteme1.

Bravo vous venez de restaurer votre machine virtuelle, dans une partition créée dans un volume logique nommé lvsysteme appartenant au Volume Group vgnewwinxp.
Mais si vous avez bien tout suivi, vous saurez que ça ne suffira pas.
En effet vous venez de restaurer la partition système de votre machine virtuelle Windows, mais ça ne la rendra pas bootable pour autant, car il vous manque bien sûr le MBR (qui contient le lanceur de démarrage Windows).
Mais là encore rien ne vous échappe et vous avez sauvegardé le MBR de la machine originale dans un fichier et la commande dd va vous permettre de le restaurer comme ceci :

dd if=/repertoire/winxp_1.mbr of=/dev/mapper/vgnewwinxp-lvsysteme bs=512 count=1

Une autre façon de faire, peut-être plus propre, aurait été de booter sur un CD de Windows, lancer une console de récupération et d'utiliser la commande fixmbr pour régénérer un MBR tout neuf.
Ça y est votre machine virtuelle est prête à l'emploi et vous allez sans doute faire le bonheur de plein d'utilisateurs de votre entreprise qui se voyaient déjà au chômage technique. Avec un peu de chance, vous ferez même partie du tableau d'honneur des meilleurs employés du mois (ça existe quelque part ça ?), mais là je pense que je m'emballe un peu.

VI - Conclusion

Du fait des possibilités de snapshots offertes par LVM il peut être intéressant de choisir d'installer les partitions de nos machines virtuelles dans un ou plusieurs volumes logiques.
Il est aussi important de rappeler, que dans le cas que j'ai présenté, le snapshot nous a permis de sauvegarder notre machine en minimisant les interruptions de services.
En effet, une fois que l'on a obtenu un snapshot de machine virtuelle cohérent (avec des bases de données dans un état cohérent) la sauvegarde sera réalisée à partir du snapshot et la machine virtuelle pourra continuer à « vivre sa vie ».

Autre possibilité que je n'ai pas citée dans cet article
Il est possible de booter sur un snapshot. Ceci peut être intéressant, car vous obtenez donc un « clone » de votre machine virtuelle sur lequel vous pourrez réaliser des tests plus ou moins dangereux pour l'intégrité du système sans pour autant faire courir de risques à votre machine virtuelle de production originale.

Pourquoi avoir choisi pour ce tutoriel une machine virtuelle sous Windows avec des partitions NTFS me direz vous ?
Tout simplement parce que je trouvais intéressant de montrer qu'il existe des outils de gestion de partitions NTFS sympathiques sous Linux, mais j'aurais aussi bien pu vous montrer comment sauvegarder une machine virtuelle Linux dont la ou les partition(s) est/sont également contenue(s) dans un volume logique.
Bien sûr les outils de sauvegarde n'auraient pas été les mêmes, mais le principe serait resté le même puisqu'on aurait pu tout aussi bien se servir d'un snapshot.
Si vous êtes arrivé jusqu'ici, merci de m'avoir lu et j'espère que ces quelques lignes vous auront intéressé.

VII - Remerciements

Je tiens tout particulièrement à remercier gorgonite pour sa relecture orthographique.