« Virt/VirtualBox » : différence entre les versions
(Page créée avec « = Introduction = Ce document décrit le déroulement de l'installation de VirtualBox couplé à l'interface web phpvirtualbox. Cette installation va permettre de virtualiser ... ») |
|||
| Ligne 145 : | Ligne 145 : | ||
Linux: | Linux: | ||
Fichier <path>/etc/sysconfig/keyboard</path> | |||
KEYTABLE="en_us" | |||
/etc/init.d/network restart | /etc/init.d/network restart | ||
| Ligne 187 : | Ligne 185 : | ||
/dev/sda3 1045 1275 1853440 83 Linux | /dev/sda3 1045 1275 1853440 83 Linux | ||
# fdisk /dev/sda | |||
Le nombre de cylindres pour ce disque est initialisé à 1274. | |||
Il n'y a rien d''incorrect avec cela, mais c'est plus grand que 1024, | |||
et cela pourrait causer des problèmes en fonction pour certaines configurations: | |||
1) logiciels qui sont exécutés à l'amorçage (i.e., vieilles versions de LILO) | |||
2) logiciels d'amorçage et de partitionnement pour d'autres SE | |||
(i.e., DOS FDISK, OS/2 FDISK) | |||
Commande (m pour l'aide): p | |||
Disque /dev/sda: 10.4 Go, 10485760000 octets | |||
255 heads, 63 sectors/track, 1274 cylinders | |||
Unités = cylindres de 16065 * 512 = 8225280 octets | |||
Périphérique Amorce Début Fin Blocs Id Système | |||
/dev/sda1 <nowiki>* </nowiki>1 13 104391 83 Linux | |||
/dev/sda2 14 1044 8281507+ 8e Linux LVM | |||
/dev/sda3 1045 1275 1853440 83 Linux | |||
Commande (m pour l'aide): t | |||
Numéro de partition (1-4): 3 | |||
Code Hex (taper L pour lister les codes): 8e | |||
Type de partition système modifié de 3 à 8e (Linux LVM) | |||
Commande (m pour l'aide): p | |||
Disque /dev/sda: 10.4 Go, 10485760000 octets | |||
255 heads, 63 sectors/track, 1274 cylinders | |||
Unités = cylindres de 16065 * 512 = 8225280 octets | |||
Périphérique Amorce Début Fin Blocs Id Système | |||
/dev/sda1 * 1 13 104391 83 Linux | |||
/dev/sda2 14 1044 8281507+ 8e Linux LVM | |||
/dev/sda3 1045 1275 1853440 8e Linux LVM | |||
Commande (m pour l'aide): w | |||
La table de partitions a été altérée! | |||
Appel de ioctl() pour relire la table de partitions. | |||
AVERTISSEMENT: la re-lecture de la table de partitions a échoué avec l'erreur 16: Périphérique ou ressource occupé. | |||
Le kernel va continuer d'utiliser l'ancienne table. | |||
La nouvelle table sera utilisé lors du prochain réamorçage. | |||
Synchronisation des disques. | |||
Enfin on va utiliser cette nouvelle partition (/dev/sda3) pour augmenter la taille du volume LVM principal. | |||
# pvcreate /dev/sda3 | |||
pvs | |||
PV VG Fmt Attr PSize PFree | |||
/dev/sda2 VolGroup00 lvm2 a- 7,88G 0 | |||
/dev/sda3 lvm2 a- 1,77G 1,77G | |||
/dev/sda2 | |||
/dev/sda3 | |||
# vgextend VolGroup00 /dev/sda3 | |||
Volume group "VolGroup00" successfully extended | |||
# vgdisplay | |||
--- Volume group --- | |||
VG Name VolGroup00 | |||
System ID | |||
Format lvm2 | |||
Metadata Areas 2 | |||
Metadata Sequence No 4 | |||
VG Access read/write | |||
VG Status resizable | |||
MAX LV 0 | |||
Cur LV 2 | |||
Open LV 2 | |||
Max PV 0 | |||
Cur PV 2 | |||
Act PV 2 | |||
VG Size 9,62 GB | |||
PE Size 32,00 MB | |||
Total PE 308 | |||
Alloc PE / Size 252 / 7,88 GB | |||
Free PE / Size 56 / 1,75 GB | |||
VG UUID dTKLz4-DsDe-3wqC-55OT-czuA-LaPj-RjSjYH | |||
# lvresize --size +1,75G /dev/VolGroup00/LogVol00 | |||
Extending logical volume LogVol00 to 8,62 GB | |||
Logical volume LogVol00 successfully resized | |||
# resize2fs /dev/VolGroup00/LogVol00 | |||
resize2fs 1.39 (29-May-2006) | |||
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required | |||
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 2260992 (4k) blocks. | |||
Le système de fichiers /dev/VolGroup00/LogVol00 a maintenant une taille de 2260992 blocs. | |||
# df -h | |||
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur | |||
/dev/mapper/VolGroup00-LogVol00 | |||
8,4G 1,3G 6,7G 17% / | |||
/dev/sda1 99M 13M 82M 14% /boot | |||
tmpfs 249M 0 249M 0% /dev/shm | |||
La sortie de la commande 'df' avant l'extension était : | La sortie de la commande 'df' avant l'extension était : | ||
# df -h | |||
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur | |||
/dev/mapper/VolGroup00-LogVol00 | |||
6,7G 1,3G 5,1G 21% / | |||
/dev/sda1 99M 13M 82M 14% /boot | |||
tmpfs 249M 0 249M 0% /dev/shm | |||
'''Augmenter la taille d'un disque dur virtuel VMDK :''' | '''Augmenter la taille d'un disque dur virtuel VMDK :''' | ||
On arrête tout d'abord la VM. Ensuite, il va falloir faire un snapshot et le merger dans le disque, pour sauvegarder l'état courant de la VM. Sans ça, on se retrouvera avec une VM qui n'est pas à jour car toutes les modifications récentes se mettent dans un disque virtuel différentiel et non dans le disque lui même.Pour faire cela, via l'interface phpVirtualBox, il suffit de prendre un snapshot et de le restaurer.S'il existe d'autres snapshots, il faudra les restaurer un par un du plus bas au plus haut dans l'arborescence.Ensuite il va falloir convertir le disque dans le format VDI pour pouvoir le redimensionner : | On arrête tout d'abord la VM. Ensuite, il va falloir faire un snapshot et le merger dans le disque, pour sauvegarder l'état courant de la VM. Sans ça, on se retrouvera avec une VM qui n'est pas à jour car toutes les modifications récentes se mettent dans un disque virtuel différentiel et non dans le disque lui même.Pour faire cela, via l'interface phpVirtualBox, il suffit de prendre un snapshot et de le restaurer.S'il existe d'autres snapshots, il faudra les restaurer un par un du plus bas au plus haut dans l'arborescence.Ensuite il va falloir convertir le disque dans le format VDI pour pouvoir le redimensionner : | ||
# su - vbox -c "vboxmanage clonehd /home/vbox/MaVM/MonDisque.vmdk /home/vbox/MaVM/MonDisque.vdi --format VDI" | |||
Puis on le redimensionne : | Puis on le redimensionne : | ||
# su - vbox -c "vboxmanage modifyhd /home/vbox/MaVM/MonDisque.vdi --resize 40000" | |||
On peut ensuite supprimer l'ancien disque VMDK et attacher le VDI à la VM. | On peut ensuite supprimer l'ancien disque VMDK et attacher le VDI à la VM. | ||
| Ligne 417 : | Ligne 314 : | ||
Pour corriger cette erreur, il faut exécuter les commandes suivantes : | Pour corriger cette erreur, il faut exécuter les commandes suivantes : | ||
# su - vbox -c "VBoxManage setproperty websrvauthlibrary null" | |||
# /etc/init.d/vboxweb-service restart | |||
Après ça, on peut rafraîchir la page web de phpvirtualbox et on peut se connecter. | Après ça, on peut rafraîchir la page web de phpvirtualbox et on peut se connecter. | ||
| Ligne 431 : | Ligne 323 : | ||
Cette erreur signifie que l'interface réseau n'est pas correctement attaché à la VM, on va le constater avec la commande suivante : | Cette erreur signifie que l'interface réseau n'est pas correctement attaché à la VM, on va le constater avec la commande suivante : | ||
# su - vbox -c "vboxmanage showvminfo aaa"NIC 1: MAC: 080027A43A3E, Attachment: Bridged Interface '', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny | |||
On configure donc l'interface eth0 sur la VM comme ceci : | On configure donc l'interface eth0 sur la VM comme ceci : | ||
# su - vbox -c "vboxmanage modifyvm aaa --bridgeadapter1 eth0" | |||
# su - vbox -c "vboxmanage showvminfo aaa "NIC 1: MAC: 080027A43A3E, Attachment: Bridged Interface 'eth0', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny | |||
= UPDATE VIRtualbox et phpvirtualbox = | = UPDATE VIRtualbox et phpvirtualbox = | ||
Pour mettre à jour virtualbox, il est nécessaire de désinstaller le package rpm de la version courante puis d'installer celui de la nouvelle version. Il faut donc au préalable arrêter toutes les VM en cours d'exécution sur le serveur. | Pour mettre à jour virtualbox, il est nécessaire de désinstaller le package rpm de la version courante puis d'installer celui de la nouvelle version. Il faut donc au préalable arrêter toutes les VM en cours d'exécution sur le serveur. | ||
Version du 2 octobre 2012 à 16:33
Introduction
Ce document décrit le déroulement de l'installation de VirtualBox couplé à l'interface web phpvirtualbox. Cette installation va permettre de virtualiser des serveurs sur un serveur physique installé en CentOS. Il faut donc une fresh install CentOS sur un serveur assez performant de façon à pouvoir faire tourner plusieurs VM de façon optimale.
PRE-CONFIGURATION
Tout d'abord nous allons installer les paquets requis pour installer Virtualbox, il nous faut dans un premier temps installer le repo rpmforge ainsi que le repo b2pweb.
Ensuite on peut installer les paquets requis.
# yum install libGL libICE SDL libSM libXcursor libXi libXinerama libXmu libXrandr \ libX11 freetype fontconfig libpng gcc-c++ make dkms
On doit installer les paquets <package>php</package> depuis le repo b2pweb car la version majeure minimale doit être 5.2.
# yum install unzip httpd php php-soap php-pear php-devel
Installation
On installe maintenant VirtualBox
# wget http://download.virtualbox.org/virtualbox/4.0.8/VirtualBox-4.0-4.0.8_71778_rhel5-1.x86_64.rpm # rpm -i VirtualBox-4.0-4.0.8_71778_rhel5-1.x86_64.rpm
On installe ensuite phpvirtualbox
# wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.0-6.zip # unzip phpvirtualbox-4.0-6.zip # cd phpvirtualbox-4.0-6 # mkdir /var/www/html/phpvirtualbox # cp -r * /var/www/html/phpvirtualbox/
On installe le module php json et on restart Apache
# pecl install json # /etc/init.d/httpd start
On vérifie la présence des modules php soap et json
# php -i | grep soap # php -i | grep json
Configuration de phpvirtualbox
On peut alors configurer phpvirtualbox ( adresse IP du serveur vbox: 192.168.0.15 )
# mv config.php-example config.php # adduser vbox # passwd vbox
On met le mot de passe à vbox
# echo "VBOXWEB_USER=vbox" > /etc/default/virtualbox
Fichier /var/www/html/phpvirtualbox/config.php
var $username = 'vbox';
var $password = 'vbox';
var $location = 'http://127.0.0.1:18083/';
var $consoleHost = '192.168.0.15';
var $rdphost = '192.168.0.15';
On démarre le service
# /etc/init.d/vboxweb-service start # /etc/init.d/vboxweb-service status
On installe l'extension virtualbox nécessaire pour faire fonctionner l'USB sur les VM et pour pouvoir faire fonctionner l'onglet console sur l'interface phpvirtualbox ( fonctionnalité RDP ).
# cd /downloads # wget http://download.virtualbox.org/virtualbox/4.0.8/Oracle_VM_VirtualBox_Extension_Pack-4.0.8-71778.vbox-extpack # chmod +x Oracle_VM_VirtualBox_Extension_Pack-4.0.8-71778.vbox-extpack # VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.0.8-71778.vbox-extpack
# su vbox -c 'VBoxManage list extpacks' # su vbox -c 'VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"' # su vbox -c 'VBoxManage list extpacks'
Lorsque on crée une nouvelle VM, pour activer le bouton console de la VM sur phpvirtualbox.
[[Image:]]
Voici les commandes a lancer (test est le nom de la VM)
# su - vbox $ VBoxManage list vms $ VBoxManage modifyvm "test" --vrde on
Il est important de configurer un numéro de port vrde sur chaque VM, voici les commandes à exécuter pour configurer un nouveau numéro de port sur une nouvelle VM.
# su - vbox $ VBoxManage list vmsnap $ VBoxManage modifyvm "test" --vrdeport 5000
Ainsi avec la configuration appliquée ci-dessus, pour accéder à la VM xp en bureau à distance, on indiquera les coordonnées suivantes :
192.168.0.15:5010 donc l'adresse IP du serveur vbox avec le port vrde configuré ou 192.168.0.10 qui correspond à l'adresse IP de la VM.
Cloner des VM
Pour cloner des VM et ainsi gagner du temps sur l'installation de la VM, on peut procéder ainsi :
- Prendre un snapshot de la VM (bouton snapshot, current state, take snapshot)
- Arrêter la VM
- Exporter la VM (File > Export Appliance > choisir VM à exporter > Donner une destination et un nom à l'Appliance (.ova) > Vérification puis export)
- Importer VM (File > Import Appliance > choisir fichier ova > Vérifier / donner nom et modifier path disque dur vmdk puis Importer)
- Changer le port RDP (méthode décrite ci-dessus donc via CLI ou via l'interface web dans la configuration de la nouvelle VM)
- regénérer une nouvelle adresse MAC via l'interface web dans les paramètres de configuration ou via CLI :
# su - vbox $ VBoxManage modifyvm "xp" --macaddress1 auto
On peut également faire comme ceci.
# su - vbox $ VboxManage clonevm VM --name VM_CLONE --register
Cela régénérera un nouvel UUID ainsi qu'une nouvelle adresse MAC pour la VM_CLONE.
Changer l'UUID d'un disque vmdk :
# su - vbox $ VBoxManage internalcommands sethduuid /path/to/disk.vdi
Regénérer une adresse MAC :
# su - vbox $ VBoxManage modifyvm "xp" --macaddress1 auto
Activer la fonctionnalité vrde et configurer un port vrde :
# su - vbox $ VBoxManage list vms $ VBoxManage modifyvm "test" --vrde on $ VBoxManage modifyvm "test" --vrdeport 5000
Renommer une VM :
# su - vbox $ VboxManage modifyvm VM_AVANT --name VM_APRES
N.B. Cela changera également le nom de tout les fichiers de la VM, hormis le fichier VDI. Pour renommer celui-ci, il n'y a pas d'autre solution que de le cloner.
Supprimer une VM :
# su - vbox $ VboxManage unregistervm VM --delete
Clavier en qwerty :
Windows:
alt + shift dans console phpvirtualbox > switch to azerty
Attention avec cette manip le clavier sur le poste de travail utilisé passe en qwerty, il faudra refaire un alt + shift sur le poste de travail pour repasser en azerty.
Sur la session RDP, la clavier est en azerty
Linux:
Fichier <path>/etc/sysconfig/keyboard</path>
KEYTABLE="en_us"
/etc/init.d/network restart
ou reboot
Pointeur de la souris décallé :
Lors de la prise en main de la VM via le RDP de VirtualBox ou bien via l'onglet « Console », le pointeur de la souris est décalé par rapport au pointeur du poste qui prend la main. Pour résoudre ce problème, il faut installer sur le système les programmes additionnels invités (Guest Additions).
On peut télécharger l'image ISO à cet adresse :
http://download.virtualbox.org/virtualbox/
Il suffit alors de se rendre dans le dossier correspondant à notre version de VirtualBox et de télécharger l'image sur le serveur. Ensuite, il faut monter l'image sur la VM, et lancer le fichier « VBoxWindowsAdditions.exe ». Après l'installation, il faudra redémarrer la VM.
Augmenter la taille d'un disque dur virtuel VDI :
Arrêter la VM cible pour laquelle on veut modifier la taille du disque puis sur le serveur Virtualbox :
# su - vbox $ VBoxManage modifyhd /home/vbox/MaVM/MonDisque.vdi --resize 10000
On va utiliser la distribution Gparted pour allouer l'espace disque disponible sur le disque dur virtuel. Monter l'ISO sur le lecteur CD virtuel et booter sur celui-ci.
Une fois que la VM a démarrée sur Gparted, il suffit de créer une nouvelle partition avec l'espace disque disponible (tout l'espace disque). On crée une partition primaire non formatée car on va gérer le volume avec LVM. On arrête alors de nouveau la VM et on démonte l'ISO du lecteur CD virtuel.
On redémarre la VM et on utilise fdisk pour changer le type de partition (tag) qui est actuellement en 83 Linux et qu'il faut modifier en 8e Linux LVM :
# fdisk -l Disque /dev/sda: 10.4 Go, 10485760000 octets 255 heads, 63 sectors/track, 1274 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1044 8281507+ 8e Linux LVM /dev/sda3 1045 1275 1853440 83 Linux
# fdisk /dev/sda Le nombre de cylindres pour ce disque est initialisé à 1274. Il n'y a rien dincorrect avec cela, mais c'est plus grand que 1024, et cela pourrait causer des problèmes en fonction pour certaines configurations: 1) logiciels qui sont exécutés à l'amorçage (i.e., vieilles versions de LILO) 2) logiciels d'amorçage et de partitionnement pour d'autres SE (i.e., DOS FDISK, OS/2 FDISK) Commande (m pour l'aide): p Disque /dev/sda: 10.4 Go, 10485760000 octets 255 heads, 63 sectors/track, 1274 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1044 8281507+ 8e Linux LVM /dev/sda3 1045 1275 1853440 83 Linux Commande (m pour l'aide): t Numéro de partition (1-4): 3 Code Hex (taper L pour lister les codes): 8e Type de partition système modifié de 3 à 8e (Linux LVM) Commande (m pour l'aide): p Disque /dev/sda: 10.4 Go, 10485760000 octets 255 heads, 63 sectors/track, 1274 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1044 8281507+ 8e Linux LVM /dev/sda3 1045 1275 1853440 8e Linux LVM Commande (m pour l'aide): w La table de partitions a été altérée! Appel de ioctl() pour relire la table de partitions. AVERTISSEMENT: la re-lecture de la table de partitions a échoué avec l'erreur 16: Périphérique ou ressource occupé. Le kernel va continuer d'utiliser l'ancienne table. La nouvelle table sera utilisé lors du prochain réamorçage. Synchronisation des disques.
Enfin on va utiliser cette nouvelle partition (/dev/sda3) pour augmenter la taille du volume LVM principal.
# pvcreate /dev/sda3 pvs PV VG Fmt Attr PSize PFree /dev/sda2 VolGroup00 lvm2 a- 7,88G 0 /dev/sda3 lvm2 a- 1,77G 1,77G
# vgextend VolGroup00 /dev/sda3 Volume group "VolGroup00" successfully extended
# vgdisplay --- Volume group --- VG Name VolGroup00 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 9,62 GB PE Size 32,00 MB Total PE 308 Alloc PE / Size 252 / 7,88 GB Free PE / Size 56 / 1,75 GB VG UUID dTKLz4-DsDe-3wqC-55OT-czuA-LaPj-RjSjYH
# lvresize --size +1,75G /dev/VolGroup00/LogVol00 Extending logical volume LogVol00 to 8,62 GB Logical volume LogVol00 successfully resized
# resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 2260992 (4k) blocks. Le système de fichiers /dev/VolGroup00/LogVol00 a maintenant une taille de 2260992 blocs.
# df -h Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/mapper/VolGroup00-LogVol00 8,4G 1,3G 6,7G 17% / /dev/sda1 99M 13M 82M 14% /boot tmpfs 249M 0 249M 0% /dev/shm
La sortie de la commande 'df' avant l'extension était :
# df -h
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
/dev/mapper/VolGroup00-LogVol00
6,7G 1,3G 5,1G 21% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 249M 0 249M 0% /dev/shm
Augmenter la taille d'un disque dur virtuel VMDK :
On arrête tout d'abord la VM. Ensuite, il va falloir faire un snapshot et le merger dans le disque, pour sauvegarder l'état courant de la VM. Sans ça, on se retrouvera avec une VM qui n'est pas à jour car toutes les modifications récentes se mettent dans un disque virtuel différentiel et non dans le disque lui même.Pour faire cela, via l'interface phpVirtualBox, il suffit de prendre un snapshot et de le restaurer.S'il existe d'autres snapshots, il faudra les restaurer un par un du plus bas au plus haut dans l'arborescence.Ensuite il va falloir convertir le disque dans le format VDI pour pouvoir le redimensionner :
# su - vbox -c "vboxmanage clonehd /home/vbox/MaVM/MonDisque.vmdk /home/vbox/MaVM/MonDisque.vdi --format VDI"
Puis on le redimensionne :
# su - vbox -c "vboxmanage modifyhd /home/vbox/MaVM/MonDisque.vdi --resize 40000"
On peut ensuite supprimer l'ancien disque VMDK et attacher le VDI à la VM.
On utilisera la procédure décrite au dessus pour attribuer l'espace disque rajouté sur un serveur Linux. Sur un serveur Windows, il suffira de passer par le gestionnaire de disque via Ordinateur / clic droit Gérer / Gestion des disques, où l'on étendra simplement la partition principale avec l'espace disponible que l'on vient de rajouter (clic droit / étendre le volume).
Retrouver ses paramètres réseaux après un export/import :
Après avoir exporté puis importé une VM, celle-ci n'a plus les mêmes paramètres réseaux qu'avant (IP, netmask, gateway...).
Cela est dû au fait que VirtualBox affecte une autre adresse MAC à la carte réseau.
En réalité, le fichier /etc/sysconfig/network-scripts/ifcfg-eth0 qui contenait ces paramètres est toujours là mais renommé en ifcfg-eth0.bak.
Il suffit alors de le renommer ifcfg-eth0 en écrasant celui par défaut, puis de noter l'adresse MAC, arrêter la VM et aller configurer l'adresse MAC relevée dans l'interface phpVirtualBox.
Au redémarrage de la VM, celle-ci aura retrouvé ses paramètres.
Erreur Error logging in to vboxwebsrv lors de la connexion sur phpvirtualbox :
Pour corriger cette erreur, il faut exécuter les commandes suivantes :
# su - vbox -c "VBoxManage setproperty websrvauthlibrary null" # /etc/init.d/vboxweb-service restart
Après ça, on peut rafraîchir la page web de phpvirtualbox et on peut se connecter.
Erreur Failed to open/create the internal network (VERR_INTNET_FLT_IF_NOT_FOUND) :
Cette erreur signifie que l'interface réseau n'est pas correctement attaché à la VM, on va le constater avec la commande suivante :
# su - vbox -c "vboxmanage showvminfo aaa"NIC 1: MAC: 080027A43A3E, Attachment: Bridged Interface , Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny
On configure donc l'interface eth0 sur la VM comme ceci :
# su - vbox -c "vboxmanage modifyvm aaa --bridgeadapter1 eth0" # su - vbox -c "vboxmanage showvminfo aaa "NIC 1: MAC: 080027A43A3E, Attachment: Bridged Interface 'eth0', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny
UPDATE VIRtualbox et phpvirtualbox
Pour mettre à jour virtualbox, il est nécessaire de désinstaller le package rpm de la version courante puis d'installer celui de la nouvelle version. Il faut donc au préalable arrêter toutes les VM en cours d'exécution sur le serveur.
Voici la procédure pour un update de version mineure (ici on passe de la version 4.0.8 à la 4.0.12) :
| ## DL Last release
cd /downloads wget VirtualBox-4.0-4.0.12_72916_rhel5-1.x86_64.rpm
rpm -qa | grep VirtualBox #VirtualBox-4.0-4.0.8_71778_rhel5-1 rpm -e VirtualBox-4.0-4.0.8_71778_rhel5-1 rpm -qa | grep VirtualBox
rpm -Uvh VirtualBox-4.0-4.0.12_72916_rhel5-1.x86_64.rpm
su vbox -c 'VBoxManage list extpacks'
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.0.8 Revision: 71778 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: true Why unusable:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully uninstalled "Oracle VM VirtualBox Extension Pack".
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully uninstalled "Oracle VM VirtualBox Extension Pack".
Extension Packs: 0
Extension Packs: 0
chmod +x Oracle_VM_VirtualBox_Extension_Pack-4.0.12-72916.vbox-extpack VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.0.12-72916.vbox-extpack VBoxManage list extpacks
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.0.12 Revision: 72916 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: true Why unusable:
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.0.12 Revision: 72916 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: true Why unusable:
F5 phpvirtualbox > OK |
Voici la procédure pour un update de version majeure (ici on passe de la version 4.0.12 à la 4.1.2) :
| ## DL Last release
cd /downloads wget http://download.virtualbox.org/virtualbox/4.1.2/VirtualBox-4.1-4.1.2_73507_rhel5-1.x86_64.rpm
rpm -qa | grep VirtualBox VirtualBox-4.0-4.0.12_72916_rhel5-1 rpm -e VirtualBox-4.0-4.0.12_72916_rhel5-1 rpm -qa | grep VirtualBox #
rpm -Uvh VirtualBox-4.1-4.1.2_73507_rhel5-1.x86_64.rpm
su vbox -c 'VBoxManage list extpacks'
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.0.12 Revision: 72916 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: false Why unusable: VBoxExtPackRegister returned VERR_VERSION_MISMATCH, pReg=0000000000000000 ErrInfo='VirtualBox version mismatch - expected 4.0 got 4.1'
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully uninstalled "Oracle VM VirtualBox Extension Pack".
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully uninstalled "Oracle VM VirtualBox Extension Pack".
chmod -x Oracle_VM_VirtualBox_Extension_Pack-4.1.2-73507.vbox-extpack VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.2-73507.vbox-extpack VBoxManage list extpacks
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.1.2 Revision: 73507 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: true Why unusable:
Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 4.1.2 Revision: 73507 Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support. VRDE Module: VBoxVRDP Usable: true Why unusable: |
La version courante de phpvirtualbox est fonctionnelle pour virtualbox en version 4.0.X mais ne fonctionne pas pour les version 4.1.X, il est donc nécessaire de mettre à jour phpvirtualbox. Les manipulations sont assez simples, voici le détail :
| ## Update phpvirtualbox version
mv /var/www/html/phpvirtualbox /var/www/html/phpvirtualbox.bak cd /downloads wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.1-2.zip unzip phpvirtualbox-4.1-2.zip cd phpvirtualbox-4.1-2 mkdir /var/www/html/phpvirtualbox cp -r * /var/www/html/phpvirtualbox/ cd /var/www/html/phpvirtualbox/ cp config.php-example config.php Fichier <path>/var/www/html/phpvirtualbox/config.php</path> var $username = 'vbox';
var $password = 'vbox';
var $location = 'http://127.0.0.1:18083/';
var $consoleHost = '192.168.0.17';
var $rdphost = '192.168.0.17';
virtualbox > OK phpvirtualbox > OK |
SCRIPTS
Backup manuel
#!/bin/bash ##
# ##
# Script Name: backup_vm_vbox.sh ##
# Script description: List running vms, choose VM to save, remove old backup, take snapshot of VM, ##
# halt VM, export this VM to OVA file, start VM, move OVA file to backup directory. ##
# Note: This script can be used only for running Linux VMs, we have to launch it manually. ##
# ##
# GG - B2PWeb - 05082011 ##
##########################################################################################################
###########################################
## Define Time and directories variables ##
###########################################
## Time
date=`date '+%d-%m-%Y-%Hh%Mm%Ss'`
now=`date '+%Hh%Mm%Ss'`
## Directories
vboxdir=/home/vbox
vmdir=/home/vbox/VirtualBox\ VMs
backupdir=/opt/backup
##################################################
## Choose VM and define snap / export variables ##
##################################################
## List running VMs
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : List of running VMs"
su vbox -c "VBoxManage list runningvms"
## Nom VM
echo -e "Veuillez indiquer le nom de la machine virtuelle à sauvegarder:"
read vmname
## Variables files
vmsnap=snap_"$vmname"_"$date"
vmexport="$vmname"_"$date".ova
###############
## Backup VM ##
###############
## Suppression ancien backup
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Remove old backup files"
rm -rf $backupdir/$vmname*
## Take snapshot of this VM
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Take a snapshot of this VM"
su vbox -c "VBoxManage snapshot $vmname take $vmsnap --pause"
## Halt VM
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Halt this VM"
ssh $vmname halt
## Wait for halting
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Waiting one minute"
sleep 60
## Export VM
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Export this VM to OVA file"
su vbox -c "VBoxManage export $vmname -o $vboxdir/$vmexport"
## Start VM
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Starting VM"
su vbox -c "VBoxManage startvm "$vmname" --type headless"
## Move OVA file to backup directory
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Move OVA file to backup directory"
mv $vboxdir/$vmexport $backupdir/
# EOS
Snapshot manuel
#!/bin/bash ##
# ##
# Script Name: snapshot_vm_vbox.sh ##
# Script description: List running vms, choose VM to save, take snapshot of VM (with pause), ##
# Note: This script can be used only for running Linux VMs, we have to launch it manually. ##
# ##
# GG - B2PWeb - 21092011 ##
##########################################################################################################
###########################################
## Define Time and directories variables ##
###########################################
## Time
date=`date '+%d-%m-%Y-%Hh%Mm%Ss'`
now=`date '+%Hh%Mm%Ss'`
## Directories
vboxdir=/home/vbox
vmdir=/home/vbox/VirtualBox\ VMs
##################################################
## Choose VM and define snap / export variables ##
##################################################
## List running VMs
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : List of running VMs"
su vbox -c "VBoxManage list runningvms"
## Nom VM
echo -e "Veuillez indiquer le nom de la machine virtuelle pour le snapshot:"
read vmname
## Variables files
vmsnap=snap_"$vmname"_"$date"
#################
## Snapshot VM ##
#################
## Take snapshot of this VM
now=`date '+%Hh%Mm%Ss'`
echo -e "$now : Take a snapshot of this VM"
su vbox -c "VBoxManage snapshot $vmname take $vmsnap --pause"
# EOS
Memory overcommitment
Dans les environnements serveur avec plusieurs VMs, les Guest Additions peuvent être utilisés pour partager de la mémoire hôte physique entre plusieurs VMs, en réduisant la quantité totale de mémoire en utilisation par les VMs. Si l'utilisation de la mémoire est le facteur limite et les ressources CPU demeurent disponibles, ceci peut aider pour avoir plus de VMs sur chaque hôte.
Memory Ballooning :
A partir de la version 3.2, Les Guest Additions de VirtualBox peuvent changer la quantité de mémoire hôte qu'une VM utilise lorsque la machine est en cours d'exécution. En raison de comment elle est implémentée, cette fonctionnalité est nommée « memory ballooning ».
VirtualBox supporte le memory ballooning seulement sur les hôtes 64 bits et n'est pas supportée sur les hôtes Mas OS X.
Normalement, pour changer la quantité de mémoire allouée à une machine virtuelle, il faut arrêter la machine virtuelle entièrement et modifier ses paramètres. Avec le ballon de mémoire, la mémoire qui a été allouée pour une machine virtuelle peut être donnée à une autre machine virtuelle sans avoir à éteindre la machine.
Lorsque la mémoire ballon est demandée, les Guest Additions de VirtualBox (qui s'exécutent à l'intérieur de l'invité) allouent de la mémoire physique du système d'exploitation invité sur le niveau du noyau et verrouille cette mémoire dans l'invité.
Cela garantit que l'invité n'utilisera pas cette mémoire plus longtemps: aucunes applications clientes ne peut se l'allouer, et le noyau invité ne l'utilisera pas non plus. VirtualBox peut ensuite réutiliser cette mémoire et la donner à une autre machine virtuelle.
La mémoire disponible par l'intermédiaire du mécanisme de gonflement est uniquement disponible pour la réutilisation par VirtualBox. Elle n'est pas retournée comme mémoire libre pour l'hôte. Le fait de demander de la mémoire ballon à partir d'un invité en cours d'exécution ne fera donc pas augmenter la quantité de mémoire libre non allouée sur l'hôte. En effet, la mémoire ballon est donc un mécanisme de surcharge de mémoire pour de multiples machines virtuelles pendant leur exécution.
Cela peut être utile pour démarrer temporairement une autre machine, ou dans des environnements plus complexes, pour la gestion de la mémoire sophistiquée de nombreuses machines virtuelles qui peuvent être exécutées en parallèle selon la façon dont la mémoire est utilisée par les invités.
Pour le moment, la mémoire ballooning est prise en charge uniquement par le biais de VBoxManage. Utilisez la commande suivante pour augmenter ou diminuer la taille du ballon de mémoire dans une machine virtuelle qui a les Guest Additions installés:
VBoxManage controlvm "VM name" guestmemoryballoon <n>
où "VM name" est le nom ou l'UUID de la machine virtuelle en question et <n> est la quantité de mémoire à allouer depuis l'invité en méga-octets. Voir la section intitulée « VBoxManage controlvm » pour plus d'informations.
Vous pouvez également définir un ballon par défaut qui sera automatiquement demandé par la VM à chaque fois après qu'elle ai démarré avec la commande suivante:
VBoxManage modifyvm "VM name" --guestmemoryballoon <n>
Par défaut, aucun ballon de mémoire n'est alloué. Ceci est un paramètre VM, comme les autres paramètres modifyvm, et ne peut donc être réglé que lorsque la machine est arrêtée, voir la section intitulée «VBoxManage modifyvm".
Page Fusion :
Alors que la mémoire ballon réduit simplement la quantité de RAM qui est disponible pour une machine virtuelle, Page Fusion fonctionne différemment: il évite la duplication de la mémoire entre plusieurs machines virtuelles similaires en exécution.
Dans un environnement serveur exécutant plusieurs machines virtuelles similaires (par exemple avec des systèmes d'exploitation identiques) sur le même hôte, beaucoup de pages de mémoire sont identiques. La technologie VirtualBox Page Fusion, introduite dans VirtualBox 3.2, est une nouvelle technique pour identifier efficacement ces pages mémoire identiques et les partager entre plusieurs machines virtuelles.
VirtualBox supporte Page Fusion seulement sur les hôtes 64 bits, et il n'est pas pris en charge sur les hôtes Mac OS X. Fusion page ne fonctionne actuellement qu'avec les clients Windows (2000 et plus).
Plus les machines virtuelles sur un hôte donné sont similaires, plus Page Fusion peut efficacement réduire la quantité de mémoire de l'hôte qui est en cours d'utilisation. Il fonctionne mieux donc si toutes les machines virtuelles sur un hôte exécutent des systèmes d'exploitation identiques (par exemple Windows XP Service Pack 2). Au lieu d'avoir une copie complète de chaque système d'exploitation dans chaque VM, Page Fusion identifie les pages mémoire identiques utilisatées par ces systèmes d'exploitation et élimine les doublons, en partageant de la mémoire hôte entre plusieurs machines («la déduplication"). Si une machine virtuelle tente de modifier une page qui a été partagée avec d'autres machines virtuelles, une nouvelle page est allouée à nouveau pour ceete VM avec
une copie de la page partagée ("copy on write"). Tout cela est totalement transparent pour la machine virtuelle.
Vous connaissez peut-être ce genre de surcharge de mémoire à partir d'autres produits hyperviseur, qui appellent cette fonction « page sharing » ou « same page merging ». Toutefois, Page Fusion diffère sensiblement de ces autres solutions, dont les approches présentent plusieurs inconvénients:
- Les hyperviseurs traditionnels scannent toute la mémoire et calculer les sommes de contrôle (hashes) pour chaque page de mémoire unique. Puis, ils recherchent des pages avec des hashes identiques et comparent la totalité du contenu de ces pages, si deux pages produisent le même hachage, il est très probable que les pages ont un contenu identique. Ceci, bien sûr, peut prendre un peu de temps, surtout si le système n'est pas au repos (idle). En conséquence, la mémoire supplémentaire ne devient disponible qu'après une quantité importante de temps (cela peut durer des heures voire des jours!).
Pire encore, ce genre d'algorithme de partage de page consomme généralement d'importantes ressources CPU et augmente la surcharge de virtualisation de 10-20%.
Page Fusion dans
VirtualBox utilise la logique des Guest Additions de VirtualBox pour identifier rapidement les cellules de mémoire qui sont les plus susceptibles d'être identiques à travers les machines virtuelles. On peut donc atteindre la plupart des économies possibles de partage de page presque immédiatement et avec presque pas de charge. (genre eux c'est des ouf …)
- Page Fusion est aussi beaucoup moins susceptibles d'être désorienté par la mémoire identique qu'il éliminera simplement pour apprendre quelques secondes plus tard que la mémoire va maintenant changer et il devra ainsi effectuer une redistribution très coûteuse engendrant souvent une interruption de service.
Actuellement Page Fusion peut seulement être contrôlé avec VBoxManage, et seulement si la machine virtuelle est arrêtée. Pour activer Page Fusion pour une machine virtuelle, utilisez la commande suivante:
VBoxManage modifyvm "VM name" --pagefusion on
Vous pouvez observer le fonctionnement de Page Fusion en utilisant quelques métriques. RAM / VMM / Shared indique le montant total de pages fusionnées, alors que la métrique per-VM Guest / RAM / Utilisation / Shared retournera la quantité de mémoire fusionnée pour une VM donnée. Se référer à la section intitulée "VboxManage metrics"pour plus d'informations sur la façon d'interroger les métriques.