<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Proxmox_Speicher</id>
	<title>Proxmox Speicher - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Proxmox_Speicher"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Proxmox_Speicher&amp;action=history"/>
	<updated>2026-04-17T07:53:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Proxmox_Speicher&amp;diff=67250&amp;oldid=prev</id>
		<title>Maximilian.pottgiesser: Die Seite wurde neu angelegt: „= Speicher – Ergänzungen und Vertiefungen =  == Blockspeicher vs. Dateispeicher ==  === Analogie ===  Stell dir den Hypervisor als '''Lagerverwalter''' vor.…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Proxmox_Speicher&amp;diff=67250&amp;oldid=prev"/>
		<updated>2026-03-04T07:12:19Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Speicher – Ergänzungen und Vertiefungen =  == Blockspeicher vs. Dateispeicher ==  === Analogie ===  Stell dir den Hypervisor als &amp;#039;&amp;#039;&amp;#039;Lagerverwalter&amp;#039;&amp;#039;&amp;#039; vor.…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Speicher – Ergänzungen und Vertiefungen =&lt;br /&gt;
&lt;br /&gt;
== Blockspeicher vs. Dateispeicher ==&lt;br /&gt;
&lt;br /&gt;
=== Analogie ===&lt;br /&gt;
&lt;br /&gt;
Stell dir den Hypervisor als '''Lagerverwalter''' vor.&lt;br /&gt;
&lt;br /&gt;
Beim '''Blockspeicher''' (z.B. LVM, iSCSI, Ceph RBD) bekommt der Lagerverwalter einen leeren Bereich, der in nummerierte, gleich große Fächer aufgeteilt ist. Er kann dort VM-Festplatten als große zusammenhängende Blöcke ablegen — aber er kann nicht reinschauen, was drin ist. Er sieht nur &amp;quot;Block 47 bis 520 gehört zu VM-Disk disk-0 von VM 101&amp;quot;. Was die VM intern damit macht (ext4 formatieren, Dateien anlegen), ist für den Hypervisor unsichtbar.&lt;br /&gt;
&lt;br /&gt;
Beim '''Dateispeicher''' (z.B. Directory, NFS, CephFS) hat der Lagerverwalter ein fertiges Regalsystem mit Ordnern. Er sieht die VM-Disks als einzelne Dateien liegen — zum Beispiel &amp;lt;code&amp;gt;vm-101-disk-0.qcow2&amp;lt;/code&amp;gt; im Ordner &amp;lt;code&amp;gt;images/101/&amp;lt;/code&amp;gt;. Er kann die Datei kopieren, verschieben, umbenennen oder sichern, ohne die VM dafür fragen zu müssen. Genau deshalb eignet sich Dateispeicher gut für Backups und ISO-Images.&lt;br /&gt;
&lt;br /&gt;
'''Kernunterschied aus Hypervisor-Sicht:''' Kann der Hypervisor die VM-Disks als Dateien sehen und anfassen, oder sind es nur Blockbereiche, die er als Ganzes verwaltet?&lt;br /&gt;
&lt;br /&gt;
=== Dateisystem auf Blockspeicher? ===&lt;br /&gt;
&lt;br /&gt;
Ein häufiges Missverständnis: Der Hypervisor legt bei echtem Blockspeicher '''kein''' Dateisystem drauf. Er nutzt stattdessen einen '''Volume Manager''' (LVM, Ceph RBD, ZFS Zvols), der die Zuordnung von Blöcken zu VMs übernimmt — das ist eine andere Abstraktionsschicht als ein Dateisystem.&lt;br /&gt;
&lt;br /&gt;
* '''LVM/LVM-Thin:''' Verwaltet logische Volumes direkt als Blockgeräte. Die VM bekommt &amp;lt;code&amp;gt;/dev/dm-X&amp;lt;/code&amp;gt; zugewiesen — ein rohes Blockgerät. Da liegt keine Datei &amp;lt;code&amp;gt;vm-101-disk-0.qcow2&amp;lt;/code&amp;gt; in einem Ordner. Die Zuordnung läuft über LVM-Metadaten, nicht über ein Dateisystem.&lt;br /&gt;
* '''iSCSI:''' Der Hypervisor bekommt ein Blockgerät übers Netzwerk und reicht es direkt an die VM durch. Kein Dateisystem auf Hypervisor-Ebene.&lt;br /&gt;
* '''ZFS:''' Sonderfall, da ZFS beides gleichzeitig ist:&lt;br /&gt;
** '''ZFS Dataset''' → Dateispeicher, qcow2-Dateien liegen darin&lt;br /&gt;
** '''ZFS Zvol''' → Rohes Blockgerät, kein Dateisystem dazwischen&lt;br /&gt;
&lt;br /&gt;
== Copy-on-Write (CoW) ==&lt;br /&gt;
&lt;br /&gt;
=== Grundprinzip ===&lt;br /&gt;
&lt;br /&gt;
Bei einem klassischen Dateisystem wie ext4 wird ein Block direkt überschrieben, wenn eine Datei geändert wird — der alte Inhalt ist danach weg. Bei ZFS passiert das nie:&lt;br /&gt;
&lt;br /&gt;
# ZFS schreibt die neuen Daten in einen '''freien Block'''&lt;br /&gt;
# Der Zeiger im Metadaten-Baum wird aktualisiert&lt;br /&gt;
# Erst danach wird der alte Block als frei markiert&lt;br /&gt;
&lt;br /&gt;
Der ursprüngliche Block wird also '''nie''' direkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Konsistenz ohne Journal ===&lt;br /&gt;
&lt;br /&gt;
Bei ext4 braucht man ein Journal, das Schreibvorgänge protokolliert, damit nach einem Stromausfall das Dateisystem repariert werden kann. ZFS braucht das nicht — weil der alte Zustand immer intakt bleibt, bis der neue vollständig geschrieben ist.&lt;br /&gt;
&lt;br /&gt;
* Entweder der neue Zeiger wurde aktualisiert → neue Daten gelten&lt;br /&gt;
* Oder nicht → alte Daten gelten (intakt)&lt;br /&gt;
&lt;br /&gt;
Es gibt keinen Zwischenzustand, in dem das Dateisystem inkonsistent sein könnte. Deshalb gibt es bei ZFS auch kein &amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Snapshots durch CoW ===&lt;br /&gt;
&lt;br /&gt;
Wenn ZFS einen Snapshot erstellt, muss es '''keine Daten kopieren'''. Es merkt sich einfach: &amp;quot;Die Blöcke, die jetzt existieren, bitte nicht freigeben.&amp;quot; Da CoW sowieso nie alte Blöcke überschreibt, bleiben die Snapshot-Blöcke erhalten, während neue Änderungen in neue Blöcke geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
* Ein Snapshot kostet initial '''null''' zusätzlichen Speicher&lt;br /&gt;
* Er wächst nur, wenn sich Daten ändern (alte Blöcke werden aufbewahrt statt freigegeben)&lt;br /&gt;
&lt;br /&gt;
=== Metadaten-Baum (Merkle Tree) ===&lt;br /&gt;
&lt;br /&gt;
ZFS organisiert alle Daten in einer Baumstruktur:&lt;br /&gt;
&lt;br /&gt;
* Jeder Block hat eine Prüfsumme, die im '''übergeordneten''' Block gespeichert wird (nicht im Block selbst)&lt;br /&gt;
* Wenn sich ein Block ändert, muss CoW auch den Eltern-Block neu schreiben (Prüfsumme ändert sich), und dessen Eltern, bis hoch zum '''Überblock''' (uberblock) an der Wurzel&lt;br /&gt;
* Dadurch kann ZFS Korruption auf jeder Ebene erkennen&lt;br /&gt;
&lt;br /&gt;
=== Auswirkungen in der Praxis ===&lt;br /&gt;
&lt;br /&gt;
* '''Fragmentierung:''' Weil Blöcke nie an der gleichen Stelle überschrieben werden, fragmentiert der Speicher über die Zeit. Bei HDDs spürbar, bei SSDs weniger relevant.&lt;br /&gt;
* '''Schreib-Amplifikation:''' Durch das Neu-Schreiben des ganzen Pfads im Baum entsteht bei kleinen Änderungen mehr I/O als bei einem klassischen Dateisystem. Das ist der Preis für Konsistenz und Integrität.&lt;br /&gt;
&lt;br /&gt;
=== Analogie für den Unterricht ===&lt;br /&gt;
&lt;br /&gt;
Stell dir ein '''Notizbuch''' vor. Ein klassisches Dateisystem radiert eine Zeile aus und schreibt neu drüber — wenn dabei der Strom ausfällt, ist die Zeile halb radiert und unleserlich.&lt;br /&gt;
&lt;br /&gt;
ZFS schreibt die neue Version auf eine '''frische Seite''' und ändert erst dann das Inhaltsverzeichnis. Fällt der Strom aus, steht im Inhaltsverzeichnis entweder noch die alte Seite (intakt) oder schon die neue (auch intakt).&lt;br /&gt;
&lt;br /&gt;
Und ein Snapshot? Das ist einfach die Anweisung: &amp;quot;'''Diese Seite nicht rausreißen''', auch wenn wir eine neue Version haben.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Disk-Formate: Raw vs. qcow2 ==&lt;br /&gt;
&lt;br /&gt;
=== Raw ===&lt;br /&gt;
&lt;br /&gt;
Ein 1:1-Abbild der virtuellen Festplatte. Wenn einer VM 50 GB zugewiesen werden, wird (bei Thick Provisioning) eine 50-GB-Datei oder ein 50-GB-Logical-Volume angelegt.&lt;br /&gt;
&lt;br /&gt;
* Keine Struktur drumherum, keine Metadaten, kein Header — einfach nur rohe Blöcke&lt;br /&gt;
* Kommt bei Blockspeicher (LVM, Zvols, iSCSI) zum Einsatz, da Blockspeicher kein Dateiformat braucht&lt;br /&gt;
* '''Maximale Performance''' durch direkten Zugriff ohne Indirektion&lt;br /&gt;
&lt;br /&gt;
=== qcow2 (QEMU Copy-on-Write, Version 2) ===&lt;br /&gt;
&lt;br /&gt;
Ein intelligentes Container-Format mit Header, Metadaten und Zuordnungstabelle.&lt;br /&gt;
&lt;br /&gt;
'''Vorteile gegenüber Raw:'''&lt;br /&gt;
&lt;br /&gt;
* '''Thin Provisioning auf Dateiebene:''' Eine 50-GB-Disk belegt anfangs nur wenige MB und wächst mit den tatsächlich geschriebenen Daten&lt;br /&gt;
* '''Snapshots innerhalb der Datei:''' qcow2 kann intern mehrere Zustände halten. Bei einem Snapshot wird (ähnlich wie bei ZFS CoW) in einen neuen Bereich geschrieben, der alte bleibt erhalten&lt;br /&gt;
* '''Backing Files:''' Eine Basis-Datei (z.B. ein sauberes Debian-Image) kann als Grundlage dienen, davon abgeleitete qcow2-Disks speichern nur die Unterschiede (Linked Clones)&lt;br /&gt;
&lt;br /&gt;
'''Nachteil:''' Kleiner Performance-Overhead durch die Zuordnungstabelle — jeder I/O muss erst aufgelöst werden.&lt;br /&gt;
&lt;br /&gt;
=== Zusammenhang mit der Speicherart ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Speicherart !! Format !! Thin Provisioning durch&lt;br /&gt;
|-&lt;br /&gt;
| LVM-Thin || Raw || LVM selbst&lt;br /&gt;
|-&lt;br /&gt;
| ZFS Zvol || Raw || ZFS selbst&lt;br /&gt;
|-&lt;br /&gt;
| iSCSI || Raw || Storage-Backend&lt;br /&gt;
|-&lt;br /&gt;
| Directory || qcow2 || qcow2-Format&lt;br /&gt;
|-&lt;br /&gt;
| NFS || qcow2 || qcow2-Format&lt;br /&gt;
|-&lt;br /&gt;
| ZFS Dataset || qcow2 || qcow2-Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Wahl des Disk-Formats hängt direkt mit der Speicherart zusammen: Bei Blockspeicher übernimmt der Volume Manager das Thin Provisioning, deshalb wird Raw genutzt. Bei Dateispeicher muss das Format selbst Thin Provisioning mitbringen, deshalb qcow2.&lt;/div&gt;</summary>
		<author><name>Maximilian.pottgiesser</name></author>
	</entry>
</feed>