[[Vorlage(getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Programme starten: Ein Programm starten] [:KVM: KVM] Kernel-basierte virtuelle Maschinen [:QEMU:QEMU] Frei Emulator und Virtualisierer [:Virtualisierung:Virtualisierung] Allgemeine Einführung in die Virtualisierung }}} [[Inhaltsverzeichnis(3)]] [[Bild(libvirt-logo.png, 85, align=left)]] [http://libvirt.org/virshcmdref.html virsh] {en} ist ein Werkzeug zum Verwalten virtueller Maschinen[6] unter Xen, QEMU, KVM, LXC, Test, OpenVZ, VirtualBox, OpenNebula oder VMware ESX. Man kann eine Maschine von der Kommandozeile aus erstellen, löschen, starten, stoppen und verwalten. Virsh ist für den fortgeschrittenen Linuxadministrator von Interesse, um einfache Skriptautomatismen für die Virtualisierung zu realisieren. Dieser Artikel ist besonders auf die Nutzung von virsh mit [:KVM:KVM] ausgelegt. Wenn man sich bisher noch nicht mit Virtualisierung[6] beschäftigt hat oder bisher nur graphische Oberflächen wie die von Virtual-Box gewohnt ist und jetzt tiefer einsteigen möchte, sollte nach Möglichkeit erst mit der reinen KVM- oder QEMU-Technik auf der Konsole beginnen, um die Konfigurationsspezifika z.B. für eine Windowsmaschine kennen zu lernen. Für einen stabilen Betrieb ist hier im Vorfeld einiges zu Themen, welche Virtuelle Netzwerkkarte oder welcher Festplattendateityp für den Fall das Beste sind[4][5], zu klären. Die Vorteile von virsh liegen dann im vereinfachten Verwalten der virtuellen Instanzen. virsh ist ein Teil des [http://libvirt.org/ Libvirt-Projekts] {en}, das eine Befehlssammlung (Library) für diverse Programmiersprachen zur Verfügung stellt, mit denen die [wikipedia:Hypervisor:Hypervisoren] gesteuert werden können. Es stellt gewissermaßen die Befehlssätze in der Shell zur Verfügung. = Installation = Für virsh braucht man die Pakete [1]. {{{#!vorlage Paketinstallation virtinst libvirt-bin }}} = Verbindung zum Hypervisor = Um eine Verbindung zum [wikipedia:Hypervisor:Hypervisor] herzustellen (das kann der lokale oder ein über das Netzwerk erreichbarer Server sein, in den meisten Fällen nutzt man den lokalen Hypervisor) wird dieser Terminalbefehl[2] verwendet: {{{#!vorlage Befehl virsh connect qemu:///system }}} Die resultierende Ausgabe: {{{ Connecting to uri: qemu:///system }}} = Virtuelle Maschine erstellen = Virtuelle Maschinen, die mit virsh verwaltet werden, erstellt man durch Definition der Maschine in einer libvirt-XML-Datei. Soweit man die Syntax noch nicht kennt, sollte man mit `virt-install` eine erste XML-Datei bzw. die Virtuelle Maschine komplett damit erstellen. Der nachfolgende Befehl erstellt eine erste Linux-VM mittels virt-install. Sie hieße in diesem Falle [wikipedia:Foo:foo], hat 512 MB Ram, eine CPU, eine Festplatte mit 12 GB sowie das lokale CDROM-Laufwerk. Wenn man schon mal eine VM unter KVM direkt gestartet hat, wird man sich an dieser Stelle schnell zurecht finden. Näheres dazu welche Einstellung zu welcher VM passen findet man bei QEMU[5] oder KVM[6]. {{{#!vorlage Befehl virt-install --connect qemu:///system -n foo -r 512 --vcpus=1 -f /var/lib/libvirt/images/festplatte1.img -s 12 --vnc --cdrom /media/cdrom0 --noautoconsole --os-type linux --accelerate --network=bridge:br0,model=virtio -m 00:00:00:00:00:07 -k de }}} Die virtuelle Festplatte sollte sich im Ordner '''/var/lib/libvirt/images''' befinden. Für diesen Ordner existiert eine Ausnahmeregel in den Regeln der vorinstallierten [:AppArmor:]-Schutzsoftware, zu finden in der Datei '''/etc/apparmor.d/usr.lib.libvirt.virt-aa-helper'''. Andere Ordner scheitern stets mit `Permission denied`. ||<-2 cellstyle="background-color: #E2C890;" :> '''Einige grundlegende Optionen von virt-install''' || || '''Option'''||'''Erklärung ''' || || ``-h, --help`` || Zeigt die Hilfe-Meldungen || || ``-n NAME, --name=NAME `` || Name der Gastinstanz bzw. in virt-install-Domäne genannt || || ``-r MEMORY, --ram=MEMORY`` || Arbeitsspreicher || || ``--vcpus=VCPUS`` || Anzahl der virtuellen CPU's für die VM || || ``-f DISKFILE, --file=DISKFILE`` || Dateiname und Pfad, der als Festplattenimage benutzt werden soll || || ``-s DISKSIZE, --file-size=DISKSIZE`` || Festplattengröße (falls sie noch nicht erstellt wurde) in Gigabyte || || ``--import`` || erstellt das Festplatten-Image nicht neu (vorhandene VM's oder Backups aufnehmen) || || ``-w NETWORK, --network=NETWORK`` || verbindet den Gast zu einem virtuellen Netzwerk, forwardet zu einem physichen Netzadapter mit NAT || || ``--vnc `` || Benutze VNC als grafischer Interfaceprovider der VM || || ``--vncport=VNCPORT`` || definiert den Port für VNC || = Arbeiten mit laufenden virtuellen Maschinen = Hat man erst eine VM laufen, kann man sie auf verschiedene Arten mit virsh bearbeiten, soweit man mit dem Hypervisor verbunden ist. * Starten der VM{{{#!vorlage Befehl virsh start foo }}} * Neustart der VM{{{#!vorlage Befehl virsh reboot foo }}} * Ausschalten der VM via Acpi{{{#!vorlage Befehl virsh shutdown foo }}} {{{#!vorlage Hinweis Damit der Shutdown via ACPI funktioniert, muss es auch in der VM installiert und aktiviert sein. Unter Ubuntu ist dafür das Paket {{{#!vorlage Paketinstallation acpid \}}} notwendig. Alternativ bleibt sonst nur ein {{{#!vorlage Befehl virsh destroy foo \}}} womit gewissermaßen der Stecker gezogen wird. }}} * Pausieren bzw. Einfrieren der VM{{{#!vorlage Befehl virsh suspend foo }}} * Aufheben des Pausezustands einer VM{{{#!vorlage Befehl virsh resume foo }}} * VM's auflisten{{{#!vorlage Befehl virsh list }}} {{{ Id Name State ---------------------------------- 1 foo running }}} = Löschen einer VM = Um eine VM löschen zu können, muss man sie erst einmal zerstören, um dann die Definition in libvirt aufheben zu können. {{{#!vorlage Befehl virsh destroy foo_new }}} {{{#!vorlage Befehl virsh undefine foo_new }}} = Sonstiges = == XML-Format in libvirt bzw. VM Konfiguration == Man kann aber auch die VMs direkt über die Konfigurations-XML-Datei erstellen[3]. Eine solche Datei kann man ins '''/tmp'''-Verzeichnis exportieren, indem man in die Konsole Folgendes eingibt: {{{#!vorlage Befehl virsh dumpxml foo > /tmp/foo.xml }}} Sobald man die XML-Datei angepasst hat, kann man daraus eine neue Virtuelle Maschine erstellen und automatisch laufen lassen: {{{#!vorlage Befehl virsh create /tmp/foo_new.xml }}} Alternativ kann man die VM auch nur definieren, ohne sie zu starten: {{{#!vorlage Befehl virsh define /tmp/foo_new.xml }}} Soweit man die [:VIM:]-Syntax beherrscht, kann man die Bearbeitung der XML-Datei am besten mit dem Befehl `virsh edit` vornehmen. Damit kann man dann ganz einfach die Konfiguration anpassen. Wie bei VIM auch kann man mit `:i` für bearbeiten und `:wq` für Speichern und Schließen die Konfiguration anpassen. {{{#!vorlage Befehl virsh edit foo }}} Wesentlich umfangreichere Optionen zur Verwendung finden sich in der [:man:Manpage] von virsh. == VM Konsole == Manchmal ist es nützlich, die Konsole einer laufenden VM zu benutzen, um Debug-Informationen zu erhalten oder anderes zu erhalten. Sie ist jedoch bitte nicht mit dem QEMU-Monitor zu verwechseln: {{{#!vorlage Befehl virsh console foo }}} Dieser Befehl stellt eine Verbindung zu der VM foo her. Die Konsole verlässt man dann mit den gleichzeitig gedrückten Tasten [[Vorlage(Tasten, Strg + AltGr + 9)]] == Tools == Mit virt-top kann man sich einen Überblick über die Lastverteilung unter den laufenden virtuellen Maschinen machen. {{{#!vorlage Paketinstallation virt-top }}} Mit folgendem Befehl ruft man virt-top dann auf: {{{#!vorlage Befehl virt-top }}} und mit [[Vorlage(Tasten, Q)]] kann man virt-top wieder verlassen = Links = * [:virt-manager:] - GNOME- und libvirt-basierter VM-Manager * [man:virsh:Manpage] {en} * [http://www.linux-magazin.de/Ausgaben/2011/12/Virsh Virtuelle Maschinen fernsteuern mit Virsh] {de} - Artikel Linux Magazin, 12/2011 * [http://docs.fedoraproject.org/de-DE/Fedora/12/html/Virtualization_Guide/chap-Virtualization_Guide-Managing_guests_with_virsh.html Das Verwalten von Gästen mit virsh] {de} * [http://www.centos.org/docs/5/html/5.2/Virtualization/sect-Virtualization-Installing_guests-Create_a_guest_using_virt_install.html Beschreibung] {en} der wichtigsten Optionen für virt-install * [http://libvirt.org/drivers.html Hypervisor] {en}, die von libvirt unterstützt werden #tag: Emulation und Virtualisierung, Server