26 Kapitel in vier Teilen, in der Reihenfolge, in der man sie braucht: erst sichern, dann Dateien holen, dann ganze Maschinen wiederherstellen, dahinter der Nachschlagteil. Gebaut wird mit MkDocs + Material. Bewusst ohne Netzabhaengigkeiten: keine Schriften vom CDN (font: false), Volltextsuche mit deutschem Stemming liegt neben den Seiten. Im Notfall steht vielleicht das halbe Netz - dann nuetzt eine Doku im Internet nichts. handbuch/bauen.sh baut handbuch/site/ handbuch/bauen.sh ansehen Vorschau auf 127.0.0.1:8000 install.sh nimmt das gebaute Handbuch mit nach /usr/share/doc/pvesnap/handbuch/ - falls es vorliegt. Auf dem Host selbst wird nichts gebaut, mkdocs gehoert nicht auf einen Hypervisor. Die 28 Bildschirmfotos sind nicht abfotografiert, sondern erzeugt: Der echte Programmcode laeuft in einem Pseudo-Terminal gegen einen erfundenen Proxmox-Host (Attrappen fuer pvesh, perl und rbd), pyte baut den Bildschirm nach, heraus faellt ein SVG. Damit stimmen sie garantiert mit dem Programm ueberein, sind reproduzierbar und enthalten keine echten Daten. Die Werkstatt dafuer liegt unter handbuch/werkstatt/ samt LIESMICH.md. Nebenbei: die Schlussmeldung von install.sh warb noch mit --exchange, das mit dem eingebauten Austauschlaufwerk weggefallen ist. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
193 lines
6.0 KiB
Markdown
193 lines
6.0 KiB
Markdown
# Speicherarten
|
|
|
|
Nicht jedes Proxmox-Storage kann alles. Diese Seite fasst zusammen, was wo geht.
|
|
|
|
---
|
|
|
|
## Die Übersicht
|
|
|
|
| Storage | Snapshots | Dateien lesen | Als Maschine starten | Vom Snapshot lösen |
|
|
|---|---|---|---|---|
|
|
| **`rbd`** (Ceph) | ✅ | ✅ | ✅ | ✅ nötig |
|
|
| **`zfspool`** | ✅ | ✅ | ✅ | ❌ nicht möglich |
|
|
| **`lvmthin`** | ✅ | ✅ | ✅ | — nicht nötig |
|
|
| **`lvm`** (dick) | ❌ | — | — | — |
|
|
| **`dir`, `nfs`, `cifs`** (qcow2) | ✅ | ✅ | ❌ | — |
|
|
| **`dir`, `nfs`, `cifs`** (raw) | ❌ | — | — | — |
|
|
|
|
---
|
|
|
|
## Ceph / RBD
|
|
|
|
**Die beste Grundlage für pvesnap.** Alles geht, und es geht clusterweit.
|
|
|
|
| | |
|
|
|---|---|
|
|
| Snapshot | `rbd snap create`, sofort |
|
|
| Hineinsehen | `rbd map pool/image@snap`, bei nicht unterstützten Image-Features über `rbd-nbd` |
|
|
| Klonen | `rbd clone`, in etwa einer Sekunde — unabhängig von der Größe |
|
|
| Wiederherstellung startbar auf | **jedem Node des Clusters** (geteiltes Storage) |
|
|
|
|
### Die eine Eigenheit
|
|
|
|
RBD verlangt für einen Klon, dass der Quell-Snapshot **geschützt** ist
|
|
(`rbd snap protect`). Solange ein Klon existiert, ist der Snapshot damit
|
|
unlöschbar, und die [Vorhaltezeit](../sichern/vorhaltezeit.md) scheitert an ihm
|
|
mit `snapshot is protected`.
|
|
|
|
pvesnap geht damit sauber um: Beim [Verwerfen](../wiederherstellen/verwerfen.md)
|
|
wird der Schutz wieder aufgehoben, und
|
|
[`flatten`](../wiederherstellen/loesen.md) löst die Abhängigkeit ganz.
|
|
|
|
### Platz im Blick
|
|
|
|
```bash
|
|
ceph df # MAX AVAIL beachten
|
|
rbd -p <pool> du
|
|
rbd -p <pool> ls -l # Spalte PARENT zeigt Klone
|
|
```
|
|
|
|
!!! danger "`% RAW USED` täuscht"
|
|
|
|
Es berücksichtigt die Replikation nicht. Bei dreifacher Replikation kosten
|
|
13 GB Nutzdaten 39 GB im Pool. **`MAX AVAIL`** ist die Zahl, die zählt.
|
|
|
|
Läuft ein Pool voll, blockiert er jeden Schreibvorgang — und damit alle VMs
|
|
darauf. Selbst das Aufräumen wird dann schwierig, weil Löschen ebenfalls
|
|
ein Schreibvorgang ist.
|
|
|
|
---
|
|
|
|
## ZFS
|
|
|
|
| | |
|
|
|---|---|
|
|
| Snapshot | `zfs snapshot`, sofort |
|
|
| Hineinsehen | Container direkt über `.zfs/snapshot/…`, VMs über einen temporären Klon |
|
|
| Klonen | `zfs clone`, sofort |
|
|
| Wiederherstellung startbar auf | dem Node mit dem Pool (bzw. clusterweit bei ZFS over iSCSI) |
|
|
|
|
### Lösen geht nicht
|
|
|
|
Der Klon hängt wie bei Ceph am Snapshot. `zfs promote` würde die Abhängigkeit
|
|
nur **umdrehen** — danach hinge das Original am Klon. Das verschiebt das
|
|
Problem, statt es zu lösen.
|
|
|
|
Echte Unabhängigkeit ginge nur über `zfs send | zfs recv` in einen neuen
|
|
Datenträger. Das macht `flatten` nicht und sagt es auch so.
|
|
|
|
```bash
|
|
zfs list -o space # USEDSNAP zeigt, was die Snapshots kosten
|
|
zfs list -t snapshot
|
|
```
|
|
|
|
---
|
|
|
|
## LVM-thin
|
|
|
|
**In einem Punkt angenehmer als Ceph:** Ein Thin-Snapshot ist ein
|
|
eigenständiges Volume, das sich mit anderen nur die Blöcke im Pool teilt.
|
|
|
|
```
|
|
Belegung im Thin-Pool nach dem Klonen (256 MB Nutzdaten):
|
|
data <19.84g 1.26 % ← Pool hält die Daten nur EINMAL
|
|
snap_..._wdhtest 1.00g
|
|
vm-9998-disk-0 1.00g 25.00 % Klon
|
|
vm-9999-disk-0 1.00g 25.00 % Original
|
|
|
|
Quell-Snapshot löschen, während der Klon existiert → erlaubt
|
|
Original löschen → erlaubt
|
|
Prüfsumme des Klons danach → unverändert
|
|
```
|
|
|
|
Platzsparend geteilt **und** trotzdem frei löschbar. Es gibt dort weder
|
|
geschützte Snapshots noch etwas zu flatten.
|
|
|
|
### Der Preis: lokaler Speicher
|
|
|
|
`lvmthin` liegt auf einem einzelnen Node. Die Wiederherstellung muss auf
|
|
demselben Node laufen wie das Original; `pvesnap-recovery` prüft das und lehnt
|
|
einen anderen Node ab.
|
|
|
|
!!! warning "Auch Thin-Pools laufen voll"
|
|
|
|
Und dann stehen alle Volumes darin. Überprovisionierung im Blick behalten:
|
|
|
|
```bash
|
|
lvs -o lv_name,data_percent,metadata_percent
|
|
```
|
|
|
|
Besonders die **Metadaten** — läuft der Metadatenbereich voll, ist der Pool
|
|
nicht mehr zu retten, auch wenn noch Datenplatz frei ist.
|
|
|
|
---
|
|
|
|
## LVM (dick)
|
|
|
|
Proxmox kann dort **gar keine Snapshots**. Betroffene VMs melden im Protokoll:
|
|
|
|
```
|
|
storage does not support snapshots
|
|
```
|
|
|
|
Sie werden übersprungen, die übrigen laufen normal weiter.
|
|
|
|
Der Ausweg ist ein Umzug auf `lvmthin` — technisch derselbe Speicher, nur mit
|
|
Thin-Provisioning:
|
|
|
|
```bash
|
|
qm move-disk 101 scsi0 <thin-storage>
|
|
```
|
|
|
|
---
|
|
|
|
## Verzeichnis-Storages (`dir`, `nfs`, `cifs`)
|
|
|
|
Hier kommt es auf das **Dateiformat** an:
|
|
|
|
| Format | Snapshots | |
|
|
|---|---|---|
|
|
| `qcow2` | ✅ | interne Snapshots im Abbild selbst |
|
|
| `raw` | ❌ | keine Snapshot-Fähigkeit |
|
|
| `vmdk` | ❌ | |
|
|
|
|
### Hineinsehen: ja
|
|
|
|
`qemu-nbd --load-snapshot` bindet den Snapshot schreibgeschützt ein. Explorer
|
|
und Web-Oberfläche funktionieren also.
|
|
|
|
### Als Maschine starten: nein
|
|
|
|
!!! warning "Kein Klon aus einem qcow2-internen Snapshot"
|
|
|
|
Ein qcow2-interner Snapshot lässt sich nicht als eigenständiges Volume
|
|
klonen. `pvesnap-recovery` lehnt das ab und verweist auf den Explorer.
|
|
|
|
Wer die Fähigkeit braucht, verschiebt die VM auf ein Storage, das Klone
|
|
kann — Ceph, ZFS oder LVM-thin.
|
|
|
|
---
|
|
|
|
## Was passiert bei gemischten Datenträgern?
|
|
|
|
Hat eine VM Platten auf verschiedenen Storages, gilt für die
|
|
**Wiederherstellung** die strengste Regel:
|
|
|
|
* Liegt eine Platte auf einem Storage, das keine Klone kann, geht es gar nicht
|
|
* Liegt eine Platte auf lokalem Storage, ist der Node festgelegt
|
|
* Ist ein Storage auf dem Zielnode nicht verfügbar, wird abgelehnt
|
|
|
|
Die [Zusammenfassung](../wiederherstellen/einrichten.md#die-zusammenfassung)
|
|
nennt den Grund, bevor etwas angelegt wird.
|
|
|
|
---
|
|
|
|
## Empfehlung
|
|
|
|
| Lage | |
|
|
|---|---|
|
|
| **Cluster mit Ceph** | Ideal. Alles geht, von jedem Node aus. Nur an `flatten` denken, wenn eine Wiederherstellung bleibt. |
|
|
| **Einzelner Host** | `lvmthin` oder ZFS. LVM-thin ist beim Lösen unkomplizierter, ZFS bietet dafür Prüfsummen und `zfs send`. |
|
|
| **NFS-Storage** | qcow2 statt raw verwenden, dann geht wenigstens das Lesen. Für Wiederherstellungen ist es die falsche Grundlage. |
|
|
| **LVM dick** | Auf `lvmthin` umstellen. Ohne Snapshot-Fähigkeit hat pvesnap dort nichts zu tun. |
|