Attenzione! Questa è una Pagina di prova. Le informazioni riportate potrebbero essere incomplete, errate e potenzialmente pericolose. Per contribuire alla realizzazione di questa pagina consultare la discussione di riferimento. |
Guida verificata con Ubuntu: 22.04 24.04 25.04 25.10
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
Questa pagina fornisce una guida completa all'installazione e alla configurazione di KVM (Kernel-based Virtual Machine), la soluzione di virtualizzazione nativa del kernel Linux, su Ubuntu 22.04 e versioni successive. KVM offre prestazioni quasi native ed è la tecnologia di virtualizzazione preferita su Linux.
Preparativi
Come stabilire se la CPU supporta la virtualizzazione dell' hardware
Per utilizzare appieno le prestazioni di KVM, è indispensabile che il processore supporti le estensioni di virtualizzazione hardware. Queste sono note come Intel VT-x (per processori Intel, nome in codice Vanderpool) e AMD-V (per processori AMD, nome in codice Pacifica).
Per verificare se il processore supporta la virtualizzazione, digitare il seguente comando in una finestra di terminale:
lscpu | grep Virtualization
- Se la risposta mostra "VT-x" o "AMD-V", il supporto hardware è presente.
- Se non viene visualizzata alcuna riga relativa alla virtualizzazione, o se il comando precedente non restituisce nulla, la CPU potrebbe non supportarla o l'opzione potrebbe essere disabilitata nel BIOS/UEFI.
Verifica avanzata e stato di /dev/kvm:
Un modo più diretto per verificare la disponibilità di KVM è usare l'utility kvm-ok.
Se il comando kvm-ok non è trovato, installare il pacchetto cpu-checker.
Digitare il seguente comando in una finestra di terminale:
kvm-ok
Che restituira una risposta simile a:
INFO: Your CPU supports KVM extensions INFO: /dev/kvm exists KVM acceleration can be used
Se invece il messaggio sarà:
INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be used
significa che le estensioni hardware non sono disponibili. Senza le estensioni KVM, sarà comunque possibile eseguire macchine virtuali, ma risulteranno significativamente più lente.
Potrebbe essere necessario abilitarle nel BIOS/UEFI del sistema (spesso sotto voci come "Virtualization Technology", "Intel VT-d", "AMD-V").
Kernel a 64 bit (raccomandato)
L'esecuzione di un kernel a 64 bit sul sistema host è fortemente raccomandata per sfruttare al meglio KVM.
- Un sistema a 64 bit può ospitare sia macchine virtuali a 64 bit che a 32 bit.
- Un sistema a 32 bit può ospitare solo macchine virtuali a 32 bit e ha una limitazione di RAM per VM a circa 2 GB.
Per offrire più di 2047 MB di RAM a una macchina virtuale, si deve usare un kernel a 64 bit sul sistema host.
Per verificare che il kernel sia a 64 bit, digitare il seguente comando in una finestra di terminale:
uname -m
Il risultato x86_64 indica che è in uso un kernel a 64-bit.
Risultati come i386, i486, i586 o i686 indicano un kernel a 32 bit.
Installazione
Per le seguenti impostazioni, si assume una configurazione standard, adatta sia per desktop che per server (anche senza ambiente grafico, sebbene si consigli virt-manager per la facilità d'uso).
Installare i seguenti pacchetti:
sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
Descrizione dei pacchetti:
qemu-kvm: Il backend principale che fornisce l'accelerazione hardware KVM tramite QEMU. Guida.
libvirt-daemon-system: Il demone libvirtd che gestisce le istanze KVM e QEMU. È l'interfaccia principale per KVM.
libvirt-clients: Contiene gli strumenti client (come virsh) per interagire con libvirtd.
bridge-utils: Utilità per la configurazione del networking in bridge, utile per integrare le VM nella rete fisica.
virtinst: Strumenti a riga di comando per la creazione rapida di macchine virtuali.
virt-manager: Un'interfaccia grafica (GUI) molto intuitiva e potente per la gestione delle macchine virtuali KVM. Fortemente raccomandato per la maggior parte degli utenti.
Aggiungere utenti ai gruppi
Per poter gestire le macchine virtuali KVM senza dover usare i privilegi di amministrazione per ogni comando o per avviare virt-manager, è necessario che l'utente appartenga al gruppo libvirt.
Durante l'installazione di libvirt-daemon-system, l'utente dovrebbe essere aggiunto automaticamente al gruppo libvirt. Tuttavia, per sicurezza e per rendere la modifica effettiva, è buona norma aggiungere l'utente manualmente e poi riautenticarsi.
Aggiungere il nome utente al gruppo libvirt:
sudo usermod -a -G libvirt $(whoami)
Dopo aver eseguito questo comando, è obbligatorio disconnettersi e accedere nuovamente (o riavviare il sistema) affinché l'appartenenza al gruppo sia attiva. In alternativa, è possibile usare newgrp libvirt in un terminale per applicare la modifica solo a quella sessione.
Per verificare l'appartenenza ai gruppi, è possibile usare:
groups
Dovrebbe essere visualizzato libvirt tra i gruppi elencati.
Verifica dell'installazione
Per verificare se l'installazione è avvenuta con successo e che il demone libvirtd è in esecuzione e accessibile, usare il seguente comando:
virsh -c qemu:///system list --all
Se l'installazione è corretta e i permessi sono corretti, si vedrà un output simile a:
Id Name State --------------------
(o un elenco delle macchine virtuali, se ne sono già state create).
Avvio del servizio Libvirt
Il servizio libvirtd dovrebbe essere avviato automaticamente dopo l'installazione e configurato per avviarsi ad ogni boot. È possibile verificarne lo stato con:
sudo systemctl status libvirtd
Dovrebbe mostrare "active (running)".
Configurazione Rete (Opzionale: Bridge)
Per impostazione predefinita, KVM con libvirt configura una rete NAT per le macchine virtuali. Questo significa che le VM possono accedere a internet ma non sono direttamente accessibili dalla rete fisica (a meno che non si configuri il port forwarding).
Se si desidera che le VM ottengano un indirizzo IP direttamente dalla rete locale e siano visibili come host separati, è consigliabile configurare una rete in bridge. Questo è un processo più avanzato che richiede la modifica dei file di configurazione di rete del sistema host.
Configurazione di un Bridge (Netplan su Ubuntu 22.04)
Identificare l'interfaccia di rete, digitare in una finestra di terminale:
ip a
Individuare il nome dell'interfaccia di rete Ethernet (es. enp0s31f6, eth0).- Modificare il file Netplan:
I file di configurazione di Netplan si trovano solitamente nella cartella di sistema /etc/netplan/. Trovare il file.yaml (es. 00-installer-config.yaml) e modificarlo con un editor di testo ed i privilegi di amministrazione:
sudo nano /etc/netplan/00-installer-config.yaml
Adattare i nomi delle interfacce. Sostituire il contenuto esistente con qualcosa di simile a questo (adattare enp0s31f6 al nome dell'interfaccia e il server DHCP):
network: ethernets: enp0s31f6: # <<-- Sostituire con il nome dell'interfaccia fisica dhcp4: no dhcp6: no bridges: br0: interfaces: [enp0s31f6] # <<-- Sostituire con il nome dell'interfaccia fisica dhcp4: yes dhcp6: no parameters: stp: true forward-delay: 0 version: 2
Spiegazione: L'interfaccia fisica (enp0s31f6) non ottiene più un IP direttamente. Viene creato un bridge br0 che include l'interfaccia fisica. Il bridge br0 ottiene l'indirizzo IP via DHCP, diventando l'interfaccia principale del sistema host.
Applicare le modifiche, digitare in una finestra di terminale il seguente comando:
sudo netplan apply }}} Si potrebbe perdere temporaneamente la connessione di rete.
Verificare il bridge:
ip a show br0
Dovrebbe essere visualizzato un indirizzo IP per br0.
Ora, quando si crea una nuova VM con virt-manager, sarà possibile selezionare br0 come interfaccia di rete.
Risoluzione problemi
libvir: Remote error : Permission denied
Se si riceve un errore come:
libvir: Remote error : Permission denied error: failed to connect to the hypervisor
ciò può indicare che non si è ancora riautenticati dopo aver aggiunto l'utente al gruppo libvirt.
Permessi sul socket `libvirt-sock`
È possibile verificare i permessi del socket con:
sudo ls -la /var/run/libvirt/libvirt-sock
L'output atteso dovrebbe essere simile a:
srwxrwx--- 1 root libvirt 0 [DATA E ORA] /var/run/libvirt/libvirt-sock
Questo indica che il socket è di proprietà di root e del gruppo libvirt, con permessi di lettura/scrittura per i membri del gruppo.
Ulteriori risorse
Documento originale (Community Ubuntu)