Virsh - Kommandozeilenwerkzeug zur Verwaltung virtueller Maschinen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Das Kommandozeilenwerkzeug Virsh des libvirt Toolkits dient zur Verwaltung von virtuellen Maschinen. Es unterstützt dabei zahlreiche Virtualisierungstechnologien, darunter KVM, Hyper-V, VMware, LXC oder Xen.[1] Dieser Artikel erklärt die Grundlagen von Virsh, zeigt das Zusammenspiel mit Libvirtd und erläutert anhand Beispiele an einem POWER8-System, wie die Administration von KVM-basierten VMs damit gelingt. Informationen zum grafischen Tool Virtual Machine Manager und eine Installationsanleitung von KVM mit OpenPOWER finden Sie in unserem Wiki.
Grundlagen
Das Libvirt-Projekt ermöglicht eine einheitliche Verwaltungszentrale für unterschiedliche Virtualisierungslösungen und Hypervisoren. Das Management kann über die grafische Oberfläche des Virtual Machine Managers erfolgen, aber auch über das Kommandozeilentool Virsh. Normalerweise wird Virsh zusammen mit dem Paket libvirt installiert, Ubuntu jedoch lagert, wie so viele Distributionen, die Libvirt-Tools in ein eigenes Paket aus, es ist über libvirt-bin verfügbar.[2]
Installation unter Ubuntu
Installiert wird Virsh über das Paket libvirt-bin bequem über apt.
$ sudo apt-get install libvirt-bin
Virsh Version ausgeben
Die Ausgabe von virsh version zeigt, ob Virsh installiert ist und korrekt funktioniert. Kommen bei dieser Ausgabe Fehlermeldungen zu Tage, könnte der libvirtd-Daemon nicht aktiv sein. Nachfolgende zwei Ausgaben zeigen die zum Testzeitpunkt identischen Versionen unter POWER8 und X86.
Version bei Ubuntu 16.04.1 unter POWER8:
$ virsh version Compiled against library: libvirt 1.3.1 Using library: libvirt 1.3.1 Using API: QEMU 1.3.1 Running hypervisor: QEMU 2.5.0
Version bei Ubuntu 16.04.1 unter X86:
$ sudo virsh version Compiled against library: libvirt 1.3.1 Using library: libvirt 1.3.1 Using API: QEMU 1.3.1 Running hypervisor: QEMU 2.5.0
Verbindungsmöglichkeiten mit Virsh
Virsh unterstützt wie eingangs erwähnt zahlreiche Virtualisierungstechnologien. Zur Verbindung auf ein System sind abhängig von der verwendeten Technolgie, unterschiedliche URIs erforderlich. Die jeweiligen URIs zeigt die folgende Tabelle:
URI | Hypervisor |
---|---|
lxc:/// | LXC |
qemu:///system | Qemu/KVM |
xen:/// | Xen |
openvz:///system | OpenVZ |
vbox:///session | VirtualBox |
hyperv:///<example.com> | Microsoft Hyper-V |
esx:///<example.com> | VMware ESX-Server |
gsx:///<example.com> | VMware GSX |
vmwareplayer:///session | VMware Player |
vmwarews:///session | VMware Workstation |
Virsh-Parameter im Überblick
Darüberhinaus erlaubt Virsh, unter Zuhilfename einer Vielzahl von Parametern, vielfältige Administrationsmöglichkeiten. Nachfolgende Tabelle zeigt die wichtigsten Parameter auf.
Befehl | Erklärung |
---|---|
list --all | Listet alle virtuellen Maschinen auf |
list --inactive | Listet alle inaktiven virtuellen Maschinen auf |
dominfo <VM-Bezeichnung> | Ausgabe aller Informationen zur virtuellen Maschine |
nodeinfo | Liefert Informationen zum KVM-Host (linux-magazin schreibt Gastsystem) |
start <VM-Bezeichnung> | Startet die virtuelle Maschine |
shutdown <VM-Bezeichnung> | Fährt die VM ordentlich herunter |
destroy <VM-Bezeichnung> | Die VM wird sofort heruntergefahren |
suspend <VM-Bezeichnung> | Pausiert die virtuelle Maschine |
resume <VM-Bezeichnung> | Die VM wird fortgesetzt |
console <VM-Bezeichnung> | Die Konsolenausgabe der VM wird gestartet |
dumpxml <VM-Bezeichnung> | Die XML-Konfigurationsdatei der angegebenen VM wird auf der Standardausgabe ausgegeben |
create vm.xml | Eine neue VM wird auf Basis der übergebenen XML-Datei erstellt |
undefine <VM-Bezeichnung> | Die angegebene VM wird gelöscht, die virtuelle Festplatte verbleibt aber im Datenspeicher |
setmem <VM-Bezeichnung> <Speichergröße> | Die RAM-Größe kann mit setmem angepasst werden |
setvcpus <VM-Bezeichnung> <Anzahl-CPUs> | Die CPUs können mit setvcpus angepasst werden |
migrate <VM-Bezeichnung> <URI> | Eine Migration der VM zum Host mit dessen angegebener URI wird durchgeführt |
libvirtd-Daemon nicht gestartet
Falls der libvirtd-Daemon gerade nicht läuft, erfolgt folgende Fehlermeldung:
$ sudo virsh version error: failed to connect to the hypervisor error: no valid connection error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
libvirtd Daemon starten
Dieser Daemon kann per folgendem Befehl gestartet werden:
$ sudo service libvirt-bin start
Lokale Verbindung per Virsh
Die Verbindung mit dem Libvirtd-Deamon kann per lokal auf dem KVM-Host installiertem Virsh erfolgen:
$ virsh -c qemu:///system
Remote-Verbindung
Zur Verbindung auf entfernte Maschinen werden folgende Protokolle unterstützt:[3]
URI | Protokoll |
---|---|
virsh -c qemu+ssh://<USER>@<IP-Adresse>/system |
SSH |
virsh -c qemu://<USER>@<IP-Adresse>/system |
TLS/x509 |
virsh -c qemu+tcp://<USER>@<IP-Adresse>/system |
SASl/Kerberos |
Ausgabe der Hostinformationen
Mit nodeinfo erfolgt eine Ausgabe der Hostinformationen:
tk@ubuntu:~$ virsh -c qemu:///system nodeinfo CPU model: ppc64le CPU(s): 64 CPU frequency: 2061 MHz CPU socket(s): 1 Core(s) per socket: 8 Thread(s) per core: 8 NUMA cell(s): 1 Memory size: 133861312 KiB
Administration mit Virsh
Nachfolgender Abschnitt zeigt die Administration der KVM-Gäste mit Virsh.
Virtuelle Maschine starten
Virtuelle Maschinen können mit Virsh bequem über den Parameter start gestartet werden.
$ virsh start ubuntu-kvm-test-vmm Domain ubuntu-kvm-test-vmm started
Überblick über laufende virtuellen Maschinen
Mit dem Aufruf von nachfolgendem Kommando werden alle aktuell laufenden virtuellen Maschinen angezeigt. Der Parameter -c bedeutet connect und verbindet Virsh mit Qemu und list --all bewirkt eine Auflistung aller vorhandenen virtuellen Maschinen, darunter die laufenden und pausierten, auf. qemu:///system stellt eine URI dar, die Virsh die genutzte Virtualisierungsmethode zurückliefert, in diesem Fall qemu.
$ virsh -c qemu:///system list --all Id Name State ---------------------------------------------------- 4 ubuntu-kvm-test-vmm running - ubuntu-kvm-test1 shut off - ubuntu16.04 shut off
Konsole der VM starten
Bei der gestarteten VM kann nun mittels des Parameters console eine Konsolensitzung gestartet werden.
$ virsh console ubuntu-kvm-test-vmm Connected to domain ubuntu-kvm-test-vmm Escape character is ^] Linux ppc64le #50-Ubuntu SMP W Ubuntu 16.04.1 LTS ubuntu-kvm-test-vmm hvc0 ubuntu-kvm-test-vmm login:
Die Konsole kann per per STRG+5 beendet werden.
VM entfernen
Durch den Parameter undefine kann eine VM komplett entfernt werden, die Festplatten-Abbilder bleiben aber erhalten:
tk@ubuntu:~$ virsh -c qemu:///system undefine ubuntu-kvm-vmm Domain ubuntu-kvm-vmm has been undefined
Die VM ist nun vom System entfernt:
tk@ubuntu:~$ virsh -c qemu:///system list --all Id Name State ----------------------------------------------------
XML-Datei erstellen und bearbeiten
Sie können die Konfiguration einer spezifischen VM in eine XML-Datei umleiten, bearbeiten und mittels einer XML-Datei eine neue VM erstellen.
$ virsh -c qemu:///system dumpxml ubuntu-kvm-vmm > /home/tk/ubuntu-kvm-vmm.xml
- Inhalt der XML-Datei:
<domain type='kvm' id='1'> <name>ubuntu-kvm-test1</name> <uuid>8720a1c6-658b-4390-8754-6b8327e81a70</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>2</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='ppc64le' machine='pseries-2.5'>hvm</type> <boot dev='cdrom'/> <boot dev='hd'/> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>destroy</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-ppc64le</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/ubuntu-kvm-vmm.img'/> <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/home/tk/Downloads/ubuntu-16.04.1-server-ppc64el.iso'/> <backingStore/> <target dev='sda' bus='scsi'/> <readonly/> <alias name='scsi0-0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0'> <alias name='usb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='scsi' index='0'> <alias name='scsi0'/> <address type='spapr-vio' reg='0x2000'/> </controller> <interface type='bridge'> <mac address='52:54:00:e4:6e:05'/> <source bridge='virbr0'/> <target dev='vnet0'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/1'/> <target port='0'/> <alias name='serial0'/> <address type='spapr-vio' reg='0x30000000'/> </serial> <console type='pty' tty='/dev/pts/1'> <source path='/dev/pts/1'/> <target type='serial' port='0'/> <alias name='serial0'/> <address type='spapr-vio' reg='0x30000000'/> </console> <input type='keyboard' bus='usb'> <alias name='input0'/> </input> <input type='mouse' bus='usb'> <alias name='input1'/> </input> <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> </graphics> <video> <model type='vga' vram='16384' heads='1'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </video> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> <panic model='pseries'/> </devices> <seclabel type='dynamic' model='apparmor' relabel='yes'> <label>libvirt-8720a1c6-658b-4390-8754-6b8327e81a70</label> <imagelabel>libvirt-8720a1c6-658b-4390-8754-6b8327e81a70</imagelabel> </seclabel> </domain>
Weitere Informationen
- Virtuelle Maschinen fernsteuern mit Virsh (linux-magazin.de)
Einzelnachweise
- ↑ Internal drivers - Hypervisor drivers (libvirt.org)
- ↑ virsh (wiki.ubuntuusers.de)
- ↑ KVM/QEMU hypervisor driver (libvirt.org)
Autor: Thomas Niedermeier Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates. |