Du physique au virtuel avec « Mondo Rescue »

Mondo restaurationQuand on décide de virtualiser, se pose inévitablement le problème de la reprise des serveurs existants. La manière la plus naturelle d’envisager les choses consiste à se retrousser les manches et refaire une installation toute propre dans une machine virtuelle, après une bonne sauvegarde des données et de la conf, cela va de soi. Cette méthode présente le gros avantage de permettre de faire un peu de ménage, en prenant les choses calmement et sans pression.

Mais comme diraient mes amis « perlistes »… « perliens »… « perleurs »…bref… qui parlent Perl courrament  :

« There’s More Than One Way To Do It  » (TIMTOWTDI).

A l’extrême, une autre façon consiste à faire un bon « disk dump – dd » du disque vers un fichier « raw »   (ie par ex : # dd if=/dev/sda of=/chemin/fichier.raw). Ce fichier sera ensuite utilisé comme disque virtuel. Je n’ai jamais testé, mais je ne vois pas pourquoi ça ne fonctionnerait pas, à condition bien sûr, que le serveur d’origine n’intègre pas de matériels trop exotiques. Cependant, un des avantages de la virtualisation, lié à l’allocation dynamique de l’espace de stockage, est perdu. En effet, l’espace disque libre est « dumpé » et occupera de la place sur le serveur final. Paradoxal non ? Même si le procédé pourrait être amélioré en utilisant « partimage », pour gérer un peu mieux l’espace non occupé, il faut bien avouer que ce procédé demeure quelque peu « bourrin ».

Entre les deux, je vous propose d’explorer une piste nommée « Mondo ».

« Mondo Rescue »  est un utilitaire, sous licence GPL, qui permet de créer, sur des supports variés (CD, DVD, bande, montage réseau ou disque dur), une image complète ou partielle d’un système Linux.  A l’instar de Ignite sous HP-UX ou Ghost sous Windows.

Son premier atout, est qu’il s’installe sur le système et permet de créer l’archive à chaud. L’intégralité de la migration pourra se dérouler avec un serveur physique fonctionnel. Ce dernier sera arrêté au dernier moment, quand la machine virtuelle sera capable de prendre le relai.

Son deuxième atout est sa capacité à créer une image « iso » bootable et compressée, dont la fonction est de restaurer notre système en s’adaptant au nouveau matériel. A l’inverse de « dd » ou de « partimage », qui réalisent des copies physiques de blocs du système de fichier, Mondo re-crée le partitionnement mémorisé, y restaure les fichiers sauvegardés et en dernier lieu, réinstalle le « bootloader ».

Avant d’aller plus loin, j’attire votre attention, chers lecteurs, sur le fait que la solution « mondo » n’est pas fiable à 100%.  Il n’est pas rare, dans le cas de partitionnements un peu complexes (basés sur LVM entre autres), que ce dernier s’emmêle les pinceaux et donne envie irresistible de s’arracher les cheveux (pour peu qu’il nous en reste !). Je ne vais pas vous infliger le refrain « je ne suis pas responsable bla bla bla… », mais faites tout de même gaffe en production. Si je devais qualifier cette solution en quelques mots, je dirais qu’elle est performante mais reste assez artisanale. Ceci dit, si je prends la peine d’écrire ce billet, c’est qu’elle présente un intérêt (enfin, j’espère) et qu’elle peut tout de même rendre de fiers services.

 

Installation

 

Le site officiel fournit  les paquets pour de nombreuses distributions. Sous Debian, il est, en plus, possible d’utiliser les dépôts :

deb ftp://ftp.mondorescue.org/debian X.0 contrib

ou X est le numéro de version ( 4 pour Etch, 5 pour Lenny, 6 pour Squeeze).

Par exemple, pour l’installer sous Squeeze :

# echo « deb ftp://ftp.mondorescue.org/debian 6.0 contrib »  > /etc/apt/source.list.d/mondo.list

# apt-get update

# apt-get install mondo

 Note pour Squeeze : Mondo utilise les outils mkisofs pour la génération des images iso et cdrecord pour la gravure de CD. Ces outils ont été respectivement remplacés dans Squeeze, par  genisoimage et wodim. Il est possible de s’en sortir (pas très proprement), en créant des liens symboliques :

# ln -s /usr/bin/genisoimage /usr/bin/mkisofs
# ln -s /usr/bin/wodim /usr/bin/cdrecord


Il m’est arrivé de rencontrer quelques problèmes avec « Mindi » . Pour la création du boot de l’image iso, un ramdisk est utilisé, sur lequel on est parfois à l’étroit.  On peut l’augmenter en dé-commentant et en affectant une plus grande valeur au paramètre « EXTRA_SPACE » du  fichier de configuration de « Mindi »   (/etc/mindi/mindi.conf).

 

Utilisation

 

Il y a encore « More Than One Way » pour utiliser Mondo. La première se fait par une interface « curses », affichée par défaut, lors de l’exécution de mondoarchive sans paramètre.

Mondo Rescue

La deuxième est bien entendu en ligne de commande :

# mondoarchive -O -p nomarchive -i -I / -d /destination -E /destination -T /temporaire -S /Scratchdir -s taille

  • -O : pour créer une archive, par opposition à -V pour une vérification,
  • -p nom : pour donner un nom à l’archive ( mondoarchive par défaut),
  • -i : pour générer une ou des images iso,
  • -I : pour spécifier de départ de l’arborescence à sauvegarder. « / » est par défaut, mais nous pouvons décider de ne sauvegarder qu’un bout de l’arborescence,
  • -d : l’emplacement des fichiers finaux (iso),
  • -E : Les répertoires à exclure. /tmp, /proc, /sys et les montages médias sont exclus par défaut, il convient, en plus, d’exclure le répertoire destination de l’image,
  • -T : Le répertoire temporaire. Par défaut, Mondo choisira la partition disposant du plus grand espace disponible,
  • -S   : Le répertoire du scratchdisk, c’est à dire le répertoire dans lequel seront construites les images pour la génération des fichiers iso, comme pour le répertoire temporaire, Mondo choisira par défaut la partition disposant du plus grand espace libre,
  • -s : La taille maximale des fichiers iso. Si le but est de graver ces fichiers, il faudra choisir une taille adéquate en fonction du média utilisé  : ~ 700 Mo (700m) pour un CD, ~4.7 Go (4.7g) pour un DVD. Autant d’images que nécessaire seront générées.

Un exemple :

# mondoarchive -O -p serveur1 -i -I / -d /home/joel/mondo -E /home/joel/mondo -s 10g

Les images iso porteront le nom « serveur1-x.iso » (x = numéro incrémentiel) est seront placées dans le répertoire « /home/joel/mondo« . Ce répertoire est exclu de l’archive  et les images ne feront pas plus de 10 Go.

Les autres options sont laissées par défaut.

Ensuite, c’est le moment, tant connu des informaticiens, de laisser bosser la machines et d’aller vaquer à d’autres occupations.

Quelques « occupations » plus tard, l’image générée peut être utilisée pour installer la machine virtuelle, en la transférant sur l’hyperviseur  et en l’utilisant comme CDRom virtuel par exemple.

Au boot et après une détection du nouveau matériel, l’interface propose diverses options, dont l’une est « Automatique » pour une réinstallation à l’identique, une autre, « Manuelle », permet, entre autre, d’aller trifouiller le partitionnement et l’adapter –  Très utile quand la taille de l’espace disque allouée à la VM diffère du disque original.

Les données restaurées et avant l’écriture du secteur d’amorçage, il est possible de prendre la main dans un chroot, afin de vérifier le bon montage des partitions, modifier si nécessaire les fichiers de configuration et si besoin regénérer le initramfs  pour qu’il prenne en compte le nouveau matériel.

Pour terminer, je vous propose d’illustrer cet article par un screencast. Il reprend la migration d’un serveur physique sous Debian Squeeze vers une machine virtuelle Proxmox VE / KVM ( précédent article).

Click here to view the video on YouTube.

 

Sources :

 

 

 

Vus : 3293
Publié par Jopa : 29