Werden unter einem Linux-Host verschiedene KVM Gäste betrieben ist es unter Umständen notwendig Befehle vom Host direkt an den Gast zu senden, z.B. um den Gast ordnungsgemäß herunterzufahren oder um konsistentes Backup zu erhalten.
QEMU Guest Agent installieren
In der KVM muss lediglich der Guest Agent installiert werden, die restliche Konfiguration ist am Host (am dedizierten Server) notwendig. Der Agent ist in allen wesentlichen Linux-Distributionen inkludiert.
# archlinux
sudo pacman -S qemu-guest-agent
# debian, ubuntu
sudo apt install qemu-guest-agent
# fedora, redhat
sudo yum install qemu-guest-agent
Host System
Folgende Aktionen sind am Host-System durchzuführen. Der
Platzhalter <kvm>
ist durch den Namen der jeweiligen KVM
zu ersetzen.
KVM stoppen
Die jeweilige KVM ist mittels ACPI shutdown
zu stoppen:
sudo virsh shutdown --mode acpi <kvm>
KVM Konfiguration anpassen
In der KVM Konfiguration ist ein Kanal für dem QEMU Guest Agent einzufügen. Die Konfiguration der KVM Maschine kann mit folgendem Befehl bearbeitet werden:
sudo virsh edit <kvm>
Kanal einfügen
In der Sektion <devices>
muss nun ein Kanal für
den Guest Agent eingefügt werden:
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
Bei libvirt-Versionen unter 1.0.6 muss zusätzlich noch der Agent-Pfad eingebunden werden:
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
KVM starten
Nun kann die virtuelle Maschine mit aktiviertem Agent neu gestartet werden:
sudo virsh start <kvm>
Agent testen
Um die ordnungsgemäße Funktion des Agents zu testen schicken wir einen Befehl an den Agent:
sudo virsh qemu-agent-command <kvm> '{"execute":"guest-info"}' | jq
Bekannte Fehler
Kein Agent installiert bzw. nicht gestartet
sudo virsh qemu-agent-command <kvm> '{"execute":"guest-info"}' | jq
error: Guest agent is not responding: QEMU guest agent is not connected
Agent aktiviert aber nicht konfiguriert
sudo virsh qemu-agent-command <kvm> '{"execute":"guest-info"}' | jq
error: argument unsupported: QEMU guest agent is not configured