recovery: flatten, cleanup und eine Platzpruefung, die weh getan hat
flatten Linked Clones haengen fuer immer am Quell-Snapshot: der wird unloeschbar, und die Original-Platte muss bestehen bleiben. Fuer "mal reinschauen" egal, fuer eine dauerhaft uebernommene Maschine nicht. `pvesnap-recovery flatten` loest sie ueber `rbd flatten`, hebt danach den Schutz auf und meldet die Maschine als eigenstaendig. In der Oberflaeche Taste f; die Detailansicht zeigt an, ob eine Instanz noch verlinkt ist. Vorher wird gemessen, wieviel kopiert werden muss - `rbd du` zeigt je Snapshot nur den Zuwachs, kopiert wird aber der gesamte sichtbare Inhalt. Im Test: Snapshot-Zeile 56 MiB, tatsaechlicher Bedarf ueber 8 GB. Und es wird geprueft, ob der Platz reicht. Der Grund ist Erfahrung: laeuft ein Ceph-Pool beim Kopieren voll, blockiert er alle Schreibvorgaenge. Dann steht jede VM auf dem Storage - und Aufraeumen geht auch nicht mehr, weil Loeschen ebenfalls ein Schreibvorgang ist. cleanup Wird eine Wiederherstellung in der Proxmox-Oberflaeche geloescht statt mit destroy, bleiben Klon und Snapshot-Schutz liegen. `cleanup` findet das. Als Wahrheit ueber vergebene VMIDs dienen die Konfigurationsdateien unter /etc/pve/nodes/* - nicht /cluster/resources: dort fehlt ein Gast auf einem abgemeldeten Node moeglicherweise, und dann wuerden wir die Platten einer lebenden Maschine loeschen. Ohne Elternteil wird nichts angefasst, und der Schutz faellt nur, wenn kein Klon mehr daran haengt. Nebenbei: Abfragen antworten bei fehlender Eingabe mit "nein", statt einen Stacktrace zu werfen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
dc5c7d417f
commit
3a47bb0621
@@ -584,6 +584,86 @@ also nichts nachgebaut, was Proxmox schon kann.
|
||||
> einem qcow2-internen Snapshot kein Klon ziehen. Für diese Storages bleibt der
|
||||
> Weg über `pvesnap-explorer`.
|
||||
|
||||
**Beide Betriebsarten klonen gleich.** `live` und `recovery` unterscheiden sich
|
||||
ausschließlich im Netzwerk und in den Sicherheitsabfragen — an den Datenträgern
|
||||
ändert der Modus nichts. Es gibt keinen Vollkopie-Pfad.
|
||||
|
||||
Nachsehen lässt sich das jederzeit auf dem Host:
|
||||
|
||||
```bash
|
||||
rbd -p <pool> ls -l | grep -E 'NAME|vm-<neue-id>' # Spalte PARENT
|
||||
rbd -p <pool> du | grep -E 'NAME|vm-<neue-id>' # PROVISIONED gegen USED
|
||||
```
|
||||
|
||||
Eine frisch geklonte 32-GB-Platte steht dort mit `PROVISIONED 32 GiB` und
|
||||
`USED 80 MiB` — die 80 MiB sind alles, was der laufende Gast seither geschrieben
|
||||
hat.
|
||||
|
||||
### Eigenständig machen — `flatten`
|
||||
|
||||
Ein Linked Clone hängt für immer am Quell-Snapshot. Für „mal reinschauen" ist
|
||||
das ideal, für eine **dauerhaft übernommene** Maschine nicht:
|
||||
|
||||
* der Quell-Snapshot lässt sich nicht mehr löschen (die Vorhaltezeit scheitert
|
||||
mit `snapshot is protected`)
|
||||
* die Original-VM muss mitsamt ihrer Platte bestehen bleiben
|
||||
* der Klon wächst mit jedem Schreibvorgang
|
||||
|
||||
Soll die Wiederherstellung bleiben, wird sie gelöst:
|
||||
|
||||
```bash
|
||||
pvesnap-recovery flatten 9802
|
||||
```
|
||||
|
||||
Dahinter steckt `rbd flatten` — die Daten aus dem Elternteil werden jetzt
|
||||
wirklich in den Klon kopiert. Das dauert und belegt Platz, läuft aber im
|
||||
laufenden Betrieb. Danach hängt die Maschine an nichts mehr, und der Schutz der
|
||||
Quell-Snapshots wird automatisch aufgehoben, sodass die Vorhaltezeit wieder
|
||||
durchkommt. In der Oberfläche liegt das auf der Taste `f`; die Detailansicht
|
||||
zeigt an, ob eine Maschine noch am Snapshot hängt.
|
||||
|
||||
> **Nicht von `rbd du` täuschen lassen.** Die Zeile eines Snapshots zeigt nur
|
||||
> dessen *Zuwachs*, nicht seinen Inhalt. Im Test stand `@handtest01` mit
|
||||
> `USED 56 MiB` da — kopiert werden beim Flatten trotzdem über 8 GB, denn
|
||||
> sichtbar ist an dieser Stelle der gesamte Inhalt der Kette
|
||||
> (`<TOTAL> 14 GiB`). `pvesnap-recovery flatten` misst das deshalb vorher und
|
||||
> nennt die Größe, bevor es losgeht.
|
||||
|
||||
**Vorher wird geprüft, ob der Platz reicht.** Läuft ein Ceph-Pool während des
|
||||
Kopierens voll, blockiert er *alle* Schreibvorgänge — dann steht nicht nur das
|
||||
Flatten, sondern jede VM auf diesem Storage, und selbst das Aufräumen wird
|
||||
schwierig, weil Löschen ebenfalls ein Schreibvorgang ist. `flatten` bricht
|
||||
deshalb ab, wenn weniger als das 1,15-fache des Bedarfs frei ist; `--force`
|
||||
setzt sich darüber hinweg.
|
||||
|
||||
Schnell ist es, solange Platz da ist: 3,1 GB waren im Test in 26 Sekunden
|
||||
kopiert.
|
||||
|
||||
### Wenn außerhalb von pvesnap gelöscht wurde — `cleanup`
|
||||
|
||||
Wird eine Wiederherstellung in der Proxmox-Oberfläche entfernt statt mit
|
||||
`destroy`, bleibt etwas liegen: der Klon selbst kann übrigbleiben, und der
|
||||
Quell-Snapshot bleibt geschützt — die Vorhaltezeit scheitert dann dauerhaft
|
||||
mit `snapshot is protected`.
|
||||
|
||||
```bash
|
||||
pvesnap-recovery cleanup # zeigt Gefundenes, fragt, räumt auf
|
||||
pvesnap-recovery cleanup --all # auch Datenträger ohne Elternteil
|
||||
```
|
||||
|
||||
Gesucht wird nach Datenträgern der Form `vm-<id>-disk-N`, zu deren VMID es
|
||||
**keine Konfigurationsdatei** unter `/etc/pve/nodes/*/` mehr gibt. Bewusst
|
||||
nicht über `/cluster/resources`: Ein Gast auf einem abgemeldeten Node taucht
|
||||
dort unter Umständen nicht auf — und dann würden die Platten einer lebenden
|
||||
Maschine als verwaist gelten. Ohne Elternteil wird nichts von selbst entfernt,
|
||||
und der Schutz eines Snapshots wird nur gelöst, wenn wirklich kein Klon mehr
|
||||
daran hängt.
|
||||
|
||||
Bei anderen Storages sieht es anders aus: **LVM-thin**-Klone sind ohnehin
|
||||
unabhängig (der Thin-Pool zählt die Blöcke, das Original darf weg), bei **ZFS**
|
||||
hängt der Klon am Snapshot und ließe sich nur per `zfs send | zfs recv` lösen —
|
||||
das macht `flatten` nicht und meldet die Datenträger als nicht behandelt.
|
||||
|
||||
### Der Arbeitsspeicher kommt mit
|
||||
|
||||
Enthält der Snapshot den Arbeitsspeicher (`vmstate`, in der Konfiguration
|
||||
@@ -725,6 +805,8 @@ Karte erst zuschalten, wenn klar ist, dass die Luft rein ist.
|
||||
| `console <VMID>` | noVNC-Adresse ausgeben |
|
||||
| `pull <VMID>` | Austauschlaufwerk auf den Host holen |
|
||||
| `release <VMID>` | es wieder lösen |
|
||||
| `flatten <VMID>` | vom Quell-Snapshot lösen (für den Dauerbetrieb) |
|
||||
| `cleanup` | Klone entfernen, zu denen es keinen Gast mehr gibt |
|
||||
| `destroy <VMID>` | restlos verwerfen |
|
||||
|
||||
### Was beim Verwerfen passiert
|
||||
|
||||
Reference in New Issue
Block a user