Hoy inicié mi máquina virtual Arch Linux usando virsh start
comando y terminó con este error - 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
. En realidad, es una máquina Vagrant creada con el proveedor KVM Libvirt.
Luego, intenté nuevamente iniciar la VM usando vagrant up
dominio. También mostró el mismo error.
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
Solo para estar seguro, intenté una vez más iniciar la VM desde la aplicación GUI de Virt-manager. Esta vez también devolvió el mismo error.
Todos los mensajes de error dicen explícitamente que qemu
el usuario no tiene permiso de lectura en el directorio de almacenamiento de Libvirt.
En este breve tutorial, permítame mostrarle cómo solucionar el "error:no se pudo iniciar el dominio... error:no se puede acceder al archivo de almacenamiento... (como uid:107, gid:107):permiso denegado" en KVM Libvirt .
Reparar "No se puede acceder al archivo de almacenamiento, error de permiso denegado" en KVM Libvirt
Este es uno de los errores comunes de KVM Libvirt. Este error generalmente ocurrirá después de cambiar la ruta del directorio de almacenamiento predeterminado de Libvirt .
Hace unos días, moví la ubicación de almacenamiento de Libvirt a mi $HOME
directorio. Por eso me sale este error.
Podemos arreglarlo de dos maneras.
Método 1:
/etc/libvirt/qemu.conf
archivo:
$ sudo nano /etc/libvirt/qemu.conf
user
y group
directivas. De forma predeterminada, ambos están configurados como "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" [...]
Descomente ambas líneas y reemplace root
con tu nombre de usuario y grupo con libvirt
como se muestra a continuación:
[...] 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" [...]
Presiona CTRL+O
y presiona ENTER
para guardar los cambios y presiona CTRL+X
para salir del archivo.
Paso 3: Reinicie libvirtd
servicio:
$ sudo systemctl restart libvirtd
libvirt
grupo. Si no, agregue el usuario a libvirt
grupo usando el comando:
$ sudo usermod -a -G libvirt $(whoami)
$ virsh start
Si prefiere usar vagrant, ejecute esto en su lugar:
$ vagrant up
Esta vez, la máquina virtual debería iniciarse.
Paso 6: Compruebe el estado de la máquina virtual:
$ virsh list
O,
$ vagrant status
Método 2:
La otra forma de solucionar el problema del permiso KVM Libvirt es establecer el permiso ACL adecuado para el directorio del grupo de almacenamiento Libvirt. En mi caso, el directorio de mi grupo de almacenamiento se encuentra en $HOME
directorio.
$HOME
directorio.
$ sudo getfacl -e /home/sk/
Salida de muestra:
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::---
Como puede ver en el resultado anterior, qemu
el usuario no tiene leído permiso para la ubicación del grupo de almacenamiento. En algunas distribuciones, el nombre de usuario podría ser libvirt-qemu
.
qemu
usando el comando:
$ sudo setfacl -m u:qemu:rx /home/sk/
Reemplazar qemu
y /home/sk/
con el tuyo.
Ahora, el usuario qemu tiene permiso de lectura y ejecución sobre el directorio del grupo de almacenamiento. Puede verificarlo usando el comando:
$ sudo getfacl -e /home/sk/
Salida de muestra:
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::---
Paso 3: Reinicie el servicio libvirtd:
$ sudo systemctl restart libvirtd
Ahora las máquinas invitadas de Libvirt se iniciarán sin ningún problema.
Conclusión
En esta guía, discutimos por qué obtenemos el error "no se puede acceder al permiso de archivo de almacenamiento denegado" en KVM libvirt y cómo solucionarlo de dos maneras diferentes en Linux.