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.