Strenger Label-Abgleich je Snapshot-Engine und Warnungen bei Altlasten #3

Closed
opened 2026-10-15 17:08:53 +02:00 by thorsten.spille · 0 comments

Problem (Bugreport Chriz, pve1 → pve7): Auf dem Ziel liegen 50 statt 14 Snapshots, die Platten laufen voll. Ursache: beim Umstieg von zas auf internal mit gleichem Label blieb auf der Quelle zfs-auto-snap_zsync-miyagi-2026-07-20-1051 liegen. Der Filter @.*$label trifft auch diesen Namen; er ist der älteste Quell-Snapshot des Intervalls, seine GUID fehlt auf dem Ziel → zsync löscht still gar nichts mehr. remote-snapshot-manager räumt nur ^dataset@label- auf, der Rest bleibt für immer.

Zweite Schwäche: das Muster ist hinten offen, Label zsync passt auch auf zsync-miyagi-….

Umsetzung:

  1. Parameter zfs_auto_snapshot_label_match=strict|legacy
    • ohne Eintrag legacy = heutiges @.*$label (bestehende Configs unverändert), das Template schreibt strict
    • strict, zas: @zfs-auto-snap_${label}-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}$
    • strict, internal: @${label}-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}$
    • snapshot_filter (daily|weekly|…) bleibt bei .*
    • Engine-Wechsel bricht die Replikation nicht: die Delta-Basis ist der jüngste Zielsnapshot unabhängig vom Namen
  2. [WARN] bei Beinahe-Treffern (passt auf .*$label, aber nicht strikt) auf Quelle und Ziel, mit kopierbaren Snapshot-Namen. Quelle aus der ohnehin abgefragten Liste, kein Zusatzaufruf. Wichtig fürs Ziel: im strict-Modus löscht zsync alte zfs-auto-snap_<label>-… dort nicht mehr.
  3. [WARN] + rc≠0, wenn die GUID des ältesten Quell-Snapshots eines Intervalls auf dem Ziel fehlt (bisher: still keine Löschung).
  4. README: Labels dürfen nicht ineinander enthalten sein; Abschnitt zum Engine-Wechsel zas → internal mit Aufräumbefehl:
zfs list -H -t snapshot -o name | grep '@zfs-auto-snap_<label>-' | xargs -r -n1 zfs destroy -nv

Rahmen: Default = bisheriges Verhalten, der Replikations-/Löschalgorithmus bleibt unverändert, optionale Tools werden per which erkannt (fehlen sie, läuft alles wie bisher mit Logmeldung). Eigener Branch/PR mit Test. Teil von 2.0.0, Reihenfolge siehe Roadmap.

**Problem (Bugreport Chriz, pve1 → pve7):** Auf dem Ziel liegen 50 statt 14 Snapshots, die Platten laufen voll. Ursache: beim Umstieg von `zas` auf `internal` mit gleichem Label blieb auf der Quelle `zfs-auto-snap_zsync-miyagi-2026-07-20-1051` liegen. Der Filter `@.*$label` trifft auch diesen Namen; er ist der älteste Quell-Snapshot des Intervalls, seine GUID fehlt auf dem Ziel → zsync löscht still gar nichts mehr. `remote-snapshot-manager` räumt nur `^dataset@label-` auf, der Rest bleibt für immer. Zweite Schwäche: das Muster ist hinten offen, Label `zsync` passt auch auf `zsync-miyagi-…`. **Umsetzung:** 1. Parameter `zfs_auto_snapshot_label_match=strict|legacy` - ohne Eintrag `legacy` = heutiges `@.*$label` (bestehende Configs unverändert), das Template schreibt `strict` - strict, zas: `@zfs-auto-snap_${label}-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}$` - strict, internal: `@${label}-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}$` - `snapshot_filter` (daily|weekly|…) bleibt bei `.*` - Engine-Wechsel bricht die Replikation nicht: die Delta-Basis ist der jüngste Zielsnapshot unabhängig vom Namen 2. `[WARN]` bei Beinahe-Treffern (passt auf `.*$label`, aber nicht strikt) auf Quelle und Ziel, mit kopierbaren Snapshot-Namen. Quelle aus der ohnehin abgefragten Liste, kein Zusatzaufruf. Wichtig fürs Ziel: im strict-Modus löscht zsync alte `zfs-auto-snap_<label>-…` dort nicht mehr. 3. `[WARN]` + `rc≠0`, wenn die GUID des ältesten Quell-Snapshots eines Intervalls auf dem Ziel fehlt (bisher: still keine Löschung). 4. README: Labels dürfen nicht ineinander enthalten sein; Abschnitt zum Engine-Wechsel zas → internal mit Aufräumbefehl: ``` zfs list -H -t snapshot -o name | grep '@zfs-auto-snap_<label>-' | xargs -r -n1 zfs destroy -nv ``` --- **Rahmen:** Default = bisheriges Verhalten, der Replikations-/Löschalgorithmus bleibt unverändert, optionale Tools werden per `which` erkannt (fehlen sie, läuft alles wie bisher mit Logmeldung). Eigener Branch/PR mit Test. Teil von 2.0.0, Reihenfolge siehe Roadmap.
thorsten.spille added this to the 2.0.0 milestone 2026-10-15 17:08:53 +02:00
Sign in to join this conversation.
No labels
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
bashclub/zsync#3
No description provided.