Comment exécuter KVM imbriqué dans WSL2 (ou VMware) ?

J’essaie de suivre ce tutoriel pour exécuter KVM imbriqué dans WSL 2, mais après avoir suivi les instructions pour compiler le noyau et le charger, le test kvm-ok indique que KVM n’est pas pris en charge.

J’ai essayé plusieurs options : activer Hyper-V, le désactiver, vérifier le support BIOS/CPU, activer/désactiver Device Guard, d’autres étapes dans certains documents VMware (bcdedit /set hypervisorlaunchtype, sous-options sous gpedit/DeviceGuard).

Quand je désactive Hyper-V, que je mets hypervisorlaunchtype à off et que je désactive Device Guard, j’obtiens les options suivantes dans les informations système, mais WSL2 refuse alors de se lancer, disant « Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS. »

Avec toute autre configuration que j’essaie, les infos système indiquent qu’un hyperviseur est en cours d’exécution et n’afficheront pas les valeurs Hyper-V, mais je me retrouve face au problème initial de KVM non pris en charge dans WSL2. De plus, si j’essaie d’activer « Virtualize Intel VT-x/EPT » dans VMWare Player, celui-ci refuse également de se lancer.

En prenant du recul, ce que j’essaie finalement de faire est d’exécuter la démo firecracker sur mon ordinateur portable Windows. Donc s’il y a un moyen plus simple de le faire, faites-le moi savoir.

Mise à jour

J’ai remarqué que cela fonctionne dans VMWare Player avec une image Ubuntu. Ou du moins, kvm-ok indique que c’est activé, /dev/kvm existe. Je préférerais toujours utiliser WSL2. Mais il refuse de se charger.


Source : Server Fault,)

Sous WSL2 (Windows 11), la virtualisation imbriquée est prise en charge mais pas activée par défaut. Pour l’activer, vous devez :

  • Vous ajouter au groupe kvm

  • Choisir votre architecture et changer le groupe par défaut de /dev/kvm

  • (peut-être) Activer la virtualisation imbriquée dans %USERPROFILE%\.wslconfig

  • Redémarrer WSL

1. S’ajouter au groupe kvm :

Celui-ci est simple :

sudo usermod -a -G kvm ${USER}

2. Choisir votre architecture et changer le groupe par défaut de /dev/kvm

C’est aussi simple, mais WSL a un système de fichiers en lecture seule avec une surcouche tmpfs. Vous devez également activer le module spécifique au processeur pour votre architecture. Je suis sur Intel, donc c’est kvm_intel, mais sur AMD c’est kvm_amd.

Pour activer le module spécifique au processeur, changer le groupe par défaut et faire en sorte que tout cela persiste à travers les redémarrages et mises à jour, ajoutez cette section à votre fichier /etc/wsl.conf :

[boot]
command = "modprobe kvm_intel && while [ ! -e /dev/kvm ]; do sleep 0.1; done && chown root:kvm /dev/kvm && chmod 660 /dev/kvm"

Il peut y avoir un léger délai avant que le noyau ne peuple /dev avec kvm, d’où la boucle while.

3. Activer la virtualisation imbriquée

Vous n’avez pas besoin de recompiler votre distribution WSL pour activer la virtualisation imbriquée. La dernière fois que j’ai vérifié, la virtualisation imbriquée est activée par défaut. Vous pouvez confirmer avec la commande suivante :

cat /sys/module/kvm_intel/parameters/nested

Si vous voyez Y (comme dans Yes/Oui), c’est déjà activé, passez à l’étape suivante.

Si vous ne pouvez pas mettre à jour WSL vers la dernière version, ajoutez simplement cette section à votre configuration WSL sous Windows. Lancez notepad %USERPROFILE%\.wslconfig (créez le fichier s’il n’existe pas) et ajoutez :

[wsl2]
nestedVirtualization=true

Quand j’ai écrit ceci la première fois, je devais mettre la directive dans /etc/wsl.conf. Comme @athys l’a mentionné, il semble que cela appartienne désormais au fichier .wslconfig sous Windows.

4. Redémarrer WSL

Vous pouvez soit redémarrer Windows, soit fermer toutes vos fenêtres de terminal WSL et exécuter cette commande dans PowerShell, CMD ou le menu Exécuter de Windows (Windows+R)

wsl.exe --shutdown

La prochaine fois que vous ouvrirez un terminal, WSL démarrera avec les nouvelles options et la virtualisation imbriquée fonctionnera.
Plus de détails sur l’activation de la virtualisation imbriquée ici.