Virsh , abbreviazione di Vir tuo Sh ell, è un'interfaccia utente a riga di comando per la gestione di macchine guest virtuali. Virsh consente di creare, elencare, modificare, avviare, riavviare, interrompere, sospendere, riprendere, spegnere ed eliminare VM. Attualmente supporta KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox e VMware ESX. In questa guida parleremo di come gestire KVM macchine virtuali con interfaccia utente di gestione Virsh in Linux.
Assicurati di aver installato l'utilità KVM e Virsh sulla tua macchina Linux. Le seguenti guide spiegano come installare KVM su sistemi basati su DEB e RPM.
- Installa e configura KVM in Ubuntu 20.04 Headless Server
- Installa e configura KVM nel server CentOS 8
- Installa e configura KVM in OpenSUSE Tumbleweed
1. Gestisci macchine virtuali KVM con il comando Virsh
Se non conosci Virsh e KVM, è meglio iniziare con la lettura del manuale di aiuto. Ti darà un'idea di base su come usare Virsh.
1.1. Ottenere aiuto
Immettere il comando seguente per visualizzare l'elenco dei comandi disponibili insieme a una breve descrizione:
$ virsh help
Vedrai un elenco completo di comandi virsh disponibili per gestire le macchine virtuali KVM dalla riga di comando.
Non devi memorizzare tutto. Basta leggere la descrizione di un comando che si desidera eseguire e utilizzarlo.
I comandi sono raggruppati nelle seguenti sezioni:
- Gestione del dominio,
- Monitoraggio del dominio,
- Host e Hypervisor,
- Punto di controllo,
- Interfaccia,
- Filtro di rete,
- Rete,
- Dispositivo nodo,
- Segreto,
- Istantanea,
- Backup,
- Piscina di stoccaggio,
- Volume di archiviazione,
- Virsh stesso.
Ogni sezione contiene i comandi relativi all'esecuzione di un particolare insieme di attività. Puoi visualizzare la sezione della guida di un gruppo, ad esempio Rete , come di seguito:
$ virsh help Networking
Vedrai i comandi relativi alle attività di rete:
Networking (help keyword 'network'): net-autostart autostart a network net-create create a network from an XML file net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy destroy (stop) a network net-dhcp-leases print lease info for a given network net-dumpxml network information in XML net-edit edit XML configuration for a network net-event Network Events net-info network information net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine a persistent network net-update update parts of an existing network's configuration net-uuid convert a network name to network UUID net-port-list list network ports net-port-create create a network port from an XML file net-port-dumpxml network port information in XML net-port-delete delete the specified network port
È inoltre possibile visualizzare ulteriormente la sezione della guida di un comando specifico. Ad esempio, visualizzerò la sezione della guida di "net-name" comando:
$ virsh help net-name NAME net-name - convert a network UUID to network name SYNOPSIS net-name <network> OPTIONS [--network] <string> network uuid
1.2. Elenca le macchine virtuali
Per visualizzare l'elenco delle macchine virtuali guest in modalità di esecuzione o sospensione, eseguire il comando seguente:
$ virsh list Id Name State --------------------
Come puoi vedere, non ci sono ospiti in modalità corsa o sospensione.
Puoi utilizzare --inattivo opzione per elencare gli ospiti inattivi.
Per visualizzare tutte le macchine guest, esegui:
$ virsh list --all Id Name State -------------------------------- - centos8-uefi shut off - nginx_centos8 shut off
Come puoi vedere nell'output sopra, ho due macchine virtuali:"centos8-uefi" e "nginx_centos8". Entrambi sono spenti.
1.3. Avvia macchine virtuali
Per avviare una macchina virtuale, ad esempio "centos8-uefi", esegui:
$ virsh start centos8-uefi
Vedrai un output come di seguito:
Domain centos8-uefi started
Per verificare se la VM è in esecuzione, usa "list" comando:
$ virsh list Id Name State ------------------------------ 1 centos8-uefi running
1.4. Salva macchine virtuali
Per salvare lo stato corrente di una macchina virtuale in esecuzione, esegui:
$ virsh save centos8-uefi centos8-save Domain centos8-uefi saved to centos8-save
Questo comando arresta il guest chiamato "centos8-uefi" e salva i dati in un file chiamato "centos8-save". Ci vorranno alcuni istanti a seconda della quantità di memoria utilizzata dal tuo computer ospite.
1.5. Ripristina macchine virtuali
Per ripristinare lo stato precedentemente salvato di una VM, basta specificare il nome del file come di seguito:
$ virsh restore centos8-save Domain restored from centos8-save
Verifica se la VM viene ripristinata utilizzando il comando "list":
$ virsh list Id Name State ------------------------------ 4 centos8-uefi running
1.6. Riavvia le macchine virtuali
Per riavviare una macchina virtuale in esecuzione, esegui:
$ virsh reboot centos8-uefi Domain centos8-uefi is being rebooted
1.7. Sospendi/Pausa macchine virtuali
Per sospendere una macchina virtuale in esecuzione, procedere come segue:
$ virsh suspend centos8-uefi Domain centos8-uefi suspended
Verificalo con il comando "list":
$ virsh list Id Name State ----------------------------- 1 centos8-uefi paused
1.8. Riprendi le macchine virtuali
Per riprendere la VM sospesa, esegui:
$ virsh resume centos8-uefi Domain centos8-uefi resumed
1.9. Arresta le macchine virtuali attive
Per arrestare forzatamente una macchina virtuale attiva e lasciarla nello stato inattivo, esegui:
$ virsh destroy centos8-uefi Domain centos8-uefi destroyed
Puoi anche arrestare con grazia la VM invece di forzarla come di seguito:
$ virsh destroy centos8-uefi --graceful Domain centos8-uefi destroyed
1.10. Spegnimento di macchine virtuali
Per spegnere una macchina virtuale in esecuzione, procedere come segue:
$ virsh shutdown centos8-uefi Domain centos8-uefi is being shutdown
1.11. Recupera il dump XML delle macchine virtuali
Per visualizzare il file di configurazione XML di una macchina virtuale nell'output standard, eseguire:
$ virsh dumpxml centos8-uefi
Questo comando visualizzerà i dettagli di configurazione completi (software e hardware) della macchina virtuale:
Puoi anche esportare il dump XML in un file invece di visualizzarlo semplicemente nell'output standard come di seguito:
$ virsh dumpxml centos8-uefi > centos8.xml
Questo comando scaricherà il file XML "centos8-uefi" in un file chiamato "centos8.xml" e lo salverà nella directory di lavoro corrente.
1.12. Crea macchine virtuali con dump XML
È possibile creare una nuova macchina guest virtuale utilizzando l'XML esistente dai guest precedentemente creati. Innanzitutto, crea un dump XML come mostrato sopra, quindi crea una nuova VM utilizzando il file XML come di seguito:
$ virsh create centos8.xml Domain centos8-uefi created from centos8.xml
Questo comando creerà una nuova VM e la avvierà immediatamente. Puoi verificarlo usando il comando:
1.13. Modifica il file di configurazione XML delle macchine virtuali
Se desideri apportare modifiche a una macchina guest, puoi semplicemente modificare il suo file di configurazione e apportare le modifiche come desideri. Gli ospiti possono essere modificati mentre sono in esecuzione o offline.
$ virsh edit centos8-uefi
Questo comando aprirà il file nel tuo editor predefinito che hai impostato con la variabile $EDITOR.
1.14. Abilita l'accesso alla console per le macchine virtuali
Dopo aver creato macchine guest KVM, puoi accedervi tramite SSH, client VNC, Virt-viewer, Virt-manager e console web Cockpit ecc. Tuttavia, non puoi accedervi usando il comando "virsh console". Il comando console viene utilizzato per connettere la console seriale virtuale per il guest. Per accedere ai guest KVM utilizzando il comando "virsh console", è necessario abilitare l'accesso alla console seriale nella macchina guest. Fare riferimento alla seguente guida per abilitare l'accesso alla console virsh:
- Come abilitare l'accesso alla console Virsh per gli ospiti KVM
1.15. Rinomina macchine virtuali
Se hai mai desiderato rinominare una macchina virtuale, fai riferimento alla seguente guida.
- Come rinominare la macchina virtuale guest KVM
1.16. Visualizza l'ID dominio delle macchine virtuali
Per trovare l'ID dominio di una macchina virtuale guest in esecuzione, esegui:
$ virsh domid centos8-uefi 2
Tieni presente che l'ospite dovrebbe essere in esecuzione per ottenere il suo ID dominio.
1.17. Visualizza il nome di dominio delle macchine virtuali
Per ottenere il nome di dominio di una VM in esecuzione, eseguire:
$ virsh domname <domain-id or domain-uuid>
Esempio:
$ virsh domname 2 centos8-uefi
Qui, 2 è l'ID dominio.
1.18. Visualizza l'UUID delle macchine virtuali
Per trovare l'UUID della macchina guest, esegui:
$ virsh domuuid <domain-name or domain-id>
Esempio:
$ virsh domuuid centos8-uefi
Oppure,
$ virsh domuuid 2
Risultato di esempio:
de4100c4-632e-4c09-8dcf-bbde29170268
1.19. Visualizza i dettagli delle macchine virtuali
Per visualizzare le informazioni di una macchina ospite, usa il nome di dominio, l'id di dominio o l'uuid di dominio come di seguito:
$ virsh dominfo centos8-uefi
Oppure,
$ virsh dominfo 2
Oppure,
$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268
Risultato di esempio:
Id: -
Name: centos8-uefi
UUID: de4100c4-632e-4c09-8dcf-bbde29170268
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
1.20. Visualizza le informazioni sull'host KVM
Per ottenere le informazioni sul tuo sistema host, esegui:
$ virsh nodeinfo
Risultato di esempio:
CPU model: x86_64
CPU(s): 4
CPU frequency: 1167 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 2
NUMA cell(s): 1
Memory size: 8058840 KiB
1.21. Visualizza le informazioni sulla CPU virtuale
Per visualizzare le informazioni sulla CPU virtuale, esegui:
$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>
Esempio:
$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy
VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy
1.22. Trova l'indirizzo IP delle macchine virtuali
Trovare l'indirizzo IP di una macchina virtuale non è un grosso problema. Se hai l'accesso da console alla macchina virtuale, puoi facilmente trovare il suo indirizzo IP usando il comando "ip". Tuttavia, è anche possibile identificare l'indirizzo IP di una macchina virtuale KVM senza dover accedere alla sua console. La seguente guida spiega come trovare l'indirizzo IP di una macchina virtuale KVM.
- Come trovare l'indirizzo IP di una macchina virtuale KVM
1.23. Elimina macchine virtuali
Se non vuoi più una VM, eliminala semplicemente come di seguito:
$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi
Il primo comando arresterà forzatamente la VM se è già in esecuzione. E il secondo comando annullerà la definizione e lo cancellerà completamente.
È inoltre possibile utilizzare le seguenti opzioni per eliminare anche i volumi di archiviazione e gli snapshot.
--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)
2. Gestisci le reti virtuali
Spero che tu abbia imparato a gestire le macchine virtuali KVM con il comando Virsh in Linux. Questa sezione elenca i comandi importanti per gestire le reti virtuali KVM in Linux utilizzando l'utilità della riga di comando virsh.
2.1. Elenca le reti virtuali
Per elencare le reti virtuali disponibili, esegui:
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
Come puoi vedere, ho solo una rete virtuale che è quella predefinita.
2.2. Visualizza i dettagli della rete virtuale
Per visualizzare i dettagli di una rete virtuale, eseguire:
$ virsh net-dumpxml default
Sostituisci "predefinito" con il nome della tua rete nel comando precedente.
Risultato di esempio:
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.3. Avvia reti virtuali
Per avviare una rete inattiva, esegui:
$ virsh net-start <Name-Of-Inactive-Network>
Per avviare automaticamente una rete:
$ virsh net-autostart <network-name>
2.4. Crea dump XML di reti virtuali
Per creare il file di configurazione XML di una rete virtuale esistente, eseguire:
$ virsh net-dumpxml default > default.xml
Il comando precedente creerà la configurazione XML della rete "predefinita" e la salverà in un file chiamato "default.xml" nella directory corrente.
Puoi visualizzare il file XML usando il comando cat:
$ cat default.xml
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.5. Crea nuove reti virtuali da file XML
Per creare una nuova rete virtuale utilizzando un file XML esistente e avviarlo immediatamente, eseguire:
$ virsh net-create <Name-of-XMLfile>
Se vuoi creare una rete da un file XML ma non vuoi avviarla automaticamente, esegui:
$ virsh net-define <Name-of-XMLfile>
2.6. Disattiva le reti virtuali
Per disattivare una rete attiva, esegui:
$ virsh net-destroy <network-name>
2.7. Elimina le reti virtuali
Per eliminare una rete virtuale, disattivala prima come mostrato sopra e poi esegui:
$ virsh net-undefine <Name-Of-Inactive-Network>
Virsh ha molti comandi e opzioni. Imparare a usare a fondo lo strumento da riga di comando di Virsh è appena sufficiente per configurare un ambiente virtuale completo in Linux. Non hai bisogno di alcuna applicazione GUI.
Per maggiori dettagli, fare riferimento alle pagine man di virsh.
$ man virsh
3. Gestisci graficamente i guest KVM
Ricordare tutti i comandi virsh è quasi impossibile e anche inutile. Se trovi difficile eseguire tutte le attività di gestione KVM dalla riga di comando, puoi provare strumenti di gestione KVM grafici come Virt-manager e Cockpit.
- Gestisci macchine virtuali KVM utilizzando Cockpit Web Console
- Come gestire macchine virtuali KVM con Virt-Manager
Conclusione
Se sai come gestire le macchine virtuali KVM con l'interfaccia utente di gestione Virsh in Linux, sei a metà strada per gestire un ambiente di virtualizzazione di livello aziendale. La configurazione di KVM e la gestione delle macchine virtuali KVM utilizzando il comando virsh sono molto importanti per tutti gli amministratori Linux.
Immagine in primo piano di Elias Sch. da Pixabay.