Outils pour utilisateurs

Outils du site


clonage_os_invite_vmware_server

VMware: cloner un OS invité

Objectif

Vous avez transpiré pour, par exemple, mettre au point votre serveur web sécurisé comme OS invité dans une machine virtuelle VMware, et vous voudriez en avoir un autre identique en plus, mais vous ne voulez pas recommencer toute la configuration.

Comment faire pour recopier (dupliquer, cloner,…) votre OS invité et sa machine virtuelle, afin d'avoir un OS invité identique supplémentaire?

Mode opératoire

J'ai fait cela sur une suse 10.2 KDE, installée comme OS invité sur une autre suse 10.2 KDE “hôte”.

Soit l'OS invité à copier, appelé “ORIG” (pour “OS origine”) et l'OS copié, appelé “DEST” (pour “OS destination”).

Avec la console vmware, et avec l'OS invité d'origine en fonctionnement: effacez son snapshot s'il y en avait un, et arrêtez-le.

Arrêtez la console vmware (je ne sais pas si c'est indispensable, mais ça ne fait pas de mal). Rappelez-vous aussi que s'il y a un autre OS invité en fonctionnement, l'arrêt de la console ne l'arrête pas.

Sous l'OS hôte, dans une console sous le bon login (le vôtre si l'OS invité vous appartient), vous vous placez dans le répertoire qui contient toutes les machines virtuelles. Si vous avez accepté le répertoire par défaut lors de l'installation de VMware Server, c'est “/var/lib/vmware/Virtual Machines”. Chez moi, c'est /osvirtuels (ce qui est un raccourci maladroit, parce que c'est la machine qui est virtuelle, et pas l'OS…):

$ cd /osvirtuels

Il faut maintenant recopier proprement le répertoire /osvirtuels/ORIG avec tout son contenu sur /osvirtuels/DEST, en transmettant intégralement les droits des fichiers et répertoires (ne le faites pas avec konqueror, et encore moins avec du copier-coller):

$ cp -av ORIG DEST

(si vous avez construit un disque virtuel de 40Go, ça va durer un certain temps…).

Après la copie, if faut corriger tous les noms de fichiers. Le contenu de /osvirtuels/DEST doit être quelque chose comme (ici, c'est un disque virtuel de 40 Go):

nvram
ORIG-f001.vmdk
ORIG-f002.vmdk
ORIG-f003.vmdk
ORIG-f004.vmdk
ORIG-f005.vmdk
ORIG-f006.vmdk
ORIG-f007.vmdk
ORIG-f008.vmdk
ORIG-f009.vmdk
ORIG-f010.vmdk
ORIG-f011.vmdk
ORIG-f012.vmdk
ORIG-f013.vmdk
ORIG-f014.vmdk
ORIG-f015.vmdk
ORIG-f016.vmdk
ORIG-f017.vmdk
ORIG-f018.vmdk
ORIG-f019.vmdk
ORIG-f020.vmdk
ORIG-f021.vmdk
SUSE Linux.vmsd
SUSE Linux.vmx
ORIG.vmdk
vmware-0.log
vmware-1.log
vmware.log  

Si vous avez en plus des fichiers de verrouillage (*.WRITELOCK), c'est que la machine “ORIG” était en fonctionnement lors de la copie: effacez votre copie et recommencez!

Vous remplacez dans les noms de fichiers “ORIG” par “DEST”.

Vous supprimez les fichiers *.log (ils seront reconstruits dans la nouvelle configuration).

Vous prenez le fichier texte “DEST.vmdk” dans un éditeur de texte. Il doit contenir quelque chose comme:

# Disk DescriptorFile
version=1
CID=7990318c
parentCID=ffffffff
createType="twoGbMaxExtentFlat"
# Extent description
RW 4193792 FLAT "ORIG-f001.vmdk" 0
RW 4193792 FLAT "ORIG-f002.vmdk" 0
RW 4193792 FLAT "ORIG-f003.vmdk" 0
RW 4193792 FLAT "ORIG-f004.vmdk" 0
RW 4193792 FLAT "ORIG-f005.vmdk" 0
RW 4193792 FLAT "ORIG-f006.vmdk" 0
RW 4193792 FLAT "ORIG-f007.vmdk" 0
RW 4193792 FLAT "ORIG-f008.vmdk" 0
RW 4193792 FLAT "ORIG-f009.vmdk" 0
RW 4193792 FLAT "ORIG-f010.vmdk" 0
RW 4193792 FLAT "ORIG-f011.vmdk" 0
RW 4193792 FLAT "ORIG-f012.vmdk" 0
RW 4193792 FLAT "ORIG-f013.vmdk" 0
RW 4193792 FLAT "ORIG-f014.vmdk" 0
RW 4193792 FLAT "ORIG-f015.vmdk" 0
RW 4193792 FLAT "ORIG-f016.vmdk" 0
RW 4193792 FLAT "ORIG-f017.vmdk" 0
RW 4193792 FLAT "ORIG-f018.vmdk" 0
RW 4193792 FLAT "ORIG-f019.vmdk" 0
RW 4193792 FLAT "ORIG-f020.vmdk" 0
RW 10240 FLAT "ORIG-f021.vmdk" 0
# The Disk Data Base
#DDB
ddb.toolsVersion = "0"
ddb.adapterType = "lsilogic"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "255"
ddb.geometry.cylinders = "5221"
ddb.virtualHWVersion = "4"  

Vous remplacez, bien sûr, tous les “ORIG” par “DEST”.

Vous prenez ensuite le fichier qui se termine par “.vmx” dans un éditeur de texte. Il devrait contenir quelque chose comme:

#!/usr/bin/vmware
config.version = "8"
virtualHW.version = "4"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "256"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "ORIG.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "/ressources/dvdinstall/openSUSE-10.2-GM-DVD-i386.iso"
ide1:0.deviceType = "cdrom-image"
floppy0.fileName = "/dev/fd0"
Ethernet0.present = "TRUE"
displayName = "ORIG"
guestOS = "suse"
priority.grabbed = "normal"
priority.ungrabbed = "normal"
floppy0.startConnected = "FALSE"
workingDir = "."
scsi0:0.redo = ""
ethernet0.addressType = "generated"
uuid.location = "56 4d 9d 2f a6 68 c5 bd-01 55 ce 33 8f ff d3 3a"
uuid.bios = "56 4d 9d 2f a6 68 c5 bd-01 55 ce 33 8f ff d3 3a"
ethernet0.generatedAddress = "00:0c:29:ff:d3:3a"
ethernet0.generatedAddressOffset = "0"
usb.present = "TRUE"
ide0:0.present = "TRUE"
ide0:0.fileName = "/dev/hda"
ide0:0.deviceType = "atapi-cdrom"  

Vous remplacez, bien sûr, tous les “ORIG” (2 lignes chez moi = marquées en rouge) par “DEST”.

Le fichier “—–.vmsd” était vide chez moi, mais au cas où il ne serait pas chez vous, et dans la mesure où c'est un fichier texte, procédez aux mêmes changements.

C'est fini pour les modifications de nom.

Si vous êtes méfiant, refaites un snapshot sur l'OS d'origine (puisque vous l'avez effacé tout à l'heure): reprenez la console vmware, lancez l'OS invité d'origine, prenez le snapshot, et arrêtez de nouveau l'OS d'origine (c'est important de l'arrêter, car la copie est vraiment identique à l'original, y compris dans son adresse IP!).

Dans la console vmware, l'OS invité destination n'apparait pas dans la liste, et c'est normal.

Faites “File” et “Open”. Il vient une fenêtre qui demande quoi ouvrir. Vous prenez le bouton “browse”, vous naviguez dans l'arborescence de l'OS hôte, jusqu'au fichier *.vmx de l'OS invité clôné (pour moi: “/osvirtuels/DEST/SUSE Linux.vmx”).

Ça y est: la console vmware a reconnu votre OS invité clôné sous son nouveau nom “DEST”.

Lancez cet OS: il vient une fenêtre importante, qui vous demande si vous voulez créer un nouvel UUID ou si vous voulez conservez l'ancien. Pour choisir, c'est facile:

  • si vous avez recopié l'OS (ce qui veut dire que l'ancien existe toujours), il faut un nouvel UUID
  • si vous avez seulement déplacé l'OS (ce qui n'est pas l'objet de ce tuto), vous pouvez (ou devez?) conserver l'ancien UUID.

Une fois lancé, il faut commencer par modifier la configuration réseau pour éviter les “collisions” de paramètres (nom “netbios”, adresse IP, …): voir yast → périphérique réseau → carte réseau.

Sur ce point, j'ai rencontré un problème: yast m'a listé deux cartes réseau virtuelles identiques, et tout naturellement, j'ai configuré la 1ère, et j'ai essayé de supprimer la seconde (qui est restée): ça ne marche pas, c'est le contraire qu'il faut faire: supprimer la 1ère (qui doit disparaitre) et configurer celle qui reste.

A titre de vérification, vous pouvez maintenant lancer l'OS d'origine en même temps que l'OS copié afin de vérifier qu'il n'y a pas de collision dans l'appel aux ressources hardware de la machine physique.

C'est fantastique de constater que tout, absolument tout, a été dupliqué, à commencer bien sûr par toutes les configurations système, les mots de passe, le fond d'écran, etc…

C'est fini!

Je suppose qu'on devrait pouvoir automatiser une partie de ce travail (la copie avec les changements de noms) avec un script shell, mais je n'en ai pas pour l'instant!

J'utilise cette technique de clônage pour créer un OS “martyr” (comme disent les menuisiers) pour faire des essais risqués, voire destructeurs.

Mais un hébergeur de site web, par exemple, trouverait un grand avantage à dupliquer ainsi ses serveurs après mise au point du 1er.

clonage_os_invite_vmware_server.txt · Dernière modification: 2007/12/15 09:56 par tyrtamos

Outils de la page