Wyłączona maszyna wirtualna niekoniecznie jest uszkodzona. Na hoście KVM pierwszym ryzykiem jest wydanie poleceń w niewłaściwej domenie, a następnie zmodyfikowanie mostku lub sieci produkcyjnej, podczas gdy wystarczy sprawdzić stan libvirt.
Za pomocą virsh można zidentyfikować maszynę wirtualną, uruchomić ją, a następnie sprawdzić interfejs i uzyskaną adres IP. Poniższa procedura celowo ogranicza się do maszyny wirtualnej w laboratorium oraz do wirtualnej sieci libvirt.

Zidentyfikuj maszynę wirtualną i jej sieć przed uruchomieniem
Zaloguj się na hoście KVM, a nie w gościu. Zachowaj również dostęp do konsoli maszyny wirtualnej. Jeśli sieć nie odpowiada po uruchomieniu, ta konsola zapobiega bezmyślnemu dotykaniu konfiguracji sieci hosta.
sudo virsh list --all
sudo virsh net-list --all
sudo virsh domiflist vm-lab
Zamień vm-lab na nazwę wyświetloną przez virsh list --all. Pierwsze polecenie informuje, czy domena jest wyłączona. Drugie pokazuje dostępne sieci libvirt. Trzecie przypisuje interfejs maszyny wirtualnej do sieci wirtualnej, mostku lub interfejsu fizycznego.
- Interfejs połączony z
defaultczęsto korzysta z sieci NAT dostarczonej przez libvirt. - Mostek taki jak
br0umieszcza maszynę wirtualną w sieci hosta i wymaga kontroli po stronie DHCP lub VLAN. - Pusta źródło lub brak interfejsu wymaga diagnostyki definicji XML maszyny wirtualnej, a nie ponownego uruchamiania libvirt.
Zachowałbym sieć default dla maszyny wirtualnej testowej. Zapewnia prosty zakres do odczytu z umów DHCP libvirt. Mostek produkcyjny zmienia diagnozę i nie powinien być modyfikowany w celu przetestowania pojedynczej maszyny.
Uruchom domenę i sprawdź jej stan
Gdy nazwa domeny i interfejs są zgodne, uruchom tylko tę maszynę wirtualną.
sudo virsh start vm-lab
sudo virsh list --all
sudo virsh dominfo vm-lab
virsh start powinno zwrócić Domena 'vm-lab' uruchomiona, a następnie virsh list --all powinno wyświetlać stan running. virsh dominfo potwierdza domenę, jej stan i ilość pamięci wymaganej bez otwierania konsoli graficznej.
Jeśli uruchomienie się nie powiedzie, przeczytaj dziennik obecnego uruchomienia zanim cokolwiek zmienisz. Ostatnie instalacje mogą używać virtqemud, starsze libvirtd.
sudo journalctl -u virtqemud -u libvirtd -b --no-pager | tail -n 50
Wiele błędów dotyczących ścieżek ISO, obrazów dysków, uprawnień lub zasobów pojawia się tutaj. Dziennik dostarcza dokładny punkt wyjścia. Ponowne uruchomienie wszystkich usług wirtualizacji może przerywać działanie innych aktywnych maszyn wirtualnych.
Znajdź adres IP maszyny wirtualnej
Uruchomiona maszyna wirtualna może nie mieć widocznego adresu z poziomu hosta. Przy sieci NAT default zacznij od umów DHCP libvirt.
sudo virsh domifaddr vm-lab --source lease
sudo virsh net-dhcp-leases default
Pierwsze polecenie łączy adres z interfejsem domeny, gdy libvirt zna umowę. Drugie wyświetla umowy sieci default. Jeśli maszyna wirtualna jest połączona z mostkiem, te polecenia mogą pozostać puste, podczas gdy gość działa poprawnie.
W takim przypadku użyj agenta QEMU, jeśli gość go uruchamia, a następnie konsolę, jeśli to konieczne.
sudo virsh domifaddr vm-lab --source agent
sudo virsh console vm-lab
Z konsoli maszyny wirtualnej uruchom ip -br addr, a następnie ip route. Przewodniki Ip addr w systemie Linux i Route IP w systemie Linux pomagają w interpretacji interfejsu i bramy. Aby wyjść z virsh console, użyj Ctrl + ].
Sprawdź sieć bez dotykania mostka
Jeśli maszyna wirtualna uruchamia się, ale pozostaje bez adresu w sieci default, najpierw sprawdź jej stan.
sudo virsh net-info default
sudo virsh net-list --all
W środowisku testowym sieć default zadeklarowana jako nieaktywna może być uruchomiona przy pomocy sudo virsh net-start default. Następnie wróć do virsh domifaddr vm-lab --source lease. Ta czynność nie jest odpowiednia dla mostków roboczych, VLAN-ów lub sieci zarządzanej przez inny zespół.
Gdy interfejs znajduje się na mostku, sprawdź w gościu, czy interfejs otrzymał adres i trasę. Problem leży więc często po stronie DHCP, VLAN lub filtracji sieciowej, a nie w poleceniu virsh start.
Zatrzymaj poprawnie maszynę wirtualną testową
Po sprawdzeniu poproś o poprawne wyłączenie gościa i sprawdź jego stan. virsh destroy natychmiast odcina zasilanie wirtualne. Trzymaj to dla zablokowanej maszyny wirtualnej, po ocenie ryzyka uszkodzenia.
sudo virsh shutdown vm-lab
sudo virsh list --all
Dokumentacja virsh libvirt szczegółowo opisuje warianty każdego polecenia. Na hoście, który gospodaruje aktywnymi maszynami wirtualnymi, dobra granica pozostaje prosta: przeczytaj domenę i jej interfejs przed jakąkolwiek globalną akcją na usługach lub sieci.