Aujourd'hui, j'ai démarré ma machine virtuelle Arch Linux en utilisant virsh start
commande et s'est retrouvé avec cette erreur - Failed to start domain 'Archlinux_default' error: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied
. Il s'agit en fait d'une machine Vagrant créée avec le fournisseur KVM Libvirt.
Ensuite, j'ai réessayé de démarrer la VM en utilisant vagrant up
commande. Il a également affiché la même erreur.
Bringing machine 'default' up with 'libvirt' provider… ==> default: Checking if box 'archlinux/archlinux' version '20210601.24453' is up to date… ==> default: Starting domain. There was an error talking to Libvirt. The error message is shown below: Call to virDomainCreateWithFlags failed: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied
Juste pour être sûr, j'ai essayé une fois de plus de démarrer la machine virtuelle à partir de l'application graphique Virt-manager. Cette fois aussi, la même erreur a été renvoyée.
Tous les messages d'erreur indiquent explicitement que le qemu
l'utilisateur n'a pas l'autorisation de lecture sur le répertoire de stockage Libvirt.
Dans ce bref didacticiel, permettez-moi de vous montrer comment corriger "erreur :échec du démarrage du domaine ... erreur :impossible d'accéder au fichier de stockage .... (comme uid:107, gid:107):autorisation refusée" dans KVM Libvirt .
Correction "Impossible d'accéder au fichier de stockage, erreur d'autorisation refusée" dans KVM Libvirt
C'est l'une des erreurs courantes de KVM Libvirt. Cette erreur se produit généralement après la modification du chemin du répertoire de stockage par défaut de Libvirt .
Il y a quelques jours, j'ai déplacé l'emplacement de stockage Libvirt vers mon $HOME
annuaire. C'est pourquoi j'obtiens cette erreur.
Nous pouvons y remédier de deux manières.
Méthode 1 :
Étape 1 : Modifier /etc/libvirt/qemu.conf
fichier :
$ sudo nano /etc/libvirt/qemu.conf
Étape 2 : Trouver l'user
et group
directives. Par défaut, les deux sont définis sur "root"
.
[...] Some examples of valid values are: # user = "qemu" # A user named "qemu" user = "+0" # Super user (uid=0) user = "100" # A user named "100" or a user with uid=100 # #user = "root" The group for QEMU processes run by the system instance. It can be specified in a similar way to user. #group = "root" [...]
Décommentez les deux lignes et remplacez root
avec votre nom d'utilisateur et groupez avec libvirt
comme indiqué ci-dessous :
[...] Some examples of valid values are: # user = "qemu" # A user named "qemu" user = "+0" # Super user (uid=0) user = "100" # A user named "100" or a user with uid=100 # user = "sk" The group for QEMU processes run by the system instance. It can be specified in a similar way to user. group = "libvirt" [...]
Appuyez sur CTRL+O
et appuyez sur ENTER
pour enregistrer les modifications et appuyez sur CTRL+X
pour quitter le fichier.
Étape 3 : Redémarrez libvirtd
service :
$ sudo systemctl restart libvirtd
Étape 4 : Veuillez vous assurer que l'utilisateur est membre de libvirt
grouper. Sinon, ajoutez l'utilisateur à libvirt
groupe à l'aide de la commande :
$ sudo usermod -a -G libvirt $(whoami)
Étape 5 : Démarrez enfin la VM :
$ virsh start
Si vous préférez utiliser vagrant, lancez ceci à la place :
$ vagrant up
Cette fois, la machine virtuelle devrait démarrer.
Étape 6 : Vérifiez l'état de la machine virtuelle :
$ virsh list
Ou,
$ vagrant status
Méthode 2 :
L'autre moyen de résoudre le problème d'autorisation KVM Libvirt consiste à définir l'autorisation ACL appropriée sur le répertoire du pool de stockage Libvirt. Dans mon cas, mon répertoire de pool de stockage se trouve dans $HOME
répertoire.
Étape 1 : Obtenons les autorisations ACL actuelles sur $HOME
répertoire.
$ sudo getfacl -e /home/sk/
Exemple de résultat :
getfacl: Removing leading '/' from absolute path names file: home/sk/ owner: sk group: sk user::rwx user:qemu:--x #effective:--x group::--- #effective:--- mask::--x other::---
Comme vous le voyez dans la sortie ci-dessus, le qemu
l'utilisateur n'a pas lu l'autorisation d'accès à l'emplacement du pool de stockage. Dans certaines distributions, le nom d'utilisateur peut être libvirt-qemu
.
Étape 2 : Définissez les autorisations de lecture et d'exécution pour l'utilisateur qemu
en utilisant la commande :
$ sudo setfacl -m u:qemu:rx /home/sk/
Remplacer qemu
et /home/sk/
avec le vôtre.
Désormais, l'utilisateur qemu dispose d'une autorisation de lecture et d'exécution sur le répertoire du pool de stockage. Vous pouvez le vérifier en utilisant la commande :
$ sudo getfacl -e /home/sk/
Exemple de résultat :
getfacl: Removing leading '/' from absolute path names file: home/sk/ owner: sk group: sk user::rwx user:qemu:r-x #effective:--x group::--- #effective:--- mask::--x other::---
Étape 3 : Redémarrez le service libvirtd :
$ sudo systemctl restart libvirtd
Maintenant, les machines invitées Libvirt démarreront sans aucun problème.
Conclusion
Dans ce guide, nous avons expliqué pourquoi nous obtenons l'erreur "Impossible d'accéder au fichier de stockage, autorisation refusée" dans KVM libvirt et comment y remédier de deux manières différentes sous Linux.