Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:libvirt [2011/02/11 19:22] – [KVM-Gäste geordnet herunterfahren] st | software:libvirt [2022/11/20 22:36] (aktuell) – [Verwaltung mit virt-manager] st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== libvirt mit KVM ====== | ||
+ | |||
+ | '' | ||
+ | |||
+ | libvirt wird von grafischen Benutzeroberflächen wie dem " | ||
+ | |||
+ | |||
+ | :!: Bevor man einen **Hostrechner neu startet oder herunterfährt** sollte man **alle Gäste VORHER herunterfahren**. libvirt bzw. [[kvm:KVM]] sichert nicht einfach den Status, sondern killt den Gast beim shutdown wie einen normalen Prozess. Es könnte also ggf. zu Datenverlust kommen, wenn die Gäste ihr Dateisystemjournal wieder rückabwickeln. | ||
+ | |||
+ | Alternativ lässt sich das Shellscript '' | ||
+ | |||
+ | ===== Links ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[linux: | ||
+ | |||
+ | ===== Verwaltung mit libvirt, VNC und SSH ===== | ||
+ | |||
+ | |||
+ | :!: zuerst auf den Host per SSH einloggen) | ||
+ | |||
+ | * **Liste laufender Gäste** anzeigen lassen:< | ||
+ | * Konsole | ||
+ | * virsh console $ID, | ||
+ | * **VNC-Konsole eines bestimmten Gastes** herausbekommen (Beispiel mit Gast " | ||
+ | * **virsh Verwaltungmenu** starten: < | ||
+ | * **Hilfe in virsh** aufrufen: '' | ||
+ | * **Gast starten** (Beispiel mit Gast " | ||
+ | * **Gast herunterfahren** (simuliert Tastendruck auf den Ausschalter; | ||
+ | * neu eingerichteten **Gast** von nun an bei jedem booten des Hochrechners** mit hochfahren** (autostart): | ||
+ | * **Änderungen an der Konfiguration** bekannt machen: < | ||
+ | * Fähigkeiten (capabilities) des Hosts anzeigen: < | ||
+ | |||
+ | |||
+ | ===== Verwaltung mit virt-manager ===== | ||
+ | |||
+ | Statt mit den Kommandozeilentools zu arbeiten und manuell Konsolen per VNC und SSH zu binden, kann auch der virt-manager (grafische Benutzeroberfläche) benutzt werden. | ||
+ | Er bietet einfach Zugriff auf alle Einstellungen eines Hostrechners, | ||
+ | |||
+ | ===== Verwaltung mit cockpit ===== | ||
+ | |||
+ | * Install: https:// | ||
+ | * manual: https:// | ||
+ | ===== Nützliche Befehle ===== | ||
+ | |||
+ | ==== MAC-Adressen der VMs auflisten ==== | ||
+ | |||
+ | <code bash>for i in `virsh list --all --name`; do echo $i; virsh domiflist $i; done</ | ||
+ | |||
+ | ==== KVM-Gäste geordnet herunterfahren ==== | ||
+ | |||
+ | :!: Wichtig: Beim reboot oder shutdown eines Server werden die virtuellen Maschinen einfach abgeschaltet ohne einen geordneten shutdown zu machen. Das ist keine gute Vorgehensweise weil es auf diese Weise zu Datenverlusten kommen könnte. | ||
+ | |||
+ | :!: Damit die Gäste das ACPI-Event richtig auswerten können, muss ACPI-Unterstüzung auf den Gästen installiert sein, andernfalls funktioniert die Methode mit '' | ||
+ | * bei [[debian: | ||
+ | * bei [[windows: | ||
+ | |||
+ | |||
+ | === Erweiterung des init-Scripts bei alten Systemen === | ||
+ | |||
+ | :!: Die folgende Abschnitt ist nur für alte Versionen notwendig, aktuelle Versionen haben das eingebaut und fahren die Gäste mit einem timeout (300s) herunter. | ||
+ | |||
+ | Auch das init-script für libvirt-bin (bei [[debian: | ||
+ | |||
+ | Konkret an diesen Stellen: | ||
+ | |||
+ | < | ||
+ | [...] | ||
+ | stop) | ||
+ | log_daemon_msg " | ||
+ | # shutdown all guests gracefully (at least try) | ||
+ | / | ||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | und | ||
+ | |||
+ | < | ||
+ | [...] | ||
+ | force-stop) | ||
+ | log_daemon_msg " | ||
+ | # shutdown all guests gracefully (at least try) | ||
+ | / | ||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | |||
+ | kvm-shutdown-all-guests.sh ([[http:// | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | #!/bin/bash | ||
+ | # File: / | ||
+ | # Description: | ||
+ | # Author: Ed Heron < | ||
+ | # Note: 2010.09.30 some cosmetic changes (alls vars in header, countdown with numbers not dots) | ||
+ | # Date: 2009.11.13 Copy placed on centos-virt@centos.org | ||
+ | # Note: 2009.11.23 Bugfixes and hoovering by torkil | ||
+ | # | ||
+ | |||
+ | # ===== VARS ===== | ||
+ | |||
+ | DEBUG=1 # Comment this out if you really want to use this script in production | ||
+ | FAKE=1 | ||
+ | |||
+ | function reset_timers | ||
+ | { | ||
+ | shutdown_count=120 | ||
+ | destroy_count=10 | ||
+ | } | ||
+ | |||
+ | |||
+ | # ===== CODE ===== | ||
+ | |||
+ | # Get list of active virtual machines | ||
+ | vmList=" | ||
+ | while read vmID vmName vmStatus | ||
+ | do | ||
+ | if [ -n " | ||
+ | then | ||
+ | [ -z " | ||
+ | fi | ||
+ | done | ||
+ | echo $vmList )`" | ||
+ | |||
+ | # check there are some active VM's | ||
+ | if [ -n " | ||
+ | then | ||
+ | # Shutdown VM's with verification | ||
+ | for vmName in $vmList | ||
+ | do | ||
+ | |||
+ | reset_timers | ||
+ | |||
+ | # Send initial request | ||
+ | [ -n " | ||
+ | [ -z " | ||
+ | |||
+ | # wait a limited time for the VM to be not running | ||
+ | # count=300 | ||
+ | while ( virsh list | grep $vmName >/ | ||
+ | do | ||
+ | sleep 1 | ||
+ | let shutdown_count=$shutdown_count-1 | ||
+ | [ -n " | ||
+ | # [ -n " | ||
+ | done | ||
+ | |||
+ | # report current status | ||
+ | ( virsh list | grep $vmName >/ | ||
+ | |||
+ | # if still running, destroy it | ||
+ | if ( virsh list | grep $vmName >/ | ||
+ | then | ||
+ | [ -n " | ||
+ | [ -z " | ||
+ | |||
+ | # wait a limited time for the VM to be not running | ||
+ | #count=60 | ||
+ | while ( virsh list | grep $vmName >/ | ||
+ | do | ||
+ | sleep 1 | ||
+ | let destroy_count=$destroy_count-1 | ||
+ | [ -n " | ||
+ | # [ -n " | ||
+ | done | ||
+ | |||
+ | # report current status | ||
+ | ( virsh list | grep $vmName >/ | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | Alternativ könnte man [[http:// | ||
+ | |||
+ | |||
+ | ==== KVM-Gäste mit den guest-tools abfragen ==== | ||
+ | |||
+ | '' | ||
+ | |||
+ | # im Gast: | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | < | ||
+ | <channel type=" | ||
+ | <source mode=" | ||
+ | <target type=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | **arch-Version " | ||
+ | gibt es eine Fehlermeldung: | ||
+ | < | ||
+ | error: Failed to start domain $VM | ||
+ | error: internal error: process exited while connecting to monitor: 2019-11-18T22: | ||
+ | </ | ||
+ | |||
+ | **Lösung**: | ||
+ | |||
+ | Quellen: | ||
+ | * https:// | ||
+ | * http:// | ||
+ | * https:// | ||
+ | |||