Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
sysbetr:kvm [2019/12/07 13:58] – [Test: Dateigrößen] cbsysbetr:kvm [2020/05/15 14:04] (aktuell) cb
Zeile 1: Zeile 1:
-=====KVM===== +Dies Systembetreuungs-Seiten sind umgezogen zu **[[https://systembetreuung.bienmueller.de/dokuwiki/doku.php|Systembetreuung in der Praxis]]**!
-Warum man Computer virtualisiert ist [[virtualisierung|bekannt]]. +
-Nun zu ein paar Details aus der Praxis. Dabei ist "Host" der Rechner, auf dem viele virtuelle Maschinen ("Gäste") laufen. +
-====Problem: Festplattenplatz==== +
-Die Festplatte eines Gastes ist i.d.R. eine Datei. Es wäre große Verschwendung, den verfügbaren Platz eines Hosts komplett auf die Gäste aufzuteilen z.B. eine 1000GB-Partition auf dem Host mit zehn 100GB-Dateien voll zu packen, damit die Clients notfalls so viel benutzen können, obwohl ihnen typischerweise je 20 GB reichen sollten und man somit meist Platz für bis zu 50 Gäste hätte. +
-====Idee: Thin-Provisioning==== +
-Das RAW-Format benötigt((hier kann natürlich die Festplattenverwaltung des Hosts selbst wieder optimieren...)) für eine 100GB-Datei auch 100GByte auf der Host-Festplatte. Es empfiehlt sich aber das QCOW2-Format zu verwenden, da dort erst einmal nur der belegte Platz des Gastes benötigt wird - z.B. 20 GByte. Der Gast "sieht" aber die konfigurierten 100 GByte und kann diese auch verwenden. Dabei wächst die Datei auf dem Host mit - bis zu den 100GByte. Da dieser Extremfall i.d.R. nicht auftritt, kann man mit etwas Reserve den Gästen in Summe sehr viel mehr Plattenplatz versprechen, als insgesamt vorhanden ist.  +
-  Problem 1: Wenn zu viele Gäste gleichzeitig ihren Platz in Anspruch nehmen, so ist die Hostplatte voll! Ein Admin-Eingriff ist notwendig. Dieses Problem lösen Statistiker und Leute, welche sich mit Serverüberwachung beschäftigen.  +
-  Problem 2Wenn Gäste abwechseln überdurchschnittlich viel Platz belegen und dann die überzähligen Dateien (z.BWindowsupgrade) wieder löschen, so bleibt die jeweilige Festplattendatei erst einmal zu großMan muss also den **nicht mehr genutzten Platz** wieder frei gegeben werden, damit er einem anderen Gast zur Verfügung steht. Wir müssen dazu die Information über die Freigabe des Platzes im Gast (Dateien werden gelöscht) weitergeben:+
  
-====Realisierung 1: Festplatte füllen, dann leeren==== +Diese Seite finden Sie dort als **[[https://systembetreuung.bienmueller.de/dokuwiki/doku.php/kvm]]**
-Eine oft beschriebene Vorgehensweise funktioniert so: +
-  virtuelle Festplatte mit einer zusätzlichen riesigen Datei nur mit Nullen füllen (Festplattendatei wächst bis zur Maximalgröße), Datei wieder löschen. Dadurch existieren keine gelöschten Dateien mehr, jeder unbenutzte Platz ist auch wirklich mit Nullen gefüllt. +
-    Linux: mit Bordmitteln mit <code>dd if=/dev/zero of=delme.soon bs=1M; rm delme.soon</code> +
-    * Windows: mit [[https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete|SDelete]] +
-  Gast herunterfahren und die Festplattendatei konvertieren, wonach Blöcke von Nullen keinen Platz mehr benötigen +
-    siehe [[#tippverkleinern_der_qcow2-datei|unten]] +
-  * Gast wieder starten +
-Nachteil: In unserem Beispiel werden sinnlos 80GB Nullen geschrieben, dann die 100GB-Datei eingelesen und als neue 20GB-Datei geschrieben.\\ +
-Nachteil: Der komplette "versprochene" Platz wird zumindest kurzfristig benötigt!\\ +
-Nachteil: Für einige Minuten ist der Gast (ggf. ein wichtiger Server) nicht benutzbar. Dienste sollten heruntergefahren sein um Abstürze zu vermeiden.\\ +
-Vorteil: keine Unterstützung des Gast-Betriebssystems nötig (man könnte die Nullen auch remote auf die virtuelle Platte schreiben oder die virtuelle Maschine vorübergehend mit einem anderen Betriebssystem booten...) +
-====Realisierung 2: discard/TRIM==== +
-Hintergrund: Betriebssysteme haben für SSDs lernen müssen, dass man den nicht benutzten Platz an den Datenträger meldet, so dass die Speicherstellen freigegeben werden und für das gleichmäßigere Verteilen von Schreibzugriffen genutzt werden können. Der Vorgang wird meist TRIM, Trimmen oder discard genannt.+
  
-Diese Fähigkeit des Gast-Betriebssystem nutzt man nun wie folgt: +Dort finden Sie Informationen zur [[https://systembetreuung.bienmueller.de/dokuwiki/doku.php/kvm| Virtualisierung mit KVM mit Tricks zum Thin Provisioning und den CPU-Cores unter Windows]].
-    ⇒ Gast löscht eine Datei  +
-    ⇒⇒ per Trim wird der freiwerdende Speicher (z.B. einmal täglich) an die virtuelle Festplatte gemeldet  +
-    ⇒⇒⇒ KVM gibt den entsprechenden Speicher in der Festplattendatei auf dem Host frei +
-    ⇒⇒⇒⇒ Die Festplattendatei hat eine Lücke mehr, und belegt somit auf der Host-Festplatte weniger Platz. +
-Damit dies funktioniert muss der **Gast** trimmen können und **KVM** die Freigabe auch verarbeiten: +
-=== Gast anpassen === +
-Die virtuelle Festplatte für den Gast muss eine SCSI-Festplatte sein (ggf. nachträglich geändert - Backup gemacht?). \\ +
-Dafür benötigt man unter Windows die [[https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/| stable Windows-Virtio-Treiber-CD von Fedora]] - Nov. 2019 die  virtio-win-0.1.171.iso. +
-  * Einfach: Bei der Installation gleich eine SCSI-Festplatte konfigurieren((erfolgreich getestet mit Win10 1909 auf Debian Buster KVM mit virtio-TreiberCD 1.171)) oder bei einem Linux-Gast nachträglich ändern. +
-    * Vor der Windowsinstallation die Einstellungen der virtuellen Maschine anpassen: Festplatte als SCSI, dazu den SCSI-Controller virtio-scsi hinzufügen +
-    * Zweites CD-Laufwerk anlegen und mit der Treiber-CD-Datei virtio-win-0.1.171.iso. +
-    * Bei der Installation wird keine Festplatte gefundenJetzt auf //Treiber laden// klicken und von der zweiten CD laden lassen. +
-    * Installation normal durchlaufen lassen. +
-  * Aufwändiger/fehleranfälliger: Nachträgliches Ändern unter Windows((ist mir so auf Ubuntu-Xenial KVM mit mehreren Win10 1909 gelungen)): +
-    * CD-Laufwerk mit der Treiber-CD-Datei verbinden (wie oben). +
-    * neue winzige virtuelle SCSI-Platte hinzufügen, den SCSI-Controller auf virtio-SCSI (nicht hypervisor) stellen, booten +
-    * Treiber im Gerätemanager installieren ("aktualisieren"), durchbooten, dann komplett herunterfahren (mit Shift) +
-    * eigentliche Platte auf SCSI umstellen, Bootreihenfolge prüfen, booten und beten - wenn es funktioniert: miniDisk entfernen +
-===KVM ergänzen=== +
-In der KVM-Konfigurationsdatei muss ein weiterer Eintrag gemacht werden (während der Gast heruntergefahren ist): +
-  * mit //vish edit Gastname// die Konfigurationsdatei öffnen, ggf. mit Taste i in den Einfügemodus wechseln +
-  * folgende Zeile suchen +
-        <code><driver name='qemu' type='qcow2'/></code> +
-  * und mit //discard='unmap'// ergänzen +
-        <code><driver name='qemu' type='qcow2' discard='unmap'/></code> +
-  * Info: ca. zwei Zeilen darunter steht, dass es ein SCSI-Device ist. +
-  * mit ESC w q speichern und verlassen.  +
-===Gast vollenden=== +
-Nun den Gast wieder starten und  +
-  * Testen ob Trim aufrufbar ist +
-    * Linux: fstrim -av +
-  * Testen ob Trim bei der Datei auf dem Host etwas verändert (ls -hls, siehe unten) +
-  * Bei Erfolg:  +
-      * In Linux dafür sorgen, dass Trim automatisch regelmäßig durchgeführt wird (via crontab oder systemd).  +
-      * Windows optimiert automatisch wöchentlich (anscheinend auch nach einer größeren Lösch-Aktion) +
-  * Fehlersuche: Wenn die Platte partout nicht zu trimmen ist, so kann die KVM-Konfigurationsdatei recht alt sein: +
-      * Plan A: Ändere einzelne Einstellungen (Maschinentyp) und hoffe. +
-      * Plan B: Kopiere die Festplatte, lege eine neue Gastmaschine an und verbinde sie mit der kopierten Datei und lass die neue Maschine laufen.+
  
- 
- 
- 
-====Test: Dateigrößen==== 
-Merke: Das qcow2-Format von KVM erzeugt "sparse"-Dateien. Diese können & werden Lücken haben. Unbenutzter Platz kann logisch als mit Nullen gefüllt angesehen werden. Dies wird dem Host-Betriebssystem (genauer: EXT4-Treiber) mitgeteilt, der das entsprechend vermerkt und dafür keinen Festplattenplatz benötigt. Man kann übrigens auch beliebige Dateien, die Blöcke mit Nullen enthalten, verkleinern, in dem man //fallocate -d dateiname// aufruft. 
-Wie unterscheidet man nun den angeblichen und den realen Platzbedarf? 
- 
-  ls -hls 
-   
-Der Befehl liefert sowohl die offizielle Größe, als auch den tatsächlich belegten Platz. Auch //du *.qcow2// meldet die tatsächliche Belegung. 
-Die offizielle Größe ist wichtig, falls man ein Backup ohne weitere Vorkehrungen über's Netz schiebt: Diese Größe wird übertragen, auch wenn sehr viele Nullen dabei sind. Gezippt sollte das kaum ein Problem sein, kostet aber Zeit. Rsync kann sich wohl auch dieses Problems lösen... 
- 
-====Tipp: Verkleinern der QCOW2-Datei==== 
-Enthält eine QCOW2-Datei Leerstellen (echte Nullen oder Lücken via sparse-file), so kann man die Datei verkleinern lassen. Die erledigt **bei heruntergefahrenem Gast** folgende Befehlsfolge (Backup vorhanden?): 
-    mv gast.qcow2 gast.org 
-    qemu-img convert -O qcow2 gast.org gast.qcow2 
-Dies kann man natürlich auch zum Zweck eines Backups machen: 
-    qemu-img convert -O qcow2 gast.qcow2 /backup/ziel/pfad/gast.qcow2 
-Wer wirklich auf den **Platzbedarf** achtet, kann den zusätzlichen Parameter -c zum Komprimieren mitgeben. Belegte Sektoren werden jetzt komprimiert, beim späteren Überschreiben aber wieder unkomprimiert abgelegt. Dies führt z.B. zu folgenden Einsparungen: 
-  * bei einem frischen Debian Buster XFCE  von 4,2GB auf 1,5GB Platzbedarf. 
-  * bei einem frischen Win10 1909 von 15 GByte auf 7 GByte 
- 
-Bei zukünftigen Schreibzugriffen muss man jedoch mit Tempoeinbußen rechnen. 
-Geht es jedoch mehr um **Performance**, so kann man beim Konvertieren den parameter "-o preallocation=metadata" mit angeben. Das kostet wenig echten Plattenplatz, legt aber bereits alle Metadaten der qcow2-Datei an. Zukünftige Schreibzugriffe sollten entsprechend schnell sein. Ein Vergleich findet sich [[https://www.jamescoyle.net/how-to/2060-qcow2-physical-size-with-different-preallocation-settings|hier]].  
- 
-Deutlich ausführlicher [[https://kofler.info/wie-ich-ein-qcow2-image-auf-ein-drittel-geschrumpft-habe/|hier]] nachzulesen mit vielen weiteren englischen Quellen. 
- 
-Hier eine ausführlichere englische [[http://dustymabe.com/2013/06/11/recover-space-from-vm-disk-images-by-using-discardfstrim/|Quelle]] zum Trimmen in KVM.