Questa guida spiega cosa sono gli storage pool e i volumi in Libvirt e come modificare la posizione dello storage pool predefinito di libvirt KVM utilizzando Virsh programma, Virt-manager e Pozzetto in Linux.
Pool e volumi di archiviazione in Libvirt
Libvirt fornisce la gestione dello storage su un sistema host KVM tramite storage pool e volumi.
Uno storage pool è una quantità di storage allocata sull'host KVM per l'utilizzo da parte delle macchine virtuali. Uno storage pool è suddiviso in volumi di storage e assegnato alle VM come dispositivi a blocchi.
Per dirla in altre parole, un pool di archiviazione è una risorsa di archiviazione sul sistema host KVM che può essere utilizzata per archiviare i volumi. E il volume di archiviazione è un dispositivo di archiviazione che può essere assegnato a una macchina virtuale.
Un volume di archiviazione può essere un dispositivo a blocchi, ad esempio una partizione, un volume logico o un file. I dischi rigidi virtuali, i dispositivi cd/dvd/floppy e le immagini ISO allegate alle macchine guest sono esempi di volumi di archiviazione.
Non è possibile avere un volume di archiviazione senza pool di archiviazione. Innanzitutto, devi creare un pool di archiviazione e quindi creare i volumi di archiviazione all'interno del pool.
Per impostazione predefinita, tutte le macchine virtuali create con libvirt sono archiviate in /var/lib/libvirt/images/
Posizione. Questo è lo storage pool predefinito per le immagini Libvirt VM.
Tipi di storage pool
Un pool di archiviazione può essere uno dei seguenti tipi:
- Pool di directory:utilizzare una directory come pool per l'hosting di file di immagine. I file possono essere uno dei tipi di formato di volume validi come immagini raw, qcow, qcow2, dmg, vmdk, vpc o ISO.
- Pool di filesystem:utilizza un dispositivo a blocchi (ad es. partizione o gruppo LVM) come pool invece di una directory using su un filesystem montato esistente.
- Pool di filesystem di rete:utilizza un filesystem di rete (ad es.
cifs
,glusterfs
,nfs
ecc.) come un pool per archiviare i volumi di archiviazione. Invece di una directory o di un dispositivo a blocchi, richiede un host di rete e il percorso di una directory condivisa. - Pool di volumi logici:utilizza un gruppo di volumi LVM come pool per archiviare i volumi.
- Pool di dischi:utilizza un disco fisico come pool. I volumi possono essere creati aggiungendo partizioni al disco.
- Pool iSCSI:utilizzare una destinazione iSCSI per archiviare i volumi. Tutti i volumi devono essere preallocati sul server iSCSI.
- pool diretto iSCSI:questa è una variante del pool iSCSI. Invece di usare iscsiadm, usa
libiscsi
. Richiede un host, un percorso che è l'IQN di destinazione e un IQN iniziatore. - Pool SCSI:utilizza un adattatore bus host SCSI quasi allo stesso modo di una destinazione iSCSI.
- Pool Multipath - Al momento, Multipath non è supportato.
- Pool RBD:questo driver di archiviazione fornisce un pool che contiene tutte le immagini RBD in un pool RADOS. RBD (RADOS Block Device) fa parte del progetto di storage distribuito Ceph.
- Pool Sheepdog:utilizza Sheepdog Cluster come pool per archiviare i volumi.
- Pool Gluster:utilizza il file system distribuito Gluster come pool.
- Pool ZFS:utilizza il filesystem ZFS come pool.
- Pool Vstorage:utilizza lo storage software-defined distribuito Virtuozzo come pool.
Ai fini di questa guida, utilizzeremo Directory pool
.
1. Modifica la posizione dello storage pool predefinito di KVM Libvirt
Come già affermato, tutte le immagini KVM/Libvirt sono archiviate in /var/lib/libvirt/images/
posizione per impostazione predefinita. Poiché questa posizione risiede nel rootfs
partizione, potresti volerlo spostare in un'altra posizione, ad esempio $HOME
directory.
Possiamo cambiare la posizione predefinita delle immagini KVM Libvirt VM usando virsh
programma a riga di comando e il suo front-end grafico chiamato Virt-manager e anche Pozzetto console web.
Innanzitutto, vedremo come modificare il percorso del pool di archiviazione predefinito di Libvirt utilizzando virsh
programma.
1.1. Modifica la posizione dello storage pool predefinito di KVM Libvirt utilizzando il programma virsh
1.1.1. Accedi al tuo sistema host KVM e spegni tutti i guest in esecuzione.
Per trovare l'elenco delle macchine virtuali in esecuzione, fai semplicemente:
$ virsh list --all
Arresta se ci sono VM in esecuzione.
$ arresto virtuale
1.1.2. Elenca tutti gli storage pool configurati nella tua macchina host KVM:
$ virsh pool-list
Risultato di esempio:
Name State Autostart default active no
Come puoi vedere, ho solo un pool di archiviazione, che è il default
. Viene creato automaticamente quando installiamo kvm/libvirt
.
1.1.3. Vediamo i dettagli del pool di archiviazione predefinito utilizzando il comando:
$ virsh pool-info default
Risultato di esempio:
Name: default UUID: 76f47a3c-7656-4c34-9ab5-c87e5136d532 State: running Persistent: yes Autostart: no Capacity: 369.22 GiB Allocation: 65.60 GiB Available: 303.62 GiB
L'output sopra elenca i dettagli come nome del pool di archiviazione, UUID, stato, persistente, avvio automatico, capacità, spazio allocato del pool di archiviazione e spazio disponibile rimanente.
Dal momento che cambieremo il percorso dello storage pool, dobbiamo trovarlo anche noi.
1.1.4. Per visualizzare il percorso del pool di archiviazione predefinito, utilizziamo grep comando con virsh
come di seguito:
$ virsh pool-dumpxml default | grep -i path
Risultato di esempio:
<path>/var/lib/libvirt/images</path>
Come puoi vedere nell'output sopra, il pool di archiviazione predefinito è /var/lib/libvirt/images/
. Lo cambieremo nei passaggi successivi.
1.1.5. Elenca tutte le immagini di macchine virtuali esistenti archiviate nel pool di archiviazione predefinito utilizzando virsh
come di seguito:
$ virsh vol-list default | grep "/var/lib/libvirt/images/"
Risultato di esempio:
archlinux.img /var/lib/libvirt/images/archlinux.img
Ho un'immagine di macchina virtuale Arch Linux nel pool di archiviazione predefinito.
1.1.6. Arresta e annulla la definizione del pool di archiviazione predefinito con il comando:
$ virsh pool-destroy default
$ virsh pool-undefine default
1.1.7. Modifica il pool di archiviazione predefinito utilizzando il comando:
$ virsh pool-edit default
Questo aprirà il file XML della VM nell'editor predefinito.
Trova la riga che legge "<path>/var/lib/libvirt/images</path>"
sotto il target
direttiva e cambiala in un nuovo percorso a tua scelta.
Nel mio caso, ho modificato il <path>
elemento da /var/lib/libvirt/images
su /home/sk/.local/share/libvirt/images
.
<pool type='dir'> <name>default</name> <uuid>76f47a3c-7656-4c34-9ab5-c87e5136d532</uuid> <capacity unit='bytes'>396452147200</capacity> <allocation unit='bytes'>71178977280</allocation> <available unit='bytes'>325273169920</available> <source> </source> <target> <path>/home/sk/.local/share/libvirt/images</path> <permissions> <mode>0755</mode> <owner>1000</owner> <group>1000</group> <label>unconfined_u:object_r:svirt_home_t:s0</label> </permissions> </target> </pool>
Assicurati solo che il nuovo percorso esista. Se esiste, crealo e assegna autorizzazioni sufficienti alla nuova directory del percorso. Salva il file e chiudilo.
SUGGERIMENTO:
Se non esiste un pool di archiviazione predefinito per qualsiasi motivo, puoi crearne uno come di seguito:
$ virsh pool-define-as --name default --type dir --target /home/sk/.local/share/libvirt/images/
Sostituisci il percorso di archiviazione con il tuo.
1.1.8. Infine, avvia il pool di archiviazione predefinito:
$ virsh pool-start default
1.1.9. Imposta lo storage pool per l'avvio automatico all'avvio del sistema:
$ virsh pool-autostart default
1.1.10. Verificare se il percorso del pool di archiviazione libvirt è stato modificato o meno con il comando:
$ virsh pool-dumpxml default | grep -i path
Ora dovresti vedere il nuovo percorso.
/home/sk/.local/share/libvirt/images
D'ora in poi, le immagini virtuali verranno salvate nel nuovo pool di archiviazione.
1.1.11. Controlla lo stato del pool di archiviazione:
$ virsh pool-list Name State Autostart ------------------------------- default active yes
1.1.12. Riavvia il servizio libvirtd:
$ sudo systemctl restart libvirtd
1.1.13. Dobbiamo fare un'ultima cosa. Copia tutte le immagini della macchina virtuale dal vecchio percorso di archiviazione a quello nuovo:
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
Tutto fatto!
Questo è il modo in cui cambiamo la posizione dello storage pool predefinito di KVM Libivrt in una nuova dalla riga di comando usando Virsh
programma. Come puoi vedere, modificare il percorso di archiviazione predefinito per i guest KVM/Libvirt è abbastanza semplice!
Ora diamo un'occhiata a come modificare il percorso del pool di archiviazione predefinito di Libvirt utilizzando un'applicazione grafica denominata Virt-manager
.
1.2. Modificare la posizione dello storage pool predefinito di KVM Libvirt utilizzando Virt-manager
Gestore virtuale , abbreviazione di Virtual Machine Manager, è un'applicazione di interfaccia utente grafica utilizzata per la gestione di macchine virtuali tramite libvirt
. Per dirla in altre parole, Virt-manager è un semplice front-end grafico per libvirt
.
1.2.1. Aprire l'applicazione Virt-manager. Fare clic con il pulsante destro del mouse su QEMU/KVM e fare clic su Dettagli opzione.
Puoi anche fare clic su Modifica-> Dettagli connessione dall'interfaccia Virt-manager.
1.2.2. Sotto Archiviazione sezione, vedrai la posizione del pool di archiviazione predefinito.
1.2.3. Fai clic su Interrompi pool e poi Elimina pool opzioni nel riquadro in basso a sinistra.
Questo disattiverà ed eliminerà il pool predefinito.
1.2.4. Fai clic sul più (+) firmare nel riquadro in basso a sinistra per creare un nuovo pool di archiviazione per l'utilizzo da parte delle macchine virtuali.
Immettere il nome per il pool di archiviazione (ad es. default
nel mio caso). Scegli il tipo di piscina. Nel nostro caso, ho selezionato Filesystem Directory . Specifica la posizione di destinazione e fai clic su Fine.
1.2.5. Ora il nuovo Storage è attivo. Controlla Avvio automatico casella per avviare automaticamente il nuovo pool di archiviazione all'avvio del sistema.
1.2.6. Sposta tutte le immagini della macchina virtuale dalla vecchia directory di archiviazione a quella nuova.
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
1.2.7. Infine, riavvia il servizio libvirtd:
$ sudo systemctl restart libvirtd
1.3. Modifica la posizione dello storage pool predefinito di KVM Libvirt utilizzando Cockpit
Pozzetto è uno strumento gratuito di amministrazione del server basato sul web per monitorare e amministrare i server Linux tramite un browser web.
1.3.1 Apri il tuo browser web e accedi alla console Cockpit navigando su http://localhost:9090 o http://indirizzo-IP:9090 dalla barra degli indirizzi.
1.3.2. Fai clic su Macchine virtuali scheda nel riquadro di sinistra. Sul lato destro, fai clic su Pool di archiviazione opzione.
1.3.3. Nella sezione Storage pool, vedrai il pool di archiviazione predefinito. Fare clic sulla piccola freccia per espandere la scheda dei pool di archiviazione e fare clic su Disattiva e Elimina pulsanti.
Nota: Poiché ho già modificato la posizione di archiviazione predefinita, mostra il nuovo percorso. Nel tuo sistema, mostrerà il vecchio percorso predefinito, ad esempio /var/lib/libvirt/images
.
1.3.4. Immettere il nome del pool di archiviazione, il tipo e il percorso di destinazione e fare clic su Crea . Assicurati che la casella di controllo Avvio sia selezionata.
1.3.5. Fai clic su Attiva pulsante per avviare la piscina.
1.3.6. Sposta tutte le immagini della macchina virtuale dalla vecchia directory di archiviazione a quella nuova.
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
1.3.7. Riavvia il servizio libvirtd:
$ sudo systemctl restart libvirtd
Risoluzione dei problemi
Dopo aver modificato il percorso del pool di archiviazione, probabilmente si verificherà il seguente errore all'avvio di una macchina virtuale:
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.
Questo perché il qemu
l'utente potrebbe non disporre dell'autorizzazione di lettura per la directory di archiviazione. Per risolverlo, fai riferimento al seguente link:
- [Risolto] Impossibile accedere al file di archiviazione, autorizzazione negata Errore in KVM Libvirt
Conclusione
In questa guida, abbiamo discusso un importante argomento KVM/Libvirt:pool di archiviazione . Abbiamo appreso cosa sono gli storage pool e i volumi e quindi come modificare la posizione dello storage pool predefinito di kvm libvirt utilizzando tre programmi, vale a dire VIrsh, Virt-manager e Cockpit. Spero che lo trovi utile.