Version 1 sicherte in Ketten: eine FULL-Sicherung, darauf aufbauend DIFF- und INC-Sicherungen, jede als Paar aus Meta- und Image-Datei (.infb/.csfb, .indb/.csdb, .inib/.csib). Version 2 speichert stattdessen deduplizierte Runs in Stores. Das alte Format ist nicht mehr lesbar, außer mit bkp_restore_legacy. Dieses Kapitel übersetzt die vertrauten Begriffe und Abläufe und endet mit einer Checkliste für das Update.
27.1 Gegenüberstellung#
| Version 1 | Version 2 |
|---|---|
| Kette (FULL + DIFF/INC) | Store (<store>.cbs) mit Runs; eine Store-Generation ist die unabhängige Basis |
| FULL | der erste Run eines Namens in einer Generation (in Listen Full); erzwingen mit --type full = neue Generation |
| DIFF | entfällt (--type diff wird abgewiesen): jeder Run ist einzeln restorebar |
| INC | ein normaler Run (--type inc oder ohne --type), in Listen Incremental |
| Synthetic-Full | nicht mehr nötig: jeder Run ist schon ein vollständiger Zeitpunkt |
| Recompress | entfällt; die Kompression gilt je neuem Chunk |
feste Blöcke, --block-size | inhaltsabhängige Chunks, --chunk-size je Store bzw. Generation |
--parent, --search-dir, --meta, --uuid | --store + --name [--at] oder --run |
Meta-/Image-Datei, bkp_dump <meta> | Run-Datei und Packs im Store, bkp_dump <store> --run <run> |
--resume verify|trust, Teilsicherungen (.part) auf dem Server | entfällt: der nächste Lauf sendet nur, was dem Store fehlt |
bkp_maintenance partials, m365-check, run-loop | entfällt bzw. scrub --store |
--out-encryption, --target-encryption | [sink:] mit encryption= und key= |
Target-Platzhalter {meta}/{img} | {store} (und {uuid} für den Run) |
Proxmox/Xen: je Disk eine Sicherung <name>-<disk> | ein VM-Run je VM; einzelne Disks mit --disk |
27.2 Was beim Restore anders ist#
- Es gibt keine Kette mehr, die vollständig vorliegen muss. Ein Run verweist direkt auf alle seine Chunks; der älteste ist so schnell zurückgespielt wie der neueste.
- Einen Zeitpunkt wählt
--atstatt der UUID einer bestimmten Sicherung;--runnimmt den Namen aus--list. - Fehlt ein Chunk, scheitert nicht der ganze Restore: der Bereich wird mit Nullen gefüllt und gemeldet (Teil-Restore, Exit 3), oder er kommt aus einem anderen Sink.
27.3 Aufbewahrung und Speicherfreigabe#
In Version 1 blieb eine Kette, bis ihr letztes Glied ablief, weil jede INC ihre Vorgänger brauchte; Platz wurde frei, wenn eine ganze Kette gelöscht wurde. In Version 2 hat jeder Run seine eigene Aufbewahrung, und prune löscht abgelaufene Runs einzeln. Danach entfernt prune die Daten, die kein verbliebener Run mehr braucht (Garbage Collection).
- Ein abgelaufener Run lässt sich jederzeit löschen, auch wenn ältere oder jüngere Runs bleiben. Es gibt keine Abhängigkeiten mehr.
- Löschen gibt nur Platz frei, wenn die Chunks des Runs nicht noch anderswo gebraucht werden. Bei stabilen Daten ist das wenig: das meiste teilen sich die Runs.
- Schutzfristen: die neueste Sicherung je Name bleibt immer; Packs jünger als
--gc-min-age(24 h) werden nie angefasst.
27.4 Schadensbetrachtung#
In einer Kette machte ein beschädigter Block in der FULL jeden darauf aufbauenden Stand an dieser Stelle unbrauchbar, und eine neue FULL war die Rückfallebene. Im Store teilen sich viele Runs einen Chunk; ein beschädigter, oft verwendeter Chunk trifft deshalb ebenfalls viele Runs. Dagegen gibt es mehrere Schutzschichten:
- Jedes Objekt hat eine Prüfsumme und wird beim Lesen gegen seine ID geprüft; Schäden werden immer erkannt, nie stillschweigend zurückgeschrieben.
scrubfindet Schäden früh,repairersetzt sie aus einer zweiten Kopie (zweiter Sink oder Spiegel).- Der Teil-Restore liefert den Rest einer beschädigten Sicherung und meldet genau, welche Bereiche fehlen.
- Eine neue Generation (
--type fulloder--store-generation) ist wie früher eine neue FULL: eine Basis, die keine Daten mit den älteren teilt.
27.5 Platzanzeige#
Früher war der Platz einer Sicherung die Größe ihrer Dateien. Heute zeigt bkp_restore --list je Run die Spalten DATA (Daten des Stands), SENT (übertragen) und NEW (neu gespeichert). NEW entspricht am ehesten der Größe einer früheren INC. bkp_maintenance store-info zeigt die Summe der Daten aller Runs gegenüber den gespeicherten Bytes (Deduplizierungsfaktor) und mit --exclusive je Backup-Name, was nur seine Runs belegen, also was das Löschen dieses Namens frei machen würde.
27.6 Zeitplan vorher und nachher#
| Version 1 | Version 2 |
|---|---|
sonntags --type full, werktags --type inc | täglich ohne --type; sonntags --type full nur, wenn jede Woche eine unabhängige Basis gewünscht ist |
sonntags FULL, werktags --type diff | täglich ohne --type (DIFF wird abgewiesen, die Jobs müssen umgestellt werden) |
| monatlich FULL, dazwischen INC | store-generation=1m im Profil, ein einziger täglicher Job |
monatlich maint-synthetic-full für ein Archiv | monatlich maint-export (Archiv .cba) oder Aufbewahrung retention=12m für den Monatslauf |
maint-recompress | entfällt |
27.7 Checkliste für das Update beim Kunden#
- Platz einplanen: Die erste Sicherung jedes Rechners in den neuen Store dauert so lange wie eine FULL und braucht deren Platz; erst ab der zweiten wird nur noch Neues gespeichert. Die alten Ketten liegen bis zu ihrem Ablauf daneben.
- Konfigurationen anpassen:
block-size=,parent=,type=diff,resume=verify|trust,out-encryption=/target-encryption=(jetzt[sink:]mitencryption=/key=),no-vmconfig/no-domconfig,search-dir=,maint-synthetic-full/maint-recompress-Jobs und{meta}/{img}im Target-Scheduler werden abgewiesen (als unbekannter Schlüssel oder mit einem Hinweis auf den Ersatz).bkp_sched validateundbkp_target --sched-validateprüfen die Job-Konfigurationen; ein Profil prüft man mit einem Probelauf von Hand. - Hash und Chunk-Größe festlegen: beides gilt ab dem ersten Lauf für den Store. Für neue Stores
--hash blake3, die Chunk-Größe zunächst beim Standard lassen und später nach der Empfehlung vonstore-infoumstellen. bkp_restore_legacybereithalten (Setup-Komponentelegacy), am besten auf dem Backup-Server, wo die alten Dateien liegen: das neuebkp_targetspricht das alte Protokoll nicht.- Alte Dateien auslaufen lassen: gelöscht werden sie mit
bkp_restore_legacy prunebzw.delete, nicht mitbkp_maintenance.
Alte Sicherungen lesen und löschen
bkp_restore_legacy list /backup # alte Sicherungen anzeigen
bkp_restore_legacy restore --meta /backup/data-20260101T020000Z.inib --target /dev/vg0/data_restored
bkp_restore_legacy prune --search-dir /backup --dry-run # abgelaufene alte Ketten