Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:kvm:admin [22.11.2013 12:49. ] djangocentos:kvm:admin [17.12.2022 13:03. ] (aktuell) – [vHOST anlegen mit virt-install] django
Zeile 1: Zeile 1:
 +====== Administration der vHOSTs ======
 +Für die Administration unserer vHOSTs stehen uns mehrere Wege und Mittel zur Verfügung.
 +===== Virtual Machine Viewer =====
 +Möchten wir nur kurz Zugriff auf eine Maschine, so muss nicht unbedingt der [[http://virt-manager.org|Virtual Machine Manager]] gestartet werden. Ähnlich wie beim Zugriff per [[http://de.wikipedia.org/wiki/Virtual_Network_Computing|VNC]] oder [[http://en.wikipedia.org/wiki/Tsclient|Terminal Server Client]] kann hier ohne grossen Aufwand auf einen vHOST zugegriffen werden. 
 +
 +So kann man z.B. einem Nutzer nur Zufgriff auf eine Maschine geben und muss diesen nicht über den [[http://virt-manager.org|Virtual Machine Manager]] Zugriff auf alle vHOSTs geben.
 +
 +Aufgerufen wird der **Virtual Machine Viewer** z.B. über folgenden Aufruf:
 +   # virt-viewer --connect qemu:///system CentOS_6_minimal_Desktop
 +Dabei verbindet sich der **Viewer** auf den vHOST **//CentOS_6_minimal_Desktop//** der auf dem System **//system//** unter **//QEMU//** läuft.
 +
 +{{ :centos:kvm:virt-viewer_000.png?575 |Bild: Photo des Virtual Machine Viewer}}
 +
 +Natürlich können wir uns auch von remote mit der virtuellen Maschine verbinden. Hierzu **muss** der Nutzer mit den administrativen Rechten auf dem Virtualisierungs-Host der Gruppe **''libvirt''** angehören. Wir überprüfen also zunächst ob der Admin-Nutzer **''django''** der Gruppe **''libvirt''** angehört.
 +   # getent group libvirt
 +
 +  libvirt:x:982
 +
 +Wir weisen also der Gruppe **''libvirt''** dem Nutzer **''django''** zu.
 +   # usermod -aG libvirt django
 +
 +Auf dem Administrationsrechner installieren wir das Paket **''virt-viewer''** mit dem Paketverwaltungsprogramm des Systems.
 +   # dnf install virt-viewer -y
 +
 +   $ sudo apt install virt-viewer -y
 +
 +   # zyppr in virt-viewer -y
 +
 +Nun können wir uns mit der virtuellen-Maschine des Virtualisierungssystem verbinden. In folgendem Beispiel verbindet sich der Admin **''django''** mit der virtuellen Maschine **''android-x86''** auf dem Virtualisierungs-Host **''kvm.dmz.nausch.org''**
 +   $ virt-viewer --connect qemu+ssh://django@kvm.dmz.nausch.org/system android-x86
 +
 +{{ :centos:kvm:virt-viewer_001.png?575 |Bild: Photo des Virtual Machine Viewer}}
 +
 +===== Virtual Machine Manager =====
 +==== Autostart eines vHOST aktivieren ====
 +Soll ein vHOSt nach dem Boten des Wirt-Systems automatisch gestartet werden, so ist der vHOST auf **Autostart** zu stellen. Hierzu öffnet man die **__Detailansicht der virtuellen Hardware__** des betreffenden vHOSTs. Unter dem Menüpunkt **Boot Options** verbirgt sich die Checkbox **[Virt__u__elle Maschine beim Start des Host starten]**. Soll der vHOST automatisch starten, so ist diese Checkbox einfach anzuwählen und die Konfiguration des Autostarts über die Schaltfläche **[An__w__enden]** fertig zu stellen.
 +
 +{{ :centos:kvm:virt-manager_016.png?450 |Bild: Photo "Autostart Aktivierung" beim des Virtual Machine Managers}}
 +
 +==== vHOST ein-/ausschalten und rebooten ====
 +Möchten wir einen vHOST herunterfahren, rebooten oder "hart" ausschalten, so haben wir meim **Virtual Machine Manager** unter dem Menüpunkt **[Herunterfahren]** bzw. über dem Menüpunkt **[V]**, die entsprechenden Optionen.
 +
 +{{ :centos:kvm:virt-manager_021.png?500 |Bild: "Menüauswahl zum Herunterfahren eines vHOSTS" beim Virtual Machine Manager}}
 +==== vHOST Klonen ====
 +Mit Hilfe des **Virtual Machine Managers** können wir sehr einfach und leicht, Duplikate einer bestehenden Installation  (vHOST) anfertigen. Auf nachfolgendem Bild sehen wir den [[http://virt-manager.et.redhat.com/|Virtual Machine Manager]], bei dem gerade ein VHOST gestartet ist und läuf.
 +
 +{{ :centos:kvm:virt-manager_013.png?500 |Bild: Photo des Virtual Machine Managers}}
 +
 +Das betreffende [[http://qemu-buch.de/de/index.php/QEMU-KVM-Buch/_Speichermedien/_Image-Formate#qcow2|QCOW2]] Festplattenimage befindet sich gemäß unserer Konfiguration unter //**/var/lib/libvirt/images/**//.
 +
 +   # ll /var/lib/libvirt/images/
 +   insgesamt 2471372
 +   -rw-------. 1 root root 2530803712  2. Aug 20:35 CentOS_6_minimal_Desktop.img
 +
 +Die Konfiguration unseres ersten vHOST befindet sich im Ordner //**/etc/libvirt/qemu/**//.
 +
 +   # ll /etc/libvirt/qemu/*xml
 +   -rw-------. 1 root root 2098  2. Aug 20:32 /etc/libvirt/qemu/CentOS_6_minimal_Desktop.xml
 +
 +<file XML /etc/libvirt/qemu/CentOS_6_minimal_Desktop.xml>
 +<domain type='kvm'>
 +  <name>CentOS_6_minimal_Desktop</name>
 +  <uuid>60df5028-ee63-3b33-2946-8839863a9c07</uuid>
 +  <memory>1048576</memory>
 +  <currentMemory>1048576</currentMemory>
 +  <vcpu>1</vcpu>
 +  <os>
 +    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
 +    <boot dev='hd'/>
 +  </os>
 +  <features>
 +    <acpi/>
 +    <apic/>
 +    <pae/>
 +  </features>
 +  <clock offset='utc'/>
 +  <on_poweroff>destroy</on_poweroff>
 +  <on_reboot>restart</on_reboot>
 +  <on_crash>restart</on_crash>
 +  <devices>
 +    <emulator>/usr/libexec/qemu-kvm</emulator>
 +    <disk type='file' device='disk'>
 +      <driver name='qemu' type='qcow2' cache='none'/>
 +      <source file='/var/lib/libvirt/images/CentOS_6_minimal_Desktop.img'/>
 +      <target dev='vda' bus='virtio'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 +    </disk>
 +    <disk type='block' device='cdrom'>
 +      <driver name='qemu' type='raw'/>
 +      <target dev='hdc' bus='ide'/>
 +      <readonly/>
 +      <address type='drive' controller='0' bus='1' unit='0'/>
 +    </disk>
 +    <controller type='ide' index='0'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 +    </controller>
 +    <interface type='network'>
 +      <mac address='52:54:00:55:3e:a7'/>
 +      <source network='default'/>
 +      <model type='virtio'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 +    </interface>
 +    <serial type='pty'>
 +      <target port='0'/>
 +    </serial>
 +    <console type='pty'>
 +      <target port='0'/>
 +    </console>
 +    <input type='tablet' bus='usb'/>
 +    <input type='mouse' bus='ps2'/>
 +    <graphics type='vnc' port='-1' autoport='yes'/>
 +    <sound model='ac97'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 +    </sound>
 +    <video>
 +      <model type='cirrus' vram='9216' heads='1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 +    </video>
 +    <memballoon model='virtio'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 +    </memballoon>
 +  </devices>
 +</domain>
 +</file>
 +
 +Im nachfolgenden Beispiel werden wir den vorhandenen ersten vHOST klonen. Hierzu schalten wir diesen erst einam über den **Virtual Machine Managers** aus. Mit einem Klick mit der rechten Maustaste öffnet sich der Dialog, wo wir die Option zum **__K__lonen** eines Systemes finden.
 +
 +{{ :centos:kvm:virt-manager_017.png?500 |Bild: Photo des Virtual Machine Managers}}
 +
 +Im folgendem Fenster werden wir gebeten, den Namen und den Speicherort anzugeben.
 +
 +{{ :centos:kvm:virt-manager_018.png?475 |Bild: Photo "Virtuelle Maschine Klonen" des Virtual Machine Managers}}
 +
 +Nach dem Anwählen der Schaltfläche **[__K__lonen]** wird eine Kopie unseres vHOST angefertigt.
 +
 +{{ :centos:kvm:virt-manager_019.png?310 |Bild: Photo "Virtuelle Maschine Klonen" des Virtual Machine Managers}}
 +
 +Zum Schluß finden wir im **Virtual Machine Managers** auch unseren zweiten vHOST.
 +
 +{{ :centos:kvm:virt-manager_020.png?500 |Bild: Photo des Virtual Machine Managers}}
 +
 +Im Image-Verzeichmis findedn wir nun zwei QCOW2-Files, ein des originalen vHOST und eine für dessen Klone.
 +
 +   # ll /var/lib/libvirt/images/
 +   insgesamt 4893016
 +   -rw-r--r--. 1 root root 2479882240  2. Aug 21:17 CentOS_6_minimal_Desktop-clone.img
 +   -rw-------. 1 root root 2530803712  2. Aug 20:35 CentOS_6_minimal_Desktop.img
 +
 +Auch im Konfigurationsverzeichnis finden wor die beiden zugehörigen XML-Konfigurationsdateien.
 +
 +   # ll /etc/libvirt/qemu/*xml
 +   -rw-------. 1 root root 2112  2. Aug 21:16 /etc/libvirt/qemu/CentOS_6_minimal_Desktop-clone_1.xml
 +   -rw-------. 1 root root 2098  2. Aug 20:32 /etc/libvirt/qemu/CentOS_6_minimal_Desktop.xml
 +==== vHOST Löschen ====
 +Möchten wir einen vHOST löschen so klicken wir im **Virtual Machine Manager** einfach mit der rechten Maustaste auf den betreffenden vHOST. Dort finden wir den Menüpunkt **[__L__öschen]**
 +
 +{{ :centos:kvm:virt-manager_022.png?500 |Bild: "Löschen eines vHOSTs" beim Virtual Machine Manager}}
 +
 +Mit der Checkbox **[Zugehörige D__a__teien löschen]** haben wir die Möglichkeit nicht nur die XML-Konfigurationsdatei im Verzeichnis //**/etc/libvirt/qemu/**// zu löschen, sondern auch das Festpalttenimage (QCOW2) im Imageverzeichnis //**/var/lib/libvirt/images/**//.
 +
 +{{ :centos:kvm:virt-manager_023.png?350 |Bild: "Bestätigen zum Löschen" beim Virtual Machine Manager}}
 +===== SPICE =====
 +Eine sehr interessante Alternative zum **virt-mananger** ist [[http://spice-space.org/|SPICE]]. **SPICE** ((**S**imple **P**rotocol for **I**ndependent **C**omputing **E**nvironments)) ist ein System zum Anzeigen von virtuellen Umgebungen, welches es erlaubt, virtuelle Desktopumgebungen überall über das Netzwerk anzuzeigen, auch auf verschiedenen Architekturen. Das interessante Feature gegenüber **virt-manager** und **virt-viewer** ist die Möglichkeit, neben den Videodaten auch die Audiodaten zu vom vHOST zum Client zu übertragen.
 +==== Server ====
 +=== Installation ===
 +Falls noch nicht bei der Grundinstallation erfolgt, installieren wir das RPM-Paket **spice-server** auf unserem Wirt-System.
 +   # yum install spice-server -y
 +=== Konfiguration ===
 +Zur Konfiguration unseres vHOSTs verwenden wir am besten die Option //edit// von **virsh**. Zuvor beenden wir aber erst noch unsere virtuelle Maschine.
 +   # virsh shutdown vml010008
 +
 +Anschließend bearbeiten wir die zum vHOST passende XML-Konfigurationsdatei.
 +   # virsh edit vml010008
 +
 +Ein standardmäßiges XML-File eines vHOSTs, welches wir mit Hilfe von **virt-manager** erzeugt haben, sieht exemplarisch wie folgt aus.
 +<code XML>
 +<domain type='kvm'>
 +  <name>vml010008</name>
 +  <uuid>422b4bb1-ee3c-7df3-805e-aa8f36feb7d3</uuid>
 +  <memory>1048576</memory>
 +  <currentMemory>1048576</currentMemory>
 +  <vcpu>1</vcpu>
 +  <os>
 +    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
 +    <boot dev='hd'/>
 +  </os>
 +  <features>
 +    <acpi/>
 +    <apic/>
 +    <pae/>
 +  </features>
 +  <clock offset='utc'/>
 +  <on_poweroff>destroy</on_poweroff>
 +  <on_reboot>restart</on_reboot>
 +  <on_crash>restart</on_crash>
 +  <devices>
 +    <emulator>/usr/libexec/qemu-kvm</emulator>
 +    <disk type='file' device='disk'>
 +      <driver name='qemu' type='qcow2' cache='none'/>
 +      <source file='/var/lib/libvirt/images/vml010008.img'/>
 +      <target dev='vda' bus='virtio'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 +    </disk>
 +    <disk type='block' device='cdrom'>
 +      <driver name='qemu' type='raw'/>
 +      <target dev='hdc' bus='ide'/>
 +      <readonly/>
 +      <address type='drive' controller='0' bus='1' unit='0'/>
 +    </disk>
 +    <controller type='ide' index='0'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 +    </controller>
 +    <interface type='bridge'>
 +      <mac address='52:54:00:ab:de:7b'/>
 +      <source bridge='br1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 +    </interface>
 +    <serial type='pty'>
 +      <target port='0'/>
 +    </serial>
 +    <console type='pty'>
 +      <target port='0'/>
 +    </console>
 +    <input type='tablet' bus='usb'/>
 +    <input type='mouse' bus='ps2'/>
 +    <graphics type='vnc' port='-1' autoport='yes'/>
 +    <sound model='ac97'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 +    </sound>
 +    <video>
 +      <model type='cirrus' vram='9216' heads='1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 +    </video>
 +    <memballoon model='virtio'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 +    </memballoon>
 +  </devices>
 +</domain>
 +</code>
 +Folgende Zeilen des XML-Files passen wir nun an:
 +  * **<graphics type='vnc' port='-1' autoport='yes'/>**
 +  * **<model type='cirrus' vram='9216' heads='1'/>**
 +
 +Anstatt dem **graphics type='vnc'** setzen wir nun **graphics type='spice'**, gefolgt von der Angabe des **ports** und letztliches eines **Passwortes**, welches zum Verbinden mit dem vHOST später benötigt wird. Die komplette Konfigurationszeile lautet:
 +   * **<graphics type='spice' port='5930' autoport='no' listen='0.0.0.0' passwd='nerdbert-ist-doof!'/>**
 +
 +Bei der Definition der Graphikkarte tauschen wir den **model type='cirrus'** gegen **model type='qxl'**, so dass die komplette Zeile im XML-Fiel nunmehr lautet:
 +   * **<model type='qxl' vram='32768' heads='1'/>**
 +
 +Das XML-File unseres exemplarischen vHOSTs lautet somit:
 +<code XML>
 +<domain type='kvm'>
 +  <name>vml010008</name>
 +  <uuid>422b4bb1-ee3c-7df3-805e-aa8f36feb7d3</uuid>
 +  <memory>1048576</memory>
 +  <currentMemory>1048576</currentMemory>
 +  <vcpu>1</vcpu>
 +  <os>
 +    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
 +    <boot dev='hd'/>
 +  </os>
 +  <features>
 +    <acpi/>
 +    <apic/>
 +    <pae/>
 +  </features>
 +  <clock offset='utc'/>
 +  <on_poweroff>destroy</on_poweroff>
 +  <on_reboot>restart</on_reboot>
 +  <on_crash>restart</on_crash>
 +  <devices>
 +    <emulator>/usr/libexec/qemu-kvm</emulator>
 +    <disk type='file' device='disk'>
 +      <driver name='qemu' type='qcow2' cache='none'/>
 +      <source file='/var/lib/libvirt/images/vml010008.img'/>
 +      <target dev='vda' bus='virtio'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 +    </disk>
 +    <disk type='block' device='cdrom'>
 +      <driver name='qemu' type='raw'/>
 +      <target dev='hdc' bus='ide'/>
 +      <readonly/>
 +      <address type='drive' controller='0' bus='1' unit='0'/>
 +    </disk>
 +    <controller type='ide' index='0'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 +    </controller>
 +    <interface type='bridge'>
 +      <mac address='52:54:00:ab:de:7b'/>
 +      <source bridge='br1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 +    </interface>
 +    <serial type='pty'>
 +      <target port='0'/>
 +    </serial>
 +    <console type='pty'>
 +      <target port='0'/>
 +    </console>
 +    <input type='tablet' bus='usb'/>
 +    <input type='mouse' bus='ps2'/>
 +    <graphics type='spice' port='5930' autoport='no' listen='0.0.0.0' passwd='nerdbert-ist-doof!'/>
 +    <sound model='ac97'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 +    </sound>
 +    <video>
 +      <model type='qxl' vram='32768' heads='1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 +    </video>
 +    <memballoon model='virtio'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 +    </memballoon>
 +  </devices>
 +</domain>
 +</code>
 +Abschließend brauchen wir nun nur noch unsere virtuelle Maschine zu starten
 +   # virsh start vml010008
 +==== Client ====
 +=== Installation ===
 +Auf Seite unseres CentOS 6.x Clients benötigen wir nun das RPM-Paket **spice-client** auf unserem Arbeitsplatzrechner.
 +   # yum install spice-client -y
 +=== Programmaufruf ===
 +Möchten wir uns nun mit unserem vHost verbinden benutzen wir folgende Befehlsfolge.
 +
 +   $ spicec -h virtualisierungshost.intra.nausch.org -p 5930 -w nerdbert-ist-doof!
 +
 +Die Optionen haben hierbei folgende Bewandnis:
 +  * **-h** Hostname oder IP-Adresse des Wirt-Systems
 +  * **-p** gewählter Port, den wir bei der Serverkonfiguration gewählt hatten
 +  * **-w** Passwort für den Zufgriff auf die virtuelle Maschine. 
 +
 +Im folgenden Beispiel erfolgt die Anzeige der virtuellen Maschine im SPICE-Fenster und die Audiodaten werden von der virtuellen Maschien zum realen Host übertragen und dort über die Soundkarte ausgegeben.
 +
 +{{ :centos:kvm:spice-client.png?500 |SPICE Client Bildschirmfenster}}
 +
 +===== Management mit virsh =====
 +Natürlich kann man auch die Administration auf Konsolebene durchführen und ist nicht zwingend auf die GUI **Virtual Machine Manager** angewiesen.
 +Nachfolgend gehen wir auf die wichtigsten Befehle von **virsh** ein.
 +==== Liste aller laufenden vHOSTs ====
 +Eine Aufstellung aller gerade laufenden vHOSTs bekommt man mnit der Option //list//.
 +   # virsh list
 +<code> Id Name                 Status
 +----------------------------------
 +  4 vHOST_7              laufend
 +  5 vHOST_3              laufend
 +  7 vHOST_8              laufend
 +  8 vHOST_2              laufend
 +  9 vHOST_9              laufend
 + 10 vHOST_1              laufend</code>
 +
 +==== Liste aller vHOSTs ====
 +Möchte man eine Übersicht aller Gäste, also die gerade Laufen und welche die heruntergefahren oder pausiert wurden, ergänzt man die vorgenannte Option einfach auf //list --all//.
 +   # virsh list --all
 +<code> Id Name                 Status
 +----------------------------------
 +  4 vHOST_7              laufend
 +  5 vHOST_3              laufend
 +  7 vHOST_8              pausiert
 +  8 vHOST_2              laufend
 +  9 vHOST_9              laufend
 + 10 vHOST_1              laufend
 +  - CentOS_6_minimal_Desktop ausschalten
 +  - vHOST_4              ausschalten
 +  - vHOST_5              ausschalten
 +  - vHOST_6              ausschalten
 +</code>
 +==== Starten eines vHOSTs ====
 +Zum Starten eines vHOSTs benötigt man die Option //start//.
 +   # virsh start vHOST_5
 +
 +   Domain vHOST_5 gestartet
 +==== Anhalten eines vHOSTs ====
 +Will man hingegen ein Gast-System "pausieren", also in den Suspend-Mode versetzen, verwendet amn die Option //suspend//.
 +   # virsh suspend vHOST_1
 +
 +   Domain vHOST_1 angehalten
 +==== angehaltenen vHOST fortsetzen ====
 +Einen zuvor angehaltenen vHOST versetzt man mit der Option //resume// wieder in den Produktionsbetrieb.
 +    # virsh resume vHOST_8
 +
 +   Domain vHOST_8 fortgesetzt
 +==== Shutdown eines vHOSTs ====
 +Zum kontrollierten Stillegen (shutdown) eines vHOSTs benutzt man einfach die Option //shutdown//.
 +   # virsh shutdown vHOST_7
 +
 +   Domain vHOST_7 wird heruntergefahren
 +==== Poweroff eines vHOSTs ====
 +Bei einem normalen Rechner/Server kann man einfach den Stecker ziehen oder bei einem LapTop die Batterie entfernen. So ein hartes Ausschalten ist in der Regel keinesfalls zu empfehlen, kann doch so das System erheblichen Schaden nehmen. 
 +Bei unserer Virtualisierungsumgebung haben können wir auch das imaginäre Steckernetzteilkabel ziehen, hierzu benötigen wir die Option **''destroy''**. 
 +<WRAP round alert>ACHTUNG:
 +
 +Es erfolgt keinerlei Warnung bei der Aktion! </WRAP>
 +   # virsh destroy vHOST_9
 +
 +   Domain vHOST_9 gelöscht
 +==== Konfiguration eines vHOSTs editieren ====
 +Will man das XML-File einer virtuellen Maschine per Hand bearbeiten so nutzt man am besten den Befehl //edit//.
 +   # virsh edit vml010008
 +<code XML>
 +<domain type='kvm'>
 +  <name>vml010008</name>
 +  <uuid>422b4bb1-ee3c-7df3-805e-aa8f36feb7d3</uuid>
 +  <memory>1048576</memory>
 +  <currentMemory>1048576</currentMemory>
 +  <vcpu>1</vcpu>
 +  <os>
 +    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
 +    <boot dev='hd'/>
 +  </os>
 +  <features>
 +    <acpi/>
 +    <apic/>
 +    <pae/>
 +  </features>
 +  <clock offset='utc'/>
 +  <on_poweroff>destroy</on_poweroff>
 +  <on_reboot>restart</on_reboot>
 +  <on_crash>restart</on_crash>
 +  <devices>
 +    <emulator>/usr/libexec/qemu-kvm</emulator>
 +    <disk type='file' device='disk'>
 +      <driver name='qemu' type='qcow2' cache='none'/>
 +      <source file='/var/lib/libvirt/images/vml010008.img'/>
 +      <target dev='vda' bus='virtio'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 +    </disk>
 +    <disk type='block' device='cdrom'>
 +      <driver name='qemu' type='raw'/>
 +      <target dev='hdc' bus='ide'/>
 +      <readonly/>
 +      <address type='drive' controller='0' bus='1' unit='0'/>
 +    </disk>
 +    <controller type='ide' index='0'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 +    </controller>
 +    <interface type='bridge'>
 +      <mac address='52:54:00:ab:de:7b'/>
 +      <source bridge='br1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 +    </interface>
 +    <serial type='pty'>
 +      <target port='0'/>
 +    </serial>
 +    <console type='pty'>
 +      <target port='0'/>
 +    </console>
 +    <input type='tablet' bus='usb'/>
 +    <input type='mouse' bus='ps2'/>
 +    <graphics type='spice' port='5930' autoport='no' listen='0.0.0.0' passwd='yaq12wsx'/>
 +    <sound model='ac97'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 +    </sound>
 +    <video>
 +      <model type='qxl' vram='32768' heads='1'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 +    </video>
 +    <memballoon model='virtio'>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 +    </memballoon>
 +  </devices>
 +</domain>
 +</code>
 +==== Konfiguration eines vHOSTs exportieren ====
 +Möchte man das XML-Konfiguration eines vHOSTs exportieren, so bemüht man die Option //dumpxml//. Die Ausgabe erfolgt dabei auf dem Bildschirm, bei Bedarf leitet man die Ausagabe mit einem **> dumpfilename** einfach in eine Datei um.
 +   # virsh dumpxml vHOST_1
 +<code XML>
 +<domain type='kvm' id='10'>
 +  <name>vHOST_1</name>
 +  <uuid>fb8a8a5f-0252-1544-e71d-ed0dcbaab4ee</uuid>
 +  <memory>1048576</memory>
 +  <currentMemory>1048576</currentMemory>
 +  <vcpu>1</vcpu>
 +  <os>
 +    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
 +    <boot dev='hd'/>
 +  </os>
 +  <features>
 +    <acpi/>
 +    <apic/>
 +    <pae/>
 +  </features>
 +  <clock offset='utc'/>
 +  <on_poweroff>destroy</on_poweroff>
 +  <on_reboot>restart</on_reboot>
 +  <on_crash>restart</on_crash>
 +  <devices>
 +    <emulator>/usr/libexec/qemu-kvm</emulator>
 +    <disk type='file' device='disk'>
 +      <driver name='qemu' type='qcow2' cache='none'/>
 +      <source file='/var/lib/libvirt/images/CentOS_6_minimal_Desktop-clone.img'/>
 +      <target dev='vda' bus='virtio'/>
 +      <alias name='virtio-disk0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 +    </disk>
 +    <disk type='block' device='cdrom'>
 +      <driver name='qemu' type='raw'/>
 +      <target dev='hdc' bus='ide'/>
 +      <readonly/>
 +      <alias name='ide0-1-0'/>
 +      <address type='drive' controller='0' bus='1' unit='0'/>
 +    </disk>
 +    <controller type='ide' index='0'>
 +      <alias name='ide0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 +    </controller>
 +    <interface type='network'>
 +      <mac address='52:54:00:48:03:76'/>
 +      <source network='default'/>
 +      <target dev='vnet9'/>
 +      <model type='virtio'/>
 +      <alias name='net0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 +    </interface>
 +    <serial type='pty'>
 +      <source path='/dev/pts/10'/>
 +      <target port='0'/>
 +      <alias name='serial0'/>
 +    </serial>
 +    <console type='pty' tty='/dev/pts/10'>
 +      <source path='/dev/pts/10'/>
 +      <target port='0'/>
 +      <alias name='serial0'/>
 +    </console>
 +    <input type='tablet' bus='usb'>
 +      <alias name='input0'/>
 +    </input>
 +    <input type='mouse' bus='ps2'/>
 +    <graphics type='vnc' port='5909' autoport='yes'/>
 +    <sound model='ac97'>
 +      <alias name='sound0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 +    </sound>
 +    <video>
 +      <model type='cirrus' vram='9216' heads='1'/>
 +      <alias name='video0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 +    </video>
 +    <memballoon model='virtio'>
 +      <alias name='balloon0'/>
 +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 +    </memballoon>
 +  </devices>
 +  <seclabel type='dynamic' model='selinux'>
 +    <label>system_u:system_r:svirt_t:s0:c188,c495</label>
 +    <imagelabel>system_u:object_r:svirt_image_t:s0:c188,c495</imagelabel>
 +  </seclabel>
 +</domain>
 +</code>
 +==== Snapshoot eines vHOSTs speichern ====
 +Möchten wir einen Snapshoot eines laufenden vHOSTs machen, so benutzen wir die Option //save//, damit der gesamte Domainstatus ein einer Datei gespeichert wird.
 +   # virsh save vHOST_3 /var/lib/libvirt/qemu/snapshot/vHOST_3_20110803
 +
 +   Domain vHOST_3 nach /var/lib/libvirt/qemu/snapshot/vHOST_3_20110803 gespeichert
 +==== Snapshoot eines vHOSTs zurücksichern ====
 +Das Wiederherstellen eines vHOST mit Hilfe eines Snapshootfiles ist kein großer Aufwand- es wird hierzu die Option //restore// verwendet.
 +   # virsh restore /var/lib/libvirt/qemu/snapshot/vHOST_3_20110803
 +
 +   Domain aus /var/lib/libvirt/qemu/snapshot/vHOST_3_20110803 wiederhergestellt
 +
 +==== Löschen eines vHOSTs ====
 +Möchten wir einen vHOST wieder entfernen, ist auch das Dank des Befehls **''virsh''** kein allzu grosser Aufwand. Zunächst stoppen wir die VM, falls diese noch laufen sollte "auf die harte Tour". In folgendem Beispiel werden wir die VM mit dem Namen **''vml000200''** entfernen.
 +   # virsh destroy vml000200
 +
 +Anschliessend löschen wir den vHOST. Da wir auch alle zugehörigen Image-Dateien löschen wollen, benutzen wir zum Löschen die Option **''--remove-all-storage''**.
 +   # virsh undefine vml000200 --remove-all-storage
 +
 +  Domain vml000200 has been undefined
 +  Volume 'vda'(/var/lib/libvirt/images/vml000200.img) removed.
 +
 +Eine Abfrage, ob diese Maschine weiterhin bekannt ist wird entsprechend negativ beschieden.
 +   # virsh list --all | grep vml000200
 +
 +==== Befehlsliste von virsh abrufen ====
 +Eine Überischt aller **virsh**-Befehle bekommt man mit dem Punbkt //help//.
 +   # virsh help
 +<code>Befehle:
 +
 +    help            Hilfe ausgeben
 +    attach-device   Gerät aus einer XML-Datei anhängen
 +    attach-disk     Plattengerät anhängen
 +    attach-interface Netzwerkschnittstelle verbinden
 +    autostart       Eine Domain automatisch starten
 +    capabilities    Fähigkeiten
 +    cd              change the current directory
 +    connect         (Wieder)verbinden mit Hypervisor
 +    console         Verbindung mit der Gast-Konsole
 +    cpu-baseline    compute baseline CPU
 +    cpu-compare     compare host CPU with a CPU described by an XML file
 +    create          Eine Domain aus einer XML-Datei erstellen
 +    start           Eine (zuvor definierte) inaktive Domain starten
 +    destroy         Domain löschen
 +    detach-device   Gerät von einer XML-Datei lösen
 +    detach-disk     Plattengerät abtrennen
 +    detach-interface Netzwerkschnittstelle abhängen
 +    define          Definiere (aber starte keine) Domain aus einer XML-Datei
 +    domid           Einen Domain-Namen oder -UUID in Domain-ID konvertieren
 +    domuuid         Einen Domain-Namen oder -ID in Domain-UUID konvertieren
 +    dominfo         Domain-Informationen
 +    domjobinfo      domain job information
 +    domjobabort     abort active domain job
 +    domname         Eine Domain-ID oder UUID in Domain-Namen konvertieren
 +    domstate        Domain-Status
 +    domblkstat      Geräteblockstatistiken für eine Domain abrufen
 +    domifstat       Statistiken der Netzwerkschnittstelle für eine Domain abrufen
 +    dommemstat      get memory statistics for a domain
 +    domblkinfo      domain block device size information
 +    domxml-from-native Convert native config to domain XML
 +    domxml-to-native Convert domain XML to native config
 +    dumpxml         Domain-Informationen in XML
 +    edit            edit XML configuration for a domain
 +    find-storage-pool-sources discover potential storage pool sources
 +    find-storage-pool-sources-as find potential storage pool sources
 +    freecell        NUMA freier Speicher
 +    hostname        Hypervisor-Hostname ausgeben
 +    list            Domains auflisten
 +    migrate         Domain auf anderen Host migrieren
 +    migrate-setmaxdowntime set maximum tolerable downtime
 +    net-autostart   Ein Netzwerk automatisch starten
 +    net-create      Netzwerk aus einer XML-Datei erstellen
 +    net-define      Definiere (aber starte kein) Netzwerk aus einer XML-Datei
 +    net-destroy     Netzwerk löschen
 +    net-dumpxml     Netzwerk-Informationen in XML
 +    net-edit        edit XML configuration for a network
 +    net-list        Netzwerke auflisten
 +    net-name        Eine Netzwerk-UUID in einen Netzwerk-Namen konvertieren
 +    net-start       Ein (zuvor definiertes) inaktives Netzwerk starten
 +    net-undefine    Ein inaktives Netzwerk undefinieren
 +    net-uuid        Einen Netzwerk-Namen in eine Netzwerk-UUID konvertieren
 +    iface-list      list physical host interfaces
 +    iface-name      convert an interface MAC address to interface name
 +    iface-mac       convert an interface name to interface MAC address
 +    iface-dumpxml   interface information in XML
 +    iface-define    define (but don't start) a physical host interface from an XML file
 +    iface-undefine  undefine a physical host interface (remove it from configuration)
 +    iface-edit      edit XML configuration for a physical host interface
 +    iface-start     start a physical host interface (enable it / "if-up")
 +    iface-destroy   destroy a physical host interface (disable it / "if-down")
 +    managedsave     managed save of a domain state
 +    nodeinfo        Knoteninformation
 +    nodedev-list    enumerate devices on this host
 +    nodedev-dumpxml node device details in XML
 +    nodedev-dettach dettach node device from its device driver
 +    nodedev-reattach reattach node device to its device driver
 +    nodedev-reset   reset node device
 +    nodedev-create  create a device defined by an XML file on the node
 +    nodedev-destroy destroy a device on the node
 +    nwfilter-define define or update a network filter from an XML file
 +    nwfilter-undefine undefine a network filter
 +    nwfilter-dumpxml network filter information in XML
 +    nwfilter-list   list network filters
 +    nwfilter-edit   edit XML configuration for a network filter
 +    pool-autostart  autostart a pool
 +    pool-build      baue einen Pool
 +    pool-create     create a pool from an XML file
 +    pool-create-as  create a pool from a set of args
 +    pool-define     define (but don't start) a pool from an XML file
 +    pool-define-as  define a pool from a set of args
 +    pool-destroy    Zerstören eines Pools
 +    pool-delete     Pool löschen
 +    pool-dumpxml    Pool-Informationen in XML
 +    pool-edit       edit XML configuration for a storage pool
 +    pool-info       storage pool information
 +    pool-list       Poolliste
 +    pool-name       Konvertieren einer pool-UUID in einen Pool-Namen
 +    pool-refresh    Einen Pool aktualisieren
 +    pool-start      start a (previously defined) inactive pool
 +    pool-undefine   undefine an inactive pool
 +    pool-uuid       convert a pool name to pool UUID
 +    secret-define   define or modify a secret from an XML file
 +    secret-dumpxml  secret attributes in XML
 +    secret-set-value set a secret value
 +    secret-get-value Output a secret value
 +    secret-undefine undefine a secret
 +    secret-list     list secrets
 +    pwd             print the current directory
 +    quit            Dieses interaktive Terminal beenden
 +    exit            Dieses interaktive Terminal beenden
 +    reboot          Domain neu starten
 +    restore         Eine Domain aus einem gespeicherten Status in einer Datei wiederherstellen
 +    resume          Domain fortsetzen
 +    save            Einen Domainstatus in einer Datei speichern
 +    schedinfo       Scheduler-Parameter anzeigen/setzen
 +    dump            Den Kern einer Domain zu Analysezwecken in eine Datei dumpen
 +    shutdown        Kontrolliertes Stillegen einer Domain
 +    setmem          Speicherzuweisung ändern
 +    setmaxmem       Maximale Speichergrenze ändern
 +    setvcpus        Anzahl der virtuellen CPUs ändern
 +    suspend         Eine Domain anhalten
 +    ttyconsole      TTY-Konsole
 +    undefine        Eine inaktive Domain undefinieren
 +    update-device   update device from an XML file
 +    uri             Kanonisierte URI des Hypervisors ausgeben
 +    vol-create      create a vol from an XML file
 +    vol-create-from create a vol, using another volume as input
 +    vol-create-as   create a volume from a set of args
 +    vol-clone       clone a volume.
 +    vol-delete      Löschen eines Datenträgers
 +    vol-wipe        wipe a vol
 +    vol-dumpxml     vol information in XML
 +    vol-info        storage vol information
 +    vol-list        list vols
 +    vol-pool        returns the storage pool for a given volume key or path
 +    vol-path        returns the volume path for a given volume name or key
 +    vol-name        returns the volume name for a given volume key or path
 +    vol-key         returns the volume key for a given volume name or path
 +    vcpuinfo        Domain vcpu-Information
 +    vcpupin         Domain vcpu-Affinität kontrollieren
 +    version         Version anzeigen
 +    vncdisplay      VNC-Anzeige
 +    snapshot-create Create a snapshot
 +    snapshot-current Get the current snapshot
 +    snapshot-delete Delete a domain snapshot
 +    snapshot-dumpxml Dump XML for a domain snapshot
 +    snapshot-list   List snapshots for a domain
 +    snapshot-revert Revert a domain to a snapshot
 +
 +</code>
 +==== Hilfe zu einem virsh Befehl abfragen ====
 +Benötigt man Hilfe oder ergänzende Hinweise zu einer Befehlsoption, so kann man einfach mit der Option //help// und dem betreffenden Befehl **virsh** aufrufen.
 +   # virsh help domifstat
 +<code>  NAME
 +    domifstat - Statistiken der Netzwerkschnittstelle für eine Domain abrufen
 +
 +  SYNOPSIS
 +    domifstat <domain> <interface>
 +
 +  BESCHREIBUNG
 +    Statistiken der Netzwerkschnittstelle für eine laufende Domain abrufen.
 +
 +  OPTIONEN
 +    [--domain] <string>  Domainname, ID oder UUID
 +    [--interface] <string>  Schnittstellengerät
 +
 +</code>
 +
 +===== Generieren einer virtuelle Maschine mit virt-install =====
 +==== vHOST anlegen mit virt-install ====
 +Im folgenden Beispiel wollen wir einen vHOST neu anlegen und dazu den Befehl **''virt-install''** verwenden. Unser Beispielhost soll hierbei folgende Eigenschaften haben:
 +  * Name der VM: **''vml000200''**
 +  * Beschreibung: **''Arch-Linux Test VM''**
 +  * RAM: **''8 GB''**
 +  * CPU: **''4''**
 +  * Disk: **''30G''**
 +  * Boot-Image: **''archlinux-2022.12.17-x86_64.iso''**
 +  * Netzwerk: **''br-dmz''**
 +  * //Bei der Installation soll der// **''virt-viewer''** //automatisch gestartet werden.// 
 +
 +Daraus ergibt sich folgender Befehl (zur besseren Lesbarkeit hier umgebrochen):
 +<code> # virt-install -n vml000200 \ 
 +                --description "Arch-Linux Test VM" \
 +                --os-type=Linux \
 +                --os-variant=generic \ 
 +                --ram=8192 \
 +                --vcpus=4 \
 +                --disk path=/var/lib/libvirt/images/vml000200.img,bus=virtio,size=30 \
 +                --cdrom /var/lib/libvirt/boot/archlinux-2022.12.17-x86_64.iso \
 +                --network bridge:br-dmz \ 
 +                && virt-viewer --connect qemu:///system vml000200
 +</code>
 +
 +   # virt-install -n vml000200 --description "Arch-Linux Test VM" --os-type=Linux --os-variant=generic --ram=8192 --vcpus=4 --disk path=/var/lib/libvirt/images/vml000200.img,bus=virtio,size=30 --cdrom /var/lib/libvirt/boot/archlinux-2022.12.17-x86_64.iso --network bridge:br-dmz && virt-viewer --connect qemu:///system vml000200
 +
 +{{ :centos:kvm:arch_boot_screen.png?nolink&500 |Bild: Arch Linux Boot Screen}}
 +===== Shutdownoptimierung =====
 +Wird das Wirt-System heruntergefahren oder der libvirt-Daemon beendet, steht man in aller Regel vor einem Dilemma. Denn wie bei einem realen System, kann man nicht einfach den Powerknopf drücken. So versetzt der libvirt-Daemon in der Regel seine Gast-Systeme in den [[http://de.wikipedia.org/wiki/Ruhezustand|Suspend-Mode]]. 
 +Kritische Systemdienste, wie z.B. [[centos:ntp-zeitserver|NTPD]] verweigern nach dem Aufwecken unter Umständen den weiteren Betrieb, so dass es unter Umständen wünschenswerter ist, den Gast erst herunterzufahren und dann den libvirt-Daemon zu beenden.
 +
 +Zur Lösung dieser Herausforderung sind mehrere Änderungen, je nach erfolgter Konfiguration der Gastsysteme, notwendig. So wird z.B. bei einer Minimalinstallation kein acpid-Daemon installiert, den wir hierzu benötigen.
 +
 +==== acpid-Daemon ====
 +Wie gerade beleuchtet, muss auf dem Gast.System der libvirt-daemon installiert sein und auch laufen, damit der libvirt-Daemon den Gast über definierte Signale auszuschalten ohne dass sich dieser via ssh mit dem vHOST verbinden muss.
 +
 +Als erstes prüfen wir ob das benötigte RPM-Paket **acpid** installiert wurde.
 +   # rpm -q acpid
 +Wurde das Paket installiert erhalten wir als Antwort:
 +   acpid-1.0.10-2.1.el6.x86_64
 +Fehlt das Paket wird uns dies entsprechend angezeigt:
 +   package acpid is not installed
 +Ob der acpid-Daemon läuft kontrollieren ganz einfach mit folgendem Aufruf:
 +   # chkconfig --list | grep acpid
 +
 +   acpid          0:off 1:off 2:on 3:on 4:on 5:on 6:off
 +Fehlt das Paket **acpid**, so installieren wir dieses erst via **yum**.
 +   # yum install acpid -y
 +Bei Bedarf können wir uns genau ansehen, was dieses Paket mit ins System bringt. Wir benutzen hierzu einfach die Option //**qil**// beim Befehl **yum**.
 +   # rpm -qil acpid
 +<code>Name        : acpid                        Relocations: (not relocatable)
 +Version     : 1.0.10                            Vendor: CentOS
 +Release     : 2.1.el6                       Build Date: Wed 18 Aug 2010 10:39:10 PM CEST
 +Install Date: Wed 26 Oct 2011 05:24:19 PM CEST      Build Host: c6b3.bsys.dev.centos.org
 +Group       : System Environment/Daemons    Source RPM: acpid-1.0.10-2.1.el6.src.rpm
 +Size        : 74381                            License: GPLv2+
 +Signature   : RSA/8, Sun 03 Jul 2011 06:01:31 AM CEST, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://acpid.sourceforge.net/
 +Summary     : ACPI Event Daemon
 +Description :
 +acpid is a daemon that dispatches ACPI events to user-space programs.
 +/etc/acpi
 +/etc/acpi/actions
 +/etc/acpi/actions/power.sh
 +/etc/acpi/events
 +/etc/acpi/events/power.conf
 +/etc/acpi/events/video.conf
 +/etc/rc.d/init.d/acpid
 +/usr/bin/acpi_listen
 +/usr/sbin/acpid
 +/usr/share/doc/acpid-1.0.10
 +/usr/share/doc/acpid-1.0.10/COPYING
 +/usr/share/doc/acpid-1.0.10/Changelog
 +/usr/share/doc/acpid-1.0.10/README
 +/usr/share/doc/acpid-1.0.10/TODO
 +/usr/share/man/man8/acpi_listen.8.gz
 +/usr/share/man/man8/acpid.8.gz
 +</code>
 +
 +Damit der Systemdienst auch beim Neustart des vHOSTs mitgestartet wird, sorgen wir nun dafür, dass dieser auch automatisch gestartet wird.
 +   # chkconfig acpid on
 +Ob die Konfigurationsänderung auch gegriffen hat, kann man dies bei Bedarf entsprechend abfragen.
 +   # chkconfig --list | grep acpid
 +
 +   acpid          0:off 1:off 2:on 3:on 4:on 5:on 6:off
 +Wurde der Systemdienst erst installiert, ist dieser ggf. erst einmal händisch zu starten. Wir überprüfen also erst einmal ob der Dienst gerade läuft.
 +   # service acpid status
 +
 +   acpid is stopped
 +Da der Dienst nicht läuft, werden wir diesen erst einmal per Hand starten.
 +   # service acpid start
 +
 +   Starting acpi daemon:                                      [  OK  ]
 +
 +==== libvirt-guests ====
 +Der entscheidende Eingriff zum Herunterfahren der vHOSTs erfolgt über das Startsript **libvirt-guests** bzw. über dessen Konfigurationsdatei **/etc/sysconfig/libvirt-guests**.
 +Standardmäßige versetzet der Wirt seine Gäste mit Hilfe dieses Scriptes in den suspend-Modus, so unter anderem beim Herunterfahren des Wirt-Systems.
 +
 +Möchte man nun an statt des Suspend-Modus einen Shutdown der vHOSTs initiieren lassen sind ein paar Änderungen an der Konfigurationsdatei für das Startup-/Shutdownscript notwendig.
 +
 +Hierzu benutzen wir, wie so oft den Editor unserer Wahl.
 +   # vim /etc/sysconfig/libvirt-guests
 +
 +<file bash /etc/sysconfig/libvirt-guests>
 +# URIs to check for running guests
 +# example: URIS='default xen:/// vbox+tcp://host/system lxc:///'
 +#URIS=default
 +# Django  : 2012-03-30
 +# default : unset
 +URIS=default
 +
 +# action taken on host boot
 +# - start   all guests which were running on shutdown are started on boot
 +#           regardless on their autostart settings
 +# - ignore  libvirt-guests init script won't start any guest on boot, however,
 +#           guests marked as autostart will still be automatically started by
 +#           libvirtd
 +#ON_BOOT=start
 +# Django  : 2012-03-30
 +# default : unset
 +ON_BOOT=start
 +
 +# number of seconds to wait between each guest start
 +#START_DELAY=0
 +
 +# action taken on host shutdown
 +# - suspend   all running guests are suspended using virsh managedsave
 +# - shutdown  all running guests are asked to shutdown. Please be careful with
 +#             this settings since there is no way to distinguish between a
 +#             guest which is stuck or ignores shutdown requests and a guest
 +#             which just needs a long time to shutdown. When setting
 +#             ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
 +#             value suitable for your guests.
 +#ON_SHUTDOWN=suspend
 +# Django  : 2012-03-30
 +# default : unset
 +ON_SHUTDOWN=shutdown
 +
 +# number of seconds we're willing to wait for a guest to shut down
 +#SHUTDOWN_TIMEOUT=0
 +# Django  : 2012-03-30
 +# default : unset
 +SHUTDOWN_TIMEOUT=75
 +
 +# If non-zero, try to bypass the file system cache when saving and
 +# restoring guests, even though this may give slower operation for
 +# some file systems.
 +#BYPASS_CACHE=0
 +</file>
 +
 +Die entscheidenden Änderungen betreffen dabei nun die folgenden beiden Konfigurationsparameter: 
 +  * **ON_SHUTDOWN=**shutdown 
 +  * **SHUTDOWN_TIMEOUT=**75
 +
 +Wir haben also festgelegt, dass die vHOSTs nicht mehr in den Suspend-Mode versetzt, sondern ausgeschaltet werden. Dabei wird maximal 75 Sekunden gewartet, bis jeder einzelnen Gast heruntergefahren wurde. Der Zeitwert ist ggf, den eigenen Bedürfnissen anzupassen und ist nur ein Richtwert.
 +
 +==== manueller Test ====
 +Im folgenden Beispiel fahren wir nun alle vHOSTs nacheinander runter, genauso wie dies bei einem Shutdown des Wirtsystemes erfolgen würde.
 +Zu erst ermitteln wir noch die Anzahl aller laufenden vHOSTs. Hierzu benutzen wir den Befehl **virsh** mit der Option //**list**//.
 +   # virsh list
 +<code> Id Name                 Status
 +----------------------------------
 + 13 vml000010            laufend
 + 14 vml000020            laufend
 + 17 vml000030            laufend
 +</code>
 +Den eigentlichen Shutdown der vHOSTs initiieren wir mit folgenden Aufruf:
 +   # service libvirt-guests shutdown
 +<code>Running guests on default URI: vml100010, vml100020, vml100030
 +Shutting down guests on default URI...
 +Shutting down vml100010: done
 +Shutting down vml100020: done         
 +Shutting down vml100030: done
 +</code>
 +
 +Eine Überprüfung, ob alle Gast-Systeme tatsächlich heruntergefahren wurden, kann mit nachfolgendem Befehl erfolgen:
 +   # virsh list
 +
 +    Id Name                 State
 +   ----------------------------------
 +
 +Wir können natürlich auch die vHOSTs gesammelt hochfahren, genauso wie dies beim starten des Wirtsystemes erfolgen würde.
 +   # service libvirt-guests start
 +<code>Resuming guests on default URI...
 +Resuming guest vml000010: done
 +Resuming guest vml000020: done
 +Resuming guest vml000030: done
 +</code>
 +
 +
 +
 +
 +====== Links ======
 +  * **[[centos:kvm:start|Zurück zum Kapitel >>Virtualisierung mit Hilfe von KVM, QEMU und libvirt unter CentOS 6<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +