====== Libvirt/KVM ======
===== Installation =====
* apt-get install libvirt-bin netcat-openbsd kvm
Si le processeur de votre machine ne supporte pas la virtualisation matériel, installer qemu au lieu de kvm. Pour savoir si votre processeur supporte la virtualisation vous pouvez faire : egrep '^flags.*(vmx|svm)' /proc/cpuinfo
===== Astuces =====
==== Reboot d'une VM via SysRq ====
Il est difficile (voir impossible) d'envoyer une séquence de touche SysRq à une VM depuis sa console VNC ouverte sur un host Linux étant donner que cette séquence de touches sera interprétée par le kernel de votre machine locale et non pas celui de la VM... La solution pour cela est de passer via l'hyperviseur en exécutant les commandes suivantes :
VM=mamv
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_R
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_E
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_I
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_S
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_U
virsh send-key $VM KEY_LEFTALT KEY_SYSRQ KEY_B
==== Désactiver la confirmation de l'arrêt par ACPI sur une machine virtuelle Windows ====
Permettre l'arrêt sans ce logguer :
* Lancer //regedit// et aller dans : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system
* Modifier la clé **shutdownwithoutlogon** pour la valeur **1** (héxadécimal)
Configurer l'arrêt lors du signal ACPI :
* Aller dans le **Panneau de configuration** et aller dans les **Options d’alimentation**
* Dans l'onglet **Avancé**, modifier l'action lorsque le bouton //power// est précé
Désactiver l'alerte en cas d'arrêt par ACPI :
* Lancer //regedit// et aller dans : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
* Ajouter une clé **DWORD Value** portant le nom **ShutdownWarningDialogTimeout** et ayant pour valeur héxadéimal **1**
==== Migration d'une VM ====
=== Migration Live ===
time virsh migrate --live --persistent --copy-storage-all myVM qemu+ssh://172.16.0.2/system
=== Migration VM éteinte ===
Si la VM est éteinte, l'idéale est de :
- Dumper la configuration de la VM sur l'hyperviseur source dans un fichier : virsh dumpxml myVM > myVM.xml
- Définir la VM sur le nouvelle hyperviseur à partir du fichier XML : virsh define myVM.xml
Si des modifications sont nécessaires dans la configuration pour que la VM fonctionne comme un changement de chemin de bloc device ou encore un modification sur les interfaces réseau, faite les dans le fichier XML avant.
- Migrer les blocs devices via //netcat//. S'il s'agit de LV, vous pouvez le migrer comme suit :
- Recréer les blocs devices sur l'hyperviseur de destination
- Sur l'hyperviseur de destination :
- créer au préalable les LV de la futur VM de taille identique qu'à l'origine
- lancer la commande : nc -l 19000|dd bs=16M of=/dev/vg_hyp2/myVM0
- Sur l'hyperviseur source :
- Lancer la commande : dd bs=16M if=/dev/vg_hyp1/myVM0|nc 172.16.0.2 19000
Pour suivre l'avancement, vous pouvez récupérer le PID du processus //dd// sur l'hyperviseur source et exécuter ensuite la commande : kill -USR1 $PID
Le processus //dd// affichera alors sur la console la taille des données déjà copiés et la vitesse moyenne.
==== Erreur : Timed out during operation: cannot acquire state change lock ====
Ceci est un bug et le plus simple pour le résoudre est de undefine/define la VM : virsh dumpxml VM > /tmp/VM.xml
virsh undefine VM
virsh define /tmp/VM.xml
virsh start VM
==== Problème de décalage d'horloge sur les VM Windows ====
Remplacer le block ''%%%%'' dans la configuration de la VM part :