A stopped test VM is not necessarily out of order. On a KVM host, the first risk is running commands on the wrong domain, then modifying the bridge or production network when it is enough to check the state of libvirt.
With virsh, you can identify the VM, start it, and then check the interface and the obtained IP address. The procedure below is deliberately limited to a lab VM and the libvirt virtual network.

Identify the VM and its network before starting
Log into the KVM host, not in the guest. Also keep console access to the VM. If the network does not respond after startup, this console prevents altering the host’s network configuration blindly.
sudo virsh list --all
sudo virsh net-list --all
sudo virsh domiflist vm-lab
Replace vm-lab with the name displayed by virsh list --all. The first command indicates if the domain is stopped. The second shows the available libvirt networks. The third associates the VM’s interface with a virtual network, a bridge, or a physical interface.
- An interface connected to
defaultoften uses the NAT network provided by libvirt. - A bridge like
br0places the VM on the host’s network and requires control on the DHCP or VLAN side. - An empty source or a missing interface deserves a diagnosis of the VM’s XML definition, not a restart of libvirt.
I would keep the default network for a test VM. It provides a simple perimeter to read with the DHCP leases from libvirt. A production bridge changes the diagnosis and should not be modified to test a single machine.
Start the domain and check its state
When the domain name and interface are consistent, start only this VM.
sudo virsh start vm-lab
sudo virsh list --all
sudo virsh dominfo vm-lab
virsh start should return Domain 'vm-lab' started, then virsh list --all should display the state running. virsh dominfo confirms the domain, its state, and the amount of memory requested without opening the graphical console.
If the startup fails, read the current boot log before changing anything. Recent installations may use virtqemud, while older ones use libvirtd.
sudo journalctl -u virtqemud -u libvirtd -b --no-pager | tail -n 50
An error regarding an ISO path, disk image, permissions, or resources often appears here. The log provides a precise starting point. Restarting all virtualization services may interrupt other active VMs.
Find the VM’s IP address
An running VM might not have an address visible from the host. With the NAT network default, start with the DHCP leases from libvirt.
sudo virsh domifaddr vm-lab --source lease
sudo virsh net-dhcp-leases default
The first command links an address to the domain’s interface when libvirt knows the lease. The second displays the leases from the default network. If the VM is connected to a bridge, these commands may come up empty while the guest operates properly.
In this case, use the QEMU agent if the guest runs it, then the console if necessary.
sudo virsh domifaddr vm-lab --source agent
sudo virsh console vm-lab
From the VM console, run ip -br addr then ip route. The guides Ip addr under Linux and Route IP under Linux help interpret the interface and gateway. To exit virsh console, use Ctrl + ].
Check the network without touching the bridge
If the VM starts but remains without an address on the default network, first check its state.
sudo virsh net-info default
sudo virsh net-list --all
In a test environment, a default network declared inactive can be started with sudo virsh net-start default. Then resume with virsh domifaddr vm-lab --source lease. This action is not suitable for a business bridge, a VLAN, or a network managed by another team.
When the interface is on a bridge, check in the guest that the interface has indeed received an address and a route. The issue often lies on the DHCP, VLAN, or network filtering side, not in the virsh start command.
Properly Stop the Test VM
After checking, request a clean shutdown from the guest and verify its state. virsh destroy cuts the virtual power immediately. Keep it for a stalled VM, after assessing the risk of corruption.
sudo virsh shutdown vm-lab
sudo virsh list --all
The documentation virsh from libvirt details the variants of each command. On a host that hosts active VMs, the right limit remains simple: read the domain and its interface before any global action on services or the network.