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 [15.05.2012 13:00. ]
django [libvirt-guests]
centos:kvm:admin [20.04.2018 10:48. ] (aktuell)
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 großen 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}}
 +
 +===== 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 Ausschaltenm ist in der Regel keinenfalls zu empfehlen, aknn doch so das System erheblichen Schaden nehmen. ​
 +Bei unserer Virtualisierungsumgebung haben können wir acu 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
 +==== 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>​
 +===== 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]]**
 +
  
  • centos/kvm/admin.txt
  • Zuletzt geändert: 20.04.2018 10:48.
  • (Externe Bearbeitung)