
L’autre jour, je voulais démarrer une VM pour faire un test, je lance mon gestionnaire de machines virtuelles KVM mais aucun VM n’apparaît.
Je vais tout de suite voir l’état du service libvirtd, et en toute logique j’ai bien un problème de démarrage :

J’essaie de redémarrer le service sans succès, on voit bien que le système a essayé plusieurs fois sans succès. Je regarde les logs sans rien trouver de bien parlant. Le plus étonnant, c’est que j’arrive à lancer le daemon en mode su (libvirtd --verbose), puis à lancer ma VM et faire ce que je voulais faire.
Le problème est contourné, mais pas résolu. J’ai regardé ça de plus près cet AM, alors voilà la vraie résolution, très simple, et qui était due à une mise à jour du BIOS sur le PC. Je fais cet article pour m’en souvenir.
SVM dans le BIOS
Pendant ma recherche sur le net d’informations sur ce problème, je tombe sur une remarque assez basique mais disant de vérifier que la virtualisation est bien activée dans le BIOS. Et là, ça fait tilt, j’ai effectivement mis mon BIOS à jour il y a peu de temps. Je redémarre le PC, et rentre dans le BIOS.
Pour les carte-mères Asus équipée d’un processeur AMD, il faut aller en mode Advanced dans « CPU Configuration », et rechercher le mode SVM (Secure Virtual Machine). Et effectivement, le paramètre a bien été réinitialisé à sa valeur par défaut, soit « Disabled » ! 😡 Je le réactive et redémarre, espérant avoir solutionné le problème.

Les logs
Hélas, le problème est toujours présent, impossible de démarrer le service. Une recherche dans les logs après ce démarrage va cette fois être plus parlante :
$ sudo journalctl -u libvirtd.service -b
...
libvirtd.service: TPM key integrity check failed. Key most likely does not belong to this TPM.
libvirtd.service: Failed to set up credentials: Object is remote
libvirtd.service: Failed at step CREDENTIALS spawning /usr/bin/libvirtd: Object is remote
...
TPM est l’abréviation de « Trusted Platform Module », c’est une histoire de clef fournie par un circuit spécialisé sur la carte-mère, afin d’améliorer la sécurité. Je n’en sais pas plus, mais je comprends que la mise à jour du BIOS a invalidé la clef existante sur mon système, d’où le refus de démarrer du service.
Après quelques recherches, la solution est de supprimer l’ancienne clé libvirt afin qu’elle soit régénérée avec la nouvelle clé principale, puis :
$ sudo rm /var/lib/libvirt/secrets/secrets-encryption-key
$ sudo systemctl disable libvirtd.service
$ sudo systemctl enable libvirtd.service
$ sudo systemctl start libvirtd.service
Et voilà, mes VMs sont revenues dans le gestionnaire KVM :
