GNU/Linux >> Tutoriales Linux >  >> Linux

[Resuelto] No se puede acceder al archivo de almacenamiento, Permiso denegado Error en KVM Libvirt

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:

Paso 1: Edite /etc/libvirt/qemu.conf archivo:

$ sudo nano /etc/libvirt/qemu.conf

Paso 2: Encuentra el 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

Paso 4: Asegúrese de que el usuario sea miembro de libvirt grupo. Si no, agregue el usuario a libvirt grupo usando el comando:

$ sudo usermod -a -G libvirt $(whoami)

Paso 5: Finalmente inicie la VM:

$ 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.

Paso 1: Obtengamos los permisos actuales de ACL para $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 .

Paso 2: Establecer el permiso de lectura y ejecución para el usuario 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.


Linux
  1. pip freeze devuelve un error:Permiso denegado:hg

  2. Error Acceso denegado necesita privilegio de PROCESO [MySQL]

  3. (Resuelto) No se puede abrir el buzón /var/mail/user:error de permiso denegado en Linux

  4. MySQL - ERROR 1045 - Acceso denegado

  5. error de montaje 13 =Permiso denegado

Cómo resolver un error de MySQL:acceso denegado para el usuario [email protected]

Cómo solucionar el error – ModSecurity:acceso denegado con el código 44 [Apache]

Solución de problemas:MySQL/MariaDB Error #1044 Е Acceso denegado para el usuario

¿Apache no puede acceder al archivo mientras tiene permiso?

Permiso de montaje CIFS denegado en Linux - ¡Arreglado!

mysql (mariadb) ERROR 1698 (28000):Acceso denegado para el usuario 'root'@'localhost'