Product SiteDocumentation Site

Kapitel 15. Das Verwalten von Gästen mit virsh

virsh ist ein Befehlszeilen-Tool zur Verwaltung der Gäste und des Hypervisors.
Das virsh-Tool setzt an der libvirt-Management-API an und fungiert als Alternative zum xm-Befehl und dem grafischen Gäste-Manager (virt-manager). Unprivilegierte Benutzer können virsh in schreibgeschütztem Modus nutzen. Sie können virsh dazu verwenden, Skripte für die Gastmaschinen auszuführen.
Kurzanleitung zum virsh-Befehl
Die folgende Tabelle gibt eine Kurzanleitung für alle Befehlszeilenoptionen.
Befehl Description
help Zeigt grundlegende Hilfe-Informationen.
list Listet alle Gäste auf.
dumpxml Gibt die XML-Konfigurationsdatei für den Gast aus.
create Erzeugt einen Gast anhand einer XML-Konfigurationsdatei und startet den neuen Gast.
start Startet einen inaktiven Gast.
destroy Zwingt einen Gast zum Beenden.
define Gibt eine XML-Konfigurationsdatei für einen Gast aus.
domid Zeit die Gast-ID an.
domuuid Zeigt die Gast-UUID an.
dominfo Zeigt Gastinformationen.
domname Zeigt den Gastnamen.
domstate Zeigt den Status eines Gasts an.
quit Beendet das interaktive Terminal.
reboot Startet einen Gast neu.
restore Stellt einen zuvor in einer Datei gespeicherten Gast wieder her.
resume Setzt einen angehaltenen Gast fort.
save Speichert den aktuellen Zustand eines Gasts in einer Datei.
shutdown Fährt einen Gast herunter.
suspend Hält einen Gast an.
undefine Löscht alle zu einem Gast gehörigen Dateien.
migrate Migriert einen Gast auf einen anderen Host.
Tabelle 15.1. Befehle der Gästeverwaltung

Benutzen Sie die folgenden virsh-Befehle zur Verwaltung von Gast- und Hypervisor-Ressourcen:
Befehl Description
setmem Legt den zugewiesenen Speicher für einen Gast fest.
setmaxmem Legt die Höchstgrenze an Speicher für den Hypervisor fest.
setvcpus Ändert die Anzahl virtueller CPUs, die einem Gast zugewiesen sind.
vcpuinfo Zeigt Informationen zur virtuellen CPU für einen Gast.
vcpupin Steuert die Affinität einer virtuellen CPU für einen Gast.
domblkstat Zeigt Blockgerätstatistiken für einen laufenden Gast.
domifstat Zeigt Netzwerkschnittstellenstatistiken für einen laufenden Gast.
attach-device Verknüpft ein Gerät mit einem Gast mittels einer Gerätdefinition in einer XML-Datei.
attach-disk Verknüpft eine neue Festplatte mit einem Gast.
attach-interface Verknüpft eine neue Netzwerkschnittstelle mit einem Gast.
detach-device Löst verknüpftes Gerät von einem Gast, nimmt dieselben XML-Beschreibungen wie der Befehl attach-device.
detach-disk Löst verknüpfte Festplatte von einem Gast.
detach-interface Löst verknüpfte Netzwerkschnittstelle von einem Gast.
Tabelle 15.2. Optionen zur Ressourcenverwaltung

Dies sind sonstige virsh-Optionen:
Befehl Description
version Zeigt die Version von virsh.
nodeinfo Gibt Informationen über den Hypervisor aus.
Tabelle 15.3. Sonstige Optionen

Verbinden mit dem Hypervisor
Verbinden Sie mit einer Hypervisor-Sitzung mittels virsh:
# virsh connect {hostname OR URL}
Where <name> is the machine name of the hypervisor. To initiate a read-only connection, append the above command with -readonly.
Erstellen eines XML-Speicherauszugs einer virtuellen Maschine (Konfigurationsdatei)
Geben Sie die XML-Konfigurationsdatei eines Gasts mit virsh aus:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
This command outputs the guest's XML configuration file to standard out (stdout). You can save the data by piping the output to a file. An example of piping the output to a file called guest.xml:
# virsh dumpxml GuestID > guest.xml
This file guest.xml can recreate the guest (refer to Bearbeiten von Gastkonfigurationsdateien. You can edit this XML configuration file to configure additional devices or to deploy additional guests. Refer to Abschnitt 18.1, „Benutzung von XML-Konfigurationsdateien mit virsh“ for more information on modifying files created with virsh dumpxml.
Ein Beispiel einer virsh dumpxml-Ausgabe:
# virsh dumpxml r5b2-mySQL01
<domain type='xen' id='13'>
    <name>r5b2-mySQL01</name>
    <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid>
    <bootloader>/usr/bin/pygrub</bootloader>
    <os>
        <type>linux</type>
        <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel>
	<initrd>/var/lib/libvirt/initrd.UQafMw</initrd>
        <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline>
    </os>
    <memory>512000</memory>
    <vcpu>1</vcpu>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
        <interface type='bridge'>
            <source bridge='xenbr0'/>
            <mac address='00:16:3e:49:1d:11'/>
            <script path='vif-bridge'/>
        </interface>
        <graphics type='vnc' port='5900'/>
        <console tty='/dev/pts/4'/>
    </devices>
</domain>

Erzeugen eines Gasts mit Hilfe einer Konfigurationsdatei
Guests can be created from XML configuration files. You can copy existing XML from previously created guests or use the dumpxml option (refer to Erstellen eines XML-Speicherauszugs einer virtuellen Maschine (Konfigurationsdatei)). To create a guest with virsh from an XML file:
# virsh create configuration_file.xml
Bearbeiten von Gastkonfigurationsdateien
Instead of using the dumpxml option (refer to Erstellen eines XML-Speicherauszugs einer virtuellen Maschine (Konfigurationsdatei)) guests can be edited either while they run or while they are offline. The virsh edit command provides this functionality. For example, to edit the guest named softwaretesting:
# virsh edit softwaretesting
Dadurch wird ein Texteditor geöffnet. Der Standardtexteditor ist der $EDITOR-Shell-Parameter (auf vi voreingestellt).
Anhalten eines Gasts
Um einen Gast mit virsh anzuhalten:
# virsh suspend {domain-id, domain-name or domain-uuid}
When a guest is in a suspended state, it consumes system RAM but not processor resources. Disk and network I/O does not occur while the guest is suspended. This operation is immediate and the guest can be restarted with the resume (Fortsetzen eines Gastes) option.
Fortsetzen eines Gastes
Um einen angehaltenen Gast mit virsh wieder fortzusetzen, verwenden Sie die resume-Option:
# virsh resume {domain-id, domain-name or domain-uuid}
Diese Operation wird sofort umgesetzt und die Gastparameter werden für suspend- und resume-Operationen beibehalten.
Speichern eines Gasts
Speichern Sie den aktuellen Status eines Gasts mit Hilfe des virsh-Befehls in einer Datei:
# virsh save {domain-name, domain-id or domain-uuid} filename
This stops the guest you specify and saves the data to a file, which may take some time given the amount of memory in use by your guest. You can restore the state of the guest with the restore (Wiederherstellen eines Gasts) option. Save is similar to pause, instead of just pausing a guest the present state of the guest is saved.
Wiederherstellen eines Gasts
Restore a guest previously saved with the virsh save command (Speichern eines Gasts) using virsh:
# virsh restore filename
Dies startet die gespeicherte virtuelle Maschine, was ggf. etwas Zeit benötigt. Der Name der virtuellen Maschine, sowie deren UUID bleiben erhalten, werden aber einer neuen ID zugewiesen.
Herunterfahren eines Gasts
Herunterfahren eines Gasts mit dem Befehl virsh:
# virsh shutdown {domain-id, domain-name or domain-uuid}
Sie können das Verhalten des neustartenden Gasts kontrollieren, indem Sie den Parameter on_shutdown der Gastkonfigurationsdatei ändern.
Neustarten eines Gasts
Neustarten eines Gasts mit dem Befehl virsh:
#virsh reboot {domain-id, domain-name or domain-uuid}
Sie können das Verhalten des neustartenden Gasts kontrollieren, indem Sie den Parameter on_reboot der Gastkonfigurationsdatei ändern.
Abbrechen eines Gasts
Abbrechen eines Gasts mit dem Befehl virsh:
# virsh destroy {domain-id, domain-name or domain-uuid}
This command does an immediate ungraceful shutdown and stops the specified guest. Using virsh destroy can corrupt guest file systems . Use the destroy option only when the guest is unresponsive. For para-virtualized guests, use the shutdown option(Herunterfahren eines Gasts) instead.
Abrufen der Domain-ID eines Gasts
Um die Domain-ID eines Gasts zu erhalten:
# virsh domid {domain-name or domain-uuid}
Abrufen des Domain-Namens eines Gasts
Um den Domain-Namen eines Gasts zu erhalten:
# virsh domname {domain-id or domain-uuid}
Abrufen der UUID eines Gasts
Um die Universally Unique Identifier (UUID) eines Gasts zu erhalten:
# virsh domuuid {domain-id or domain-name}
Ein Beispiel für eine virsh domuuid-Ausgabe:
# virsh domuuid r5b2-mySQL01
4a4c59a7-ee3f-c781-96e4-288f2862f011

Anzeigen von Gastinformationen
Wenn Sie virsh zusammen mit der Domain-ID, dem Domain-Namen oder der UUID des Gasts verwenden, können Sie Informationen über den angegebenen Gast anzeigen:
# virsh dominfo {domain-id, domain-name or domain-uuid}
Sehen Sie ein Beispiel für eine virsh dominfo-Ausgabe:
# virsh dominfo r5b2-mySQL01
id:             13
name:           r5b2-mysql01
uuid:           4a4c59a7-ee3f-c781-96e4-288f2862f011
os type:      	linux
state:          blocked
cpu(s):         1
cpu time:     	11.0s
max memory:     512000 kb
used memory:    512000 kb

Anzeigen von Host-Informationen
Um Informationen über den Host anzuzeigen:
# virsh nodeinfo

Ein Beispiel für eine virsh nodeinfo-Ausgabe:
# virsh nodeinfo
CPU model                    x86_64
CPU (s)                      8
CPU frequency                2895 Mhz
CPU socket(s)                2      
Core(s) per socket           2
Threads per core:            2
Numa cell(s)                 1
Memory size:                 1046528 kb

Dargestellt werden die Knoteninformationen und die Maschinen, die den Virtualisierungsprozess unterstützen.
Anzeigen der Gäste
Um eine Gästeliste samt jeweiligem aktuellen Status mit virsh anzuzeigen:
# virsh list

Andere verfügbare Optionen sind u. a.:
die Option --inactive, um inaktive Gäste aufzulisten (also Gäste, die zwar definiert wurden, zur Zeit jedoch nicht aktiv sind, und
die Option --all, um alle Gäste aufzulisten. Zum Beispiel:
# virsh list --all
 Id Name                 State
----------------------------------
  0 Domain-0             running
  1 Domain202            paused
  2 Domain010            inactive
  3 Domain9600           crashed

Die Ausgabe von virsh list kann kategorisiert werden als eine von sechs möglichen Stati (nachfolgend erläutert):
Anzeigen von Informationen zur virtuellen CPU
Um Information einer virtuellen CPU für einen Gast mittels virsh anzuzeigen:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
Hier ein Beispiel für eine virsh vcpuinfo-Ausgabe:
# virsh vcpuinfo r5b2-mySQL01
VCPU:           0
CPU:            0
State:          blocked
CPU time:       0.0s
CPU Affinity:   yy

Konfigurieren der Affinität einer virtuellen CPU
Um die Affinität von virtuellen CPUs mit physischen CPUs zu konfigurieren:
# virsh vcpupin {domain-id, domain-name or domain-uuid} vcpu, cpulist
Wobei vcpu die Nummer der virtuellen VCPU und cpulist die Anzahl der physischen CPUs angibt.
Konfigurieren der Anzahl virtueller CPUs
Um mit virsh die Anzahl der CPUs zu ändern, die einem Gast zugewiesen sind:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
Der neue count-Wert darf die Anzahl, die bei der Erstellung des Gasts festgelegt wurde, nicht überschreiten.
Konfigurieren der Speicherzuweisung
Um die Speicherzuweisung für einen Gast mit virsh zu ändern:
# virsh setmem {domain-id or domain-name} count

Sie müssen count in Kilobytes angeben. Der neue Wert darf die Menge, die Sie bei der Erstellung des Gasts festgelegt haben, nicht überschreiten. Werte kleiner als 64 MB funktionieren mit den meisten Betriebssystemen wahrscheinlich nicht. Ein höherer maximaler Speicherwert beeinflusst einen aktiven Gast nicht, es sei denn, der neue Wert ist niedriger, was zu einem Verkleinern der Speicherbelegung führen würde.
Anzeigen von Blockgerätinformationen für einen Gast
Verwenden Sie virsh domblkstat, um Blockgerätstatistiken für einen laufenden Gast anzuzeigen.
# virsh domblkstat GuestName block-device
Anzeigen von Netzwerkgerätinformationen für einen Gast
Verwenden Sie virsh domifstat, um Netzwerkgerätstatistiken für einen laufenden Gast anzuzeigen.
# virsh domifstat GuestName interface-device 
Gästeverwaltung mit virsh
Ein Gast kann mit Hilfe des virsh-Befehls auf einen anderen Host migriert werden. Migrieren Sie eine Domain auf einen anderen Host. Fügen Sie --live für eine Live-Migration hinzu. Der migrate-Befehl akzeptiert Parameter im folgenden Format:
# virsh migrate --live GuestName DestinationURL
Der --live-Parameter ist optional. Fügen Sie den --live-Parameter für Live-Migrationen hinzu.
The GuestName parameter represents the name of the guest which you want to migrate.
The DestinationURL parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt running.
Once the command is entered you will be prompted for the root password of the destination system.
Verwalten virtueller Netzwerke
Dieser Abschnitt behandelt die Verwaltung virtueller Netzwerke mit virsh. Um virtuelle Netzwerke aufzulisten:
# virsh net-list

Dieser Befehl generiert eine Ausgabe ähnlich der folgenden:
# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes      
vnet1	             active     yes      
vnet2	             active     yes

Um Netzwerkinformationen für ein spezielles virtuelles Netzwerk anzusehen:
# virsh net-dumpxml NetworkName
So werden Informationen über ein angegebenes virtuelles Netzwerk im XML-Format angezeigt:
# virsh net-dumpxml vnet1
<network>
  <name>vnet1</name>
  <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
  <forward dev='eth0'/>
  <bridge name='vnet0' stp='on' forwardDelay='0' />
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
    </dhcp>
  </ip>
</network>

Andere virsh-Befehle zur Verwaltung virtueller Netzwerke sind u. a.: