Dopo aver creato una nuova macchina virtuale, potresti voler condividere file e cartelle tra l'host KVM e la macchina virtuale KVM. In questa breve guida, vedremo come configurare una cartella condivisa tra host KVM e macchina virtuale guest utilizzando Virt-manager in Linux.
Prima di configurare una cartella condivisa, assicurati di aver installato Virt-manager sul tuo host KVM.
- Come gestire macchine virtuali KVM con Virt-Manager
Se hai già installato il gruppo di pacchetti di virtualizzazione KVM completo, non è necessario installare Virt-manager separatamente. Virt-manager fa parte del gruppo di pacchetti di virtualizzazione KVM. In caso contrario, potrebbe essere necessario installarlo come mostrato nel link sopra.
Crea una nuova macchina virtuale dall'interfaccia Virt-manager. È molto semplice e diretto! Non avviare ancora la VM. Dobbiamo creare una cartella condivisa nel nostro host KVM.
Crea cartelle condivise nell'host KVM
Crea una nuova cartella condivisa nel tuo sistema host KVM che desideri condividere con le macchine guest.
Ai fini di questa guida, ho creato una cartella condivisa denominata "KVM_Share
" nel mio $HOME
directory.
[[email protected] ~]$ mkdir ~/KVM_Share
Quindi, imposta le autorizzazioni richieste per la cartella condivisa. Volevo modificare e modificare il contenuto di questa cartella condivisa dalle mie macchine virtuali guest, quindi ho concesso i permessi completi alla cartella condivisa.
[[email protected] ~]$ chmod 777 ~/KVM_Share
Quindi imposta il tipo SELinux corretto per la cartella condivisa KVM:
$ sudo semanage fcontext -a -t svirt_image_t "/home/sk/KVM_Share(/.*)?"
Questo comando imposta il contesto del file predefinito per qualsiasi cosa sotto e inclusa la cartella condivisa, ad esempio /home/sk/KVM_Share
nel nostro caso.
Dopo aver eseguito il comando precedente, aggiunge una riga a /etc/selinux/targeted/contexts/files/file_contexts.local
file che rende la modifica persistente.
La riga aggiunta potrebbe assomigliare a questa:
$ cat /etc/selinux/targeted/contexts/files/file_contexts.local This file is auto-generated by libsemanage Do not edit directly. /usr/lib/chromium-browser system_u:object_r:bin_t:s0 /usr/lib/chromium-browser/chromium-browser.sh system_u:object_r:bin_t:s0 /usr/lib/chrome-sandbox system_u:object_r:chrome_sandbox_exec_t:s0 /home/sk/KVM_Share(/.*)? system_u:object_r:svirt_image_t:s0
Quindi, esegui il comando seguente per dire a SELinux di ripristinare i contesti dei file su tutto ciò che si trova sotto la directory condivisa a ciò che abbiamo come predefinito (cioè cosa cambia il semanage).
$ sudo restorecon -vR /home/sk/KVM_Share
Se non si imposta il tipo SELinux corretto per la cartella condivisa KVM, si verificherà il seguente errore all'avvio della VM.
Error starting domain: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 65, in cb_wrapper callback(asyncjob, *args, *kwargs) File "/usr/share/virt-manager/virtManager/asyncjob.py", line 101, in tmpcb callback(args, **kwargs) File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn ret = fn(self, *args, **kwargs) File "/usr/share/virt-manager/virtManager/object/domain.py", line 1329, in startup self._backend.create() File "/usr/lib64/python3.9/site-packages/libvirt.py", line 1353, in create raise libvirtError('virDomainCreate() failed') libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied
Ora è il momento di configurare la cartella condivisa in Virt-manager.
Imposta una cartella condivisa tra host KVM e guest
Apri Virt-manager e assicurati che il sistema guest sia spento. Seleziona la macchina ospite e fai clic su Apri pulsante sulla barra dei menu per mostrare la console e i dettagli della macchina virtuale.
Nella finestra successiva, fai clic su "Mostra dettagli hardware virtuali" nella barra dei menu e fai clic su "Aggiungi hardware" pulsante nel riquadro di sinistra.
Fai clic sulla scheda "Filesystem" nel riquadro di sinistra e inserisci la posizione della cartella condivisa nel percorso di origine e inserisci il tag di montaggio nel percorso di destinazione. Qui, sto condividendo "~/KVM_Share"
directory e il mio tag di montaggio è /hostshare
. Puoi specificare il nome di mount_tag come desideri. Tieni presente che mount_tag non è un percorso. Il mount_tag è solo un nome usato per identificare la condivisione dell'host. Fai clic su Fine e applica per aggiornare le modifiche.
Un'ultima cosa da fare è selezionare la modalità di accesso corretta per accedere alla cartella condivisa.
Ci sono tre valori possibili. Sono passthrough
, mapped
e squash
.
- passthrough - Specifica che si accede all'origine (ovvero alla cartella condivisa) con le impostazioni di autorizzazione dell'utente che sono impostate dall'interno della macchina virtuale guest. ovvero i file vengono archiviati utilizzando le stesse credenziali create sul guest. Questa è la modalità di accesso predefinita se non ne viene specificata una.
- mappato - Specifica che si accede all'origine con le impostazioni di autorizzazione dell'hypervisor. Se vuoi avere accesso in lettura e scrittura dalla macchina ospite, devi scegliere questa modalità.
- zucca - Simile a 'passthrough', l'eccezione è il fallimento di operazioni privilegiate come
chown
vengono ignorati. Ciò rende utilizzabile una modalità simile al passthrough per le persone che eseguono l'hypervisor come non root.
Dopo aver selezionato la modalità di accesso preferita, fare clic sul pulsante Applica. Abbiamo ora configurato la cartella condivisa per l'host KVM e il sistema guest da Virt-manager.
Ora, accendi la macchina virtuale guest e crea un punto di montaggio nella tua macchina guest per montare la cartella condivisa del sistema host KVM:
[[email protected] ~]$ mkdir ~/hostfiles
Infine, monta la cartella condivisa nella macchina guest usando il comando:
[[email protected] ~]$ sudo mount -t 9p -o trans=virtio /hostshare hostfiles/
La cartella condivisa ~/KVM_Share
è montato su hostfiles
directory nella tua macchina virtuale. D'ora in poi, puoi accedere ai contenuti della cartella condivisa dalla tua macchina virtuale guest. Puoi anche modificare ed eliminare il contenuto della cartella condivisa su entrambi i sistemi host e guest KVM.
Per montare automaticamente la cartella condivisa ogni volta all'avvio, aggiungi la seguente riga a /etc/fstab
file nel tuo sistema ospite:
/hostshare /hostfiles 9p trans=virtio,version=9p2000.L,rw 0 0
Spero che questo aiuti.