Libvirt/KVM
Installation
- apt-get install libvirt-bin netcat-openbsd kvm
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
- 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
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>