Table des matières

Libvirt/KVM

Installation

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 :

Configurer l'arrêt lors du signal ACPI :

Désactiver l'alerte en cas d'arrêt par ACPI :

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 :

  1. Dumper la configuration de la VM sur l'hyperviseur source dans un fichier :
    virsh dumpxml myVM > myVM.xml
  2. 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.
  1. Migrer les blocs devices via netcat. S'il s'agit de LV, vous pouvez le migrer comme suit :
    1. Recréer les blocs devices sur l'hyperviseur de destination
    2. Sur l'hyperviseur de destination :
      1. créer au préalable les LV de la futur VM de taille identique qu'à l'origine
      2. lancer la commande :
        nc -l 19000|dd bs=16M of=/dev/vg_hyp2/myVM0
    3. Sur l'hyperviseur source :
      1. 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 <clock> dans la configuration de la VM part :

<clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup' track='guest'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
</clock>