# Qcow

qcow (kurz für QEMU Copy-On-Write) ist ein Dateiformat für Festplattenabbilder, das im Rahmen des QEMU-Emulators und in Kombination mit KVM (Kernel-based Virtual Machine) zur Virtualisierung genutzt wird.
Das Format wurde entwickelt, um Speicherplatz effizienter zu verwalten als RAW-Images, indem es eine Copy-On-Write-Strategie implementiert. Dies bedeutet, dass Speicherplatz erst belegt wird, wenn Daten tatsächlich geschrieben werden, was insbesondere in Cloud- und Servervirtualisierungsumgebungen Vorteile bietet.

## Geschichte und Entwicklung

Das qcow-Format wurde als Teil des QEMU-Projekts eingeführt und hat sich jedoch über die Jahre weiterentwickelt. Daraus entwickelten sich 3 verschiedene Versionen von qcow:
* qcow: Die erste Version des Formats bot grundlegende Copy-On-Write-Funktionalität, war jedoch in ihrer Speicherverwaltung noch begrenzt.
* qcow2: Eine verbesserte Version mit Unterstützung für AES-Verschlüsselung, mehreren Snapshots und einer effizienteren Speicherverwaltung.
* qcow3: Eine neuere Iteration, die weitere Leistungsoptimierungen bringt, jedoch vollständig abwärtskompatibel zu qcow2 ist.

## Merkmale
### Dynamische Speicherverwaltung

Ein wesentliches, welches das qcow-Format aufweist, ist seine Eigenschaft der dynamischen Speicherbelegung. Während normalerweise RAW-Images den gesamten Speicherplatz von Anfang an reservieren, wächst eine qcow-Datei nur entsprechend der tatsächlichen Datenbelegung. Das bedeutet, man ist in der Lage mehr Speicherplatz zu vergeben als eigentlich vorhanden ist, da ein qcow Image keine „starre“ Größe besitzt. Dies führt unweigerlich zu einer höheren Effizienz, insbesondere auf Dateisystemen ohne Unterstützung für Sparse-Dateien.

### Snapshots

Das qcow2- und qcow3-Format unterstützen die Erstellung von Snapshots, mit denen der Zustand eines virtuellen Systems zu einem bestimmten Zeitpunkt gespeichert und später wiederhergestellt werden kann. Dabei werden nur die Änderungen gespeichert, welche dem Snapshot entstanden sind, wodurch Speicherplatz gespart werden kann und schnelle Rücksetzungen möglich sind. Dieses Prinzip kann man sich gut an git vorstellen, welches auch nur die Änderungen speichert.
Snapshots sind besonders nützlich in folgenden Szenarien:
* Systemaktualisierungen und Softwaretests: Vor einem Update kann ein Snapshot erstellt werden, um das System im Fehlerfall schnell zurückzusetzen.
* Entwicklung und Testumgebungen: Entwickler können verschiedene Konfigurationen testen, ohne die Basisinstallation zu verändern.
* Sicherungen und Wiederherstellungen: Snapshots ermöglichen eine schnelle Wiederherstellung nach Systemabstürzen oder fehlerhaften Konfigurationen.

### Komprimierung und Verschlüsselung

Das qcow2-Format bietet zudem eine optionale zlib-basierte transparente Komprimierung, um den Speicherbedarf von Festplattenabbildern zu reduzieren. Weiter unterstützt qcow2 sowie qcow3 die AES-Verschlüsselung (256 Bit), wodurch virtuelle Festplatten gegen unbefugten Zugriff geschützt werden können.

## Vergleich mit anderen Formaten

| Format | Dynamische Speicherbelegung | Snapshots | Komprimierung | Verschlüsselung | Hauptnutzung |
| RAW | Nein | Nein | Nein | Nein | QEMU, KVM |
| qcow2 | Ja | Ja | Ja | Ja | QEMU, KVM, OpenStack |
| VMDK | Ja | Ja | Ja | Nein | VMware |
| VHDX | Ja | Ja | Nein | Ja | Microsoft Hyper-V |