Hoy tengo mi máquina virtual Arch Linux conmigo. empezado 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é de nuevo usando la VM. para comenzar vagrant up
Mando. También se 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
Para estar seguro, intenté nuevamente iniciar la VM usando la aplicación Virt Manager GUI. Esta vez también devolvió el mismo error.
Todos los mensajes de error indican explícitamente que qemu
El usuario no tiene permiso de lectura en el directorio de almacenamiento de Libvirt.
En este breve tutorial, le mostraré cómo solucionar «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.
Tabla de Contenidos
Se corrigió «No se puede acceder al archivo de almacenamiento, error de permiso denegado» en KVM Libvirt
Este es uno de los errores libvirt de KVM más comunes. Este error suele ocurrir después Cambiar la ruta del directorio de almacenamiento predeterminado de Libvirt.
Hace unos días agregué la ubicación de Libvirt a mi $HOME
Directorio. Por eso recibo este error.
Podemos solucionarlo de dos formas.
Método 1:
Paso 1: Para editar /etc/libvirt/qemu.conf
Archivo:
$ sudo nano /etc/libvirt/qemu.conf
Paso 2: Encuentra el user
y group
Pautas. De forma predeterminada, ambos están configurados en "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 reemplácelas root
con tu nombre de usuario y grupo con libvirt
Como se muestra abajo:
[...] 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" [...]
prensa CTRL+O
y presione ENTER
para guardar los cambios y presione CTRL+X
para salir del archivo.
Paso 3: Empezar de nuevo libvirtd
Servicio:
$ sudo systemctl restart libvirtd
Paso 4: Asegúrese de que el usuario sea miembro de. es libvirt
Grupo. Si no es así, agregue el usuario. adicional libvirt
Grupo con comando:
$ sudo usermod -a -G libvirt $(whoami)
Paso 5: Finalmente, inicie la VM:
$ virsh start
Si prefiere usar vagabundos, haga lo siguiente en su lugar:
$ vagrant up
Esta vez debería iniciarse la máquina virtual.
Paso 6: Verifique el estado de la máquina virtual:
$ virsh list
O,
$ vagrant status
Método 2:
Otra forma de solucionar el problema de los permisos libvirt de KVM es establecer el permiso ACL correcto en el directorio del grupo de almacenamiento libvirt. En mi caso, el directorio de mi grupo de almacenamiento está en $HOME
Directorio.
Paso 1: Veamos los permisos actuales de ACL para el $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, el qemu
El usuario no tiene leer Autorización para la ubicación del pool de almacenamiento. En algunas distribuciones, el nombre de usuario puede ser libvirt-qemu
.
Paso 2: Establecer permisos de lectura y ejecución para el usuario qemu
con comando:
$ sudo setfacl -m u:qemu:rx /home/sk/
Reemplazar qemu
y /home/sk/
contigo mismo.
Ahora el usuario de qemu ha leído y ejecutado permisos para el directorio del grupo de almacenamiento. Puedes comprobarlo con 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 los invitados de Libvirt comenzarán sin ningún problema.
Conclusión
En esta guía, analizamos por qué recibimos el error «Acceso al permiso de archivo de almacenamiento no denegado» en KVM libvirt y cómo solucionarlo de dos formas diferentes en Linux.