Table des matières
KVM/QEMU
KVM (Kernel-based Virtual Machine) est une solution de virtualisation libre. Cette technologie est intégrée au noyau Linux. Elle a plusieurs avantages :
- stockage (tout ce que le noyau Linux prend en charge)
- migration à chaud
- planification et contrôle des ressources
QEMU est une machine virtuelle (ou émulateur). On peut utiliser ce dernier sans dépendre de l'hyperviseur KVM.
Dans cette page nous allons voir comment utiliser ces deux technologies ensemble par l'intermédiaire de la bibliothèque libvirt.
Le système hôte est une Debian. Il faudra adapter la partie “Installation” à d'autres distributions.
De plus, on va uniquement s'intéresser à l'architecture x86.
Toutes les manipulations doivent se faire avec un utilisateur privilégié.
Installation
apt install --no-install-recommends qemu-system-x86 qemu-utils qemu-block-extra
Pour gérer les machines virtuelles, on installe également les paquets liés à libvirt.
On utilise ici, l'option –no-install-recommends
sinon avec la gestion des dépendances, on va également installer le paquet virt-manager. Or dans notre cas on souhaite en utiliser un autre.
apt install --no-install-recommends libvirt-clients libvirt-daemon-system virtinst libosinfo-bin
Lancement du service
En principe le service libvirtd est actif, pour vérifier son état → systemctl status libvirtd
. Si ce n'est pas le cas :
systemctl start libvirtd systemctl enable libvirtd
La dernière ligne précise, que ce service doit être lancé à chaque démarrage de la machine.
Gestion du réseau
Avant de créer notre première machine virtuelle, il faut activer le réseau :
virsh net-list --all Nom État Démarrage automatique Persistent --------------------------------------------------------- default inactif no Oui
Pour changer cet état, virsh net-start default
. Pour éviter de devoir taper la commande précédente à chaque fois, on active l'option net-autostart → virsh net-autostart default
.
virsh net-list --all Nom État Démarrage automatique Persistent ------------------------------------------------------- default actif Oui Oui
On constate, que l'état du réseau à changer.
Création d'une machine virtuelle
Un utilisateur classique est suffisant, ici.
Dans un premier temps, nous allons définir une image disque, d'une taille définie (cela représente en quelque sorte un disque dur physique).
Pour notre essais, nous allons partir sur 20G, et installer la Linux Mint 20.2 1).
fallocate -l 20G linuxmint-20.img
Puis cette image disque doit être dans un format (Qcow) compréhensible par QEMU.
qemu-img create -f qcow2 linuxmint-20.img 20G
Maintenant nous allons créer à proprement parler notre machine virtuelle (on parle de « domaine » dans le jargon libvirt).
Il faut lancer les commandes ci-dessous avec un utilisateur privilégié (root ou précédé de sudo).
virt-install --connect qemu:///system \ --name linuxmint \ --virt-type kvm \ --hvm \ --ram 2048 \ --noautoconsole \ --disk path=linuxmint-20.img,size=20 \ --network bridge=virbr0 \ --cdrom linuxmint-20.2-mate-64bit.iso \ --graphics vnc \ --os-variant ubuntu20.04
On va détailler les différentes options :
- –name → nom de la machine virtuelle
- virt-type → on précise que l'on souhaite utiliser KVM (et pas uniquement QEMU)
- –connect → précise le système de virtualisation (qemu:, xen:, lxc:, vbox:)
- –ram → la quantité de mémoire allouée (par défaut c'est 1024, mais il vaut mieux doubler cette valeur)
- –noautoconsole → évite de lancer virt-viewer, c'est utile si l'on souhaite utiliser un client VNC particulier
- –graphics vnc → accès à la machine virtuelle par l'intermédiaire d'un client VNC
- –os-variant → charge des optimisations 2)
Si la commande s'est bien exécutée → virsh list –all
. Avec une session VNC, il vaut mieux éditer (à chaud → virsh edit linuxmint
) le fichier de configuration de la machine virtuelle pour avoir un clavier AZERTY (fr). On rajoute un attribut keymap au nœud graphics.
Ci dessous les attributs par défaut du nœud graphics :
[...] <graphics type='vnc' port='-1' autoport='yes'> <listen type='address'/> </graphics> [...]
Après avoir rajouter l'attribut keymap.
[...] <graphics type='vnc' port='-1' autoport='yes' keymap='fr'> <listen type='address'/> </graphics> [...]
Quand on modifie un paramètre de la machine virtuelle, il est préférable de la relancer.
virsh destroy linuxmint
Cette commande peut endommager la machine virtuelle (dans notre cas, il n'y a rien). Sinon il faut privilégier l'option shutdown.
Pour la lancer :
virsh --connect qemu:///system start linuxmint