Dnes jsem spustil svůj virtuální stroj Arch Linux pomocí virsh start
příkaz a skončil s touto chybou - 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
. Je to vlastně stroj Vagrant vytvořený s poskytovatelem KVM Libvirt.
Potom jsem znovu zkusil spustit virtuální počítač pomocí vagrant up
příkaz. Také se zobrazila stejná chyba.
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

Pro jistotu jsem ještě jednou zkusil spustit VM z GUI aplikace Virt-manager. Tentokrát také vrátil stejnou chybu.

Všechny chybové zprávy výslovně říkají, že qemu
uživatel nemá oprávnění ke čtení do adresáře úložiště Libvirt.
V tomto krátkém tutoriálu mi dovolte, abych vám ukázal, jak opravit "chybu:Nepodařilo se spustit doménu ... chyba:Nelze získat přístup k souboru úložiště .... (jako uid:107, gid:107):Oprávnění odepřeno" v KVM Libvirt .
Oprava „Nelze získat přístup k souboru úložiště, chyba byla odepřena“ v KVM Libvirt
Toto je jedna z běžných chyb KVM Libvirt. Tato chyba se obvykle objeví po změně cesty k výchozímu adresáři úložiště Libvirt .
Před několika dny jsem přesunul úložiště Libvirt do svého $HOME
adresář. Proto se mi zobrazuje tato chyba.
Můžeme to opravit dvěma způsoby.
Metoda 1:
Krok 1: Upravte /etc/libvirt/qemu.conf
soubor:
$ sudo nano /etc/libvirt/qemu.conf
Krok 2: Najděte user
a group
směrnice. Ve výchozím nastavení jsou oba nastaveny na "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" [...]
Odkomentujte oba řádky a nahraďte root
s vaším uživatelským jménem a skupinou s libvirt
jak je uvedeno níže:
[...] 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" [...]

Stiskněte CTRL+O
a stiskněte ENTER
pro uložení změn a stiskněte CTRL+X
pro ukončení souboru.
Krok 3: Restartujte libvirtd
služba:
$ sudo systemctl restart libvirtd
Krok 4: Ujistěte se prosím, že uživatel je členem libvirt
skupina. Pokud ne, přidejte uživatele do libvirt
seskupit pomocí příkazu:
$ sudo usermod -a -G libvirt $(whoami)
Krok 5: Nakonec spusťte VM:
$ virsh start
Pokud dáváte přednost použití vagrant, spusťte místo toho toto:
$ vagrant up
Tentokrát by se měl spustit virtuální počítač.
Krok 6: Zkontrolujte stav virtuálního počítače:
$ virsh list
Nebo,
$ vagrant status

Metoda 2:
Dalším způsobem, jak vyřešit problém s oprávněním KVM Libvirt, je nastavení správného oprávnění ACL pro adresář úložiště Libvirt. V mém případě se můj adresář úložiště nachází v $HOME
adresář.
Krok 1: Pojďme získat aktuální oprávnění ACL k $HOME
adresář.
$ sudo getfacl -e /home/sk/
Ukázkový výstup:
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::---
Jak vidíte ve výše uvedeném výstupu, qemu
uživatel nečetl povolení k umístění úložiště. V některých distribucích může být uživatelské jméno libvirt-qemu
.
Krok 2: Nastavte oprávnění ke čtení a ke spuštění pro uživatele qemu
pomocí příkazu:
$ sudo setfacl -m u:qemu:rx /home/sk/
Nahraďte qemu
a /home/sk/
s vlastními.
Nyní má uživatel qemu oprávnění ke čtení a ke spuštění v adresáři fondu úložiště. Můžete to ověřit pomocí příkazu:
$ sudo getfacl -e /home/sk/
Ukázkový výstup:
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::---
Krok 3: Restartujte službu libvirtd:
$ sudo systemctl restart libvirtd
Nyní se hostující stroje Libvirt spustí bez problémů.
Závěr
V této příručce jsme diskutovali o tom, proč se nám v KVM libvirt zobrazuje chyba „není možné získat oprávnění k souboru úložiště odepřeno“ a jak ji opravit dvěma různými způsoby v Linuxu.