GNU/Linux >> Belajar Linux >  >> Linux

[Terpecahkan] Tidak dapat mengakses file penyimpanan, Izin ditolak Kesalahan di KVM Libvirt

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.


Linux
  1. Cara Memperbaiki Kesalahan – ModSecurity:Akses ditolak dengan kode 44 [Apache]

  2. (Terpecahkan) Tidak dapat membuka kotak surat /var/mail/user:Izin ditolak kesalahan di Linux

  3. Git tidak dapat membuat izin file ditolak

  1. GALAT 1045 (28000):Akses ditolak untuk pengguna 'root'@'localhost' (menggunakan kata sandi:YA)

  2. izin ditolak pada file authorized_key

  3. mount error 13 =Izin ditolak

  1. pip freeze mengembalikan kesalahan:Izin ditolak:hg

  2. Kesalahan Akses ditolak membutuhkan hak PROSES [MySQL]

  3. Kesalahan "530:izin ditolak" saat pengguna masuk ke server vsftpd melalui ftp