Hari ini, saya memulai mesin virtual Arch Linux saya menggunakan virsh start
perintah dan berakhir dengan kesalahan ini - 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
. Ini sebenarnya adalah mesin Vagrant yang dibuat dengan penyedia KVM Libvirt.
Kemudian, saya mencoba lagi untuk memulai VM menggunakan vagrant up
memerintah. Itu juga menampilkan kesalahan yang sama.
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
Untuk memastikannya, saya mencoba sekali lagi untuk memulai VM dari aplikasi GUI Virt-manager. Kali ini juga mengembalikan kesalahan yang sama.
Semua pesan kesalahan secara eksplisit mengatakan bahwa qemu
pengguna tidak memiliki izin membaca ke direktori penyimpanan Libvirt.
Dalam tutorial singkat ini, izinkan saya menunjukkan kepada Anda cara memperbaiki "kesalahan:Gagal memulai domain ... kesalahan:Tidak dapat mengakses file penyimpanan .... (sebagai uid:107, gid:107):Izin ditolak" di KVM Libvirt .
Perbaiki "Tidak dapat mengakses file penyimpanan, Izin ditolak Kesalahan" di KVM Libvirt
Ini adalah salah satu kesalahan KVM Libvirt yang umum. Kesalahan ini biasanya akan terjadi setelah mengubah jalur direktori penyimpanan default Libvirt .
Beberapa hari yang lalu, saya memindahkan lokasi penyimpanan Libvirt ke $HOME
. saya direktori. Itu sebabnya saya mendapatkan kesalahan ini.
Kami dapat memperbaikinya dengan dua cara.
Metode 1:
Langkah 1: Edit /etc/libvirt/qemu.conf
berkas:
$ sudo nano /etc/libvirt/qemu.conf
Langkah 2: Temukan user
dan group
arahan. Secara default, keduanya disetel ke "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" [...]
Batalkan komentar pada kedua baris dan ganti root
dengan nama pengguna dan grup Anda dengan libvirt
seperti yang ditunjukkan di bawah ini:
[...] 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" [...]
Tekan CTRL+O
dan tekan ENTER
untuk menyimpan perubahan dan tekan CTRL+X
untuk keluar dari file.
Langkah 3: Mulai ulang libvirtd
layanan:
$ sudo systemctl restart libvirtd
Langkah 4: Pastikan pengguna adalah anggota libvirt
kelompok. Jika tidak, tambahkan pengguna ke libvirt
grup menggunakan perintah:
$ sudo usermod -a -G libvirt $(whoami)
Langkah 5: Akhirnya mulai VM:
$ virsh start
Jika Anda lebih suka menggunakan gelandangan, jalankan ini sebagai gantinya:
$ vagrant up
Kali ini mesin Virtual akan mulai.
Langkah 6: Periksa status VM:
$ virsh list
Atau,
$ vagrant status
Metode 2:
Cara lain untuk memperbaiki masalah izin KVM Libvirt adalah dengan mengatur izin ACL yang tepat ke direktori kumpulan penyimpanan Libvirt. Dalam kasus saya, direktori kumpulan penyimpanan saya terletak di $HOME
direktori.
Langkah 1: Mari kita dapatkan izin ACL saat ini ke $HOME
direktori.
$ sudo getfacl -e /home/sk/
Contoh keluaran:
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::---
Seperti yang Anda lihat pada output di atas, qemu
pengguna belum membaca izin ke lokasi kolam penyimpanan. Di beberapa distribusi, nama pengguna mungkin libvirt-qemu
.
Langkah 2: Setel izin baca dan eksekusi untuk pengguna qemu
menggunakan perintah:
$ sudo setfacl -m u:qemu:rx /home/sk/
Ganti qemu
dan /home/sk/
dengan milik Anda.
Sekarang, pengguna qemu telah membaca dan menjalankan izin atas direktori kumpulan penyimpanan. Anda dapat memverifikasinya menggunakan perintah:
$ sudo getfacl -e /home/sk/
Contoh keluaran:
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::---
Langkah 3: Mulai ulang layanan libvirtd:
$ sudo systemctl restart libvirtd
Sekarang mesin tamu Libvirt akan mulai tanpa masalah.
Kesimpulan
Dalam panduan ini, kami membahas mengapa kami mendapatkan kesalahan "tidak dapat mengakses izin file penyimpanan ditolak" di KVM libvirt dan cara memperbaikinya dengan dua cara berbeda di Linux.