Una VM di test fermata non è necessariamente guasta. Su un host KVM, il primo rischio è eseguire comandi nel dominio sbagliato e poi modificare il bridge o la rete di produzione quando basta leggere lo stato di libvirt.
Con virsh, puoi identificare la VM, avviarla e poi verificare l’interfaccia e l’indirizzo IP ottenuto. La procedura qui sotto rimane volutamente limitata a una VM di laboratorio e alla rete virtuale libvirt.
Identificare la VM e la sua rete prima dell’avvio
Accedi all’host KVM, non all’invitato. Mantieni anche un accesso console alla VM. Se la rete non risponde dopo l’avvio, questa console evita di modificare la configurazione di rete dell’host a caso.
sudo virsh list --all
sudo virsh net-list --all
sudo virsh domiflist vm-lab
Sostituisci vm-lab con il nome visualizzato da virsh list --all. Il primo comando indica se il dominio è fermo. Il secondo mostra le reti libvirt disponibili. Il terzo associa l’interfaccia della VM a una rete virtuale, un bridge o un’interfaccia fisica.
- Un’interfaccia connessa a
defaultutilizza spesso la rete NAT fornita da libvirt. - Un bridge come
br0posiziona la VM sulla rete dell’host e richiede un controllo lato DHCP o VLAN. - Una sorgente vuota o un’interfaccia mancante merita una diagnostica della definizione XML della VM, non un riavvio di libvirt.
Terrò la rete default per una VM di test. Fornisce un perimetro semplice da leggere con i lease DHCP di libvirt. Un bridge di produzione cambia la diagnostica e non dovrebbe essere modificato per testare una sola macchina.
Avviare il dominio e controllare il suo stato
Quando il nome del dominio e l’interfaccia sono coerenti, avvia solo questa VM.
sudo virsh start vm-lab
sudo virsh list --all
sudo virsh dominfo vm-lab
virsh start deve restituire Domain 'vm-lab' started, poi virsh list --all deve mostrare lo stato running. virsh dominfo conferma il dominio, il suo stato e la quantità di memoria richiesta senza aprire la console grafica.
Se l’avvio fallisce, leggi il journal dell’ultimo avvio prima di cambiare qualcosa. Le installazioni recenti possono usare virtqemud, le più vecchie libvirtd.
sudo journalctl -u virtqemud -u libvirtd -b --no-pager | tail -n 50
Un errore di percorso ISO, immagine disco, diritti o risorsa appare spesso qui. Il journal fornisce un punto di partenza preciso. Riavviare tutti i servizi di virtualizzazione può interrompere altre VM attive.
Trovare l’indirizzo IP della VM
Una VM in esecuzione potrebbe non avere un indirizzo visibile dall’host. Con la rete NAT default, inizia con i lease DHCP di libvirt.
sudo virsh domifaddr vm-lab --source lease
sudo virsh net-dhcp-leases default
Il primo comando collega un indirizzo all’interfaccia del dominio quando libvirt conosce il lease. Il secondo mostra i lease della rete default. Se la VM è collegata a un bridge, questi comandi possono restare vuoti mentre l’invitato funziona correttamente.
In questo caso, usa l’agente QEMU se l’invitato lo esegue, poi la console se necessario.
sudo virsh domifaddr vm-lab --source agent
sudo virsh console vm-lab
Dal console della VM, esegui ip -br addr poi ip route. Le guide Ip addr sotto Linux e Route IP sotto Linux aiutano ad interpretare l’interfaccia e il gateway. Per uscire da virsh console, usa Ctrl + ].
Controllare la rete senza toccare al bridge
Se la VM si avvia ma rimane senza indirizzo sulla rete default, controlla prima il suo stato.
sudo virsh net-info default
sudo virsh net-list --all
In un ambiente di test, una rete default dichiarata inattiva può essere avviata con sudo virsh net-start default. Poi riprendi virsh domifaddr vm-lab --source lease. Questa azione non è adatta per un bridge di produzione, un VLAN o una rete gestita da un altro team.
Quando l’interfaccia è su un bridge, verifica nell’invito che l’interfaccia abbia ricevuto un indirizzo e una rotta. Il problema si trova spesso lato DHCP, VLAN o filtrazione di rete, non nel comando virsh start.
Arrestare correttamente la VM di test
Dopo il controllo, richiedi un arresto pulito all’invitato e controlla il suo stato. virsh destroy interrompe l’alimentazione virtuale immediatamente. Tienilo per una VM bloccata, dopo aver valutato il rischio di corruzione.
sudo virsh shutdown vm-lab
sudo virsh list --all
La documentazione virsh di libvirt dettaglia le varianti di ogni comando. Su un host che ospita VM attive, il limite corretto rimane semplice: leggi il dominio e la sua interfaccia prima di qualsiasi azione globale sui servizi o sulla rete.