Oggi ho avviato la mia macchina virtuale Arch Linux utilizzando virsh start comando e si è verificato questo errore - 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 . In realtà è una macchina Vagrant creata con il provider KVM Libvirt.
Quindi, ho provato di nuovo ad avviare la VM usando vagrant up comando. Visualizzava anche lo stesso errore.
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
Per sicurezza, ho provato ancora una volta ad avviare la VM dall'applicazione GUI Virt-manager. Anche questa volta ha restituito lo stesso errore.
Tutti i messaggi di errore dicono esplicitamente che il qemu l'utente non dispone dell'autorizzazione di lettura per la directory di archiviazione di Libvirt.
In questo breve tutorial, permettimi di mostrarti come correggere "errore:Impossibile avviare il dominio ... errore:Impossibile accedere al file di archiviazione .... (as uid:107, gid:107):Permesso negato" in KVM Libvirt .
Risolto il problema con "Impossibile accedere al file di archiviazione, errore di autorizzazione negata" in KVM Libvirt
Questo è uno degli errori comuni di KVM Libvirt. Questo errore si verifica in genere dopo la modifica del percorso della directory di archiviazione predefinita di Libvirt .
Alcuni giorni fa, ho spostato la posizione di archiviazione di Libvirt nel mio $HOME directory. Ecco perché ricevo questo errore.
Possiamo risolverlo in due modi.
Metodo 1:
Passaggio 1: Modifica /etc/libvirt/qemu.conf file:
$ sudo nano /etc/libvirt/qemu.conf
Passaggio 2: Trova l'user e group direttive. Per impostazione predefinita, entrambi sono impostati su "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" [...]
Decommenta entrambe le righe e sostituisci root con il tuo nome utente e raggruppa con libvirt come mostrato di seguito:
[...] 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" [...]
Premi CTRL+O e premi ENTER per salvare le modifiche e premere CTRL+X per uscire dal file.
Passaggio 3: Riavvia libvirtd servizio:
$ sudo systemctl restart libvirtd
Passaggio 4: Assicurati che l'utente sia un membro di libvirt gruppo. In caso contrario, aggiungi l'utente a libvirt gruppo usando il comando:
$ sudo usermod -a -G libvirt $(whoami)
Passaggio 5: Infine avvia la VM:
$ virsh start
Se preferisci usare vagrant, esegui invece questo:
$ vagrant up
Questa volta la macchina virtuale dovrebbe avviarsi.
Passaggio 6: Verifica lo stato della VM:
$ virsh list
Oppure,
$ vagrant status
Metodo 2:
Un altro modo per risolvere il problema dell'autorizzazione KVM Libvirt è impostare l'autorizzazione ACL corretta per la directory del pool di archiviazione Libvirt. Nel mio caso, la directory del mio pool di archiviazione si trova in $HOME directory.
Passaggio 1: Otteniamo le attuali autorizzazioni ACL per $HOME directory.
$ sudo getfacl -e /home/sk/
Risultato di esempio:
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::---
Come puoi vedere nell'output sopra, il qemu l'utente non ha letto autorizzazione alla posizione del lotto di memoria. In alcune distribuzioni, il nome utente potrebbe essere libvirt-qemu .
Passaggio 2: Imposta il permesso di lettura ed eseguibile per l'utente qemu usando il comando:
$ sudo setfacl -m u:qemu:rx /home/sk/
Sostituisci qemu e /home/sk/ con il tuo.
Ora, l'utente qemu ha l'autorizzazione di lettura ed eseguibile sulla directory del pool di archiviazione. Puoi verificarlo usando il comando:
$ sudo getfacl -e /home/sk/
Risultato di esempio:
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::---
Passaggio 3: Riavvia il servizio libvirtd:
$ sudo systemctl restart libvirtd
Ora le macchine guest di Libvirt si avvieranno senza alcun problema.
Conclusione
In questa guida, abbiamo discusso del motivo per cui riceviamo l'errore "impossibile accedere al permesso del file di archiviazione negato" in KVM libvirt e come risolverlo in due modi diversi in Linux.