Zum Inhalt

Alte Snapshots von Hand aufräumen

Ungeprüft

Diese Anleitung ist noch nicht durchgespielt worden; Befehle, Bezeichnungen und erwartete Ausgaben können abweichen. Was noch zu prüfen ist, steht in todo/doku.md.

Im Normalfall nicht nötig

Alte Snapshots räumt Backrest auf containerhost automatisch auf. Diese Anleitung brauchst du nur, wenn Backrest das einmal nicht erledigt, etwa weil der Container nicht läuft oder seine Läufe fehlschlagen.

Ziel

Im Repository von werner auf dem NAS liegen nur noch die Snapshots, die nach den Aufbewahrungsregeln gebraucht werden, und der Platz der übrigen ist freigegeben.

Voraussetzungen

  • SSH-Zugang zu containerhost, also ein Rechner, der mit dem Admin-VPN oder dem Zauberer-WLAN verbunden ist (Arbeitsrechner einrichten)
  • dein age-Schlüssel ist eingetragen, und sops -d syslet/werner/creds-mailjet.enc.yaml zeigt Klartext (Arbeitsrechner einrichten)
  • Zugang zu Backrest unter backrest.garage-lab.net, im Netz vor Ort
  • gelesen: Backup, vor allem Aufbewahrung und die Entscheidung, warum nach Host und Tags gruppiert wird; forget und prune im Glossar

Wann du die Schritte ausführst:

  • nicht zwischen 3 und 4 Uhr UTC; dann läuft das Backup von werner, und prune sperrt das Repository, sodass das Backup fehlschlägt
  • nicht, während Backrest selbst gerade einen Vorgang im Repository ausführt; das siehst du in der Web-Oberfläche

Schritte

1. Aufbewahrungsregeln in Backrest ablesen

Öffne backrest.garage-lab.net und dort den Plan nas-data. Notiere die Aufbewahrungsregeln (Retention), etwa wie viele tägliche, wöchentliche, monatliche und jährliche Snapshots behalten werden.

Diese Werte gibst du in Schritt 4 und 5 an restic forget weiter, damit das Aufräumen von Hand dieselben Snapshots behält wie Backrest. Welche Option von restic forget zu welcher Regel gehört, steht in der restic-Doku: Snapshots entfernen, z. B. --keep-daily 7 für sieben tägliche Snapshots.

2. Passwort des Repositorys holen

Auf deinem Rechner, im Repo-Ordner:

Bash
sops -d --extract '["repopassword"]' syslet/werner/creds-backup.enc.yaml

Erwartet: das Passwort in einer Zeile. restic fragt in den folgenden Schritten danach; kopier es von hier und füge es dort ein.

3. Snapshots auflisten

Melde dich auf containerhost an und öffne eine Shell im Container backrest:

Bash
ssh vm-containerhost.garage-lab.net
podman exec -it backrest /bin/sh

Setz im Container den Pfad zum Repository und liste die Snapshots:

Bash
export RESTIC_REPOSITORY=/mnt/nas-backup/werner-garage-lab-de
restic snapshots --host werner.garage-lab.de --compact

Bei enter password for repository: fügst du das Passwort aus Schritt 2 ein; es wird nicht angezeigt. Erwartet: eine Tabelle mit einem Snapshot je Nacht und am Ende N snapshots. Reichen die Snapshots deutlich weiter zurück, als die Regeln aus Schritt 1 vorsehen, hat Backrest nicht aufgeräumt.

Der Pfad /mnt/nas-backup/werner-garage-lab-de ist das NAS-Verzeichnis, wie es im Container eingebunden ist; er steht auch beim Container resticmgmt in syslet/containerhost/stack-resticserver.cue.

4. Probelauf: anzeigen, was entfernt würde

Ersetz die --keep-…-Optionen durch die aus Schritt 1:

Bash
1
2
3
restic forget --host werner.garage-lab.de --group-by host,tags \
  --keep-daily <…> --keep-weekly <…> --keep-monthly <…> --keep-yearly <…> \
  --compact --dry-run

--group-by host,tags ist nötig; ohne die Option würde restic nichts entfernen, weil sich die gesicherten Pfade von Lauf zu Lauf unterscheiden.

Erwartet: zuerst Applying Policy: mit deinen Regeln, dann eine Gruppe snapshots for (host [werner.garage-lab.de], tags [plan:nas-data, created-by:werner-garage-lab-de]) mit den Tabellen keep N snapshots: und remove N snapshots:. Es wird noch nichts gelöscht.

Prüf die Liste unter remove: Die jüngsten Snapshots müssen alle unter keep stehen. Steht dort mehr als eine Gruppe, haben ältere Snapshots andere Tags; diese Gruppen räumt restic getrennt auf, jede nach denselben Regeln.

5. Snapshots entfernen

Derselbe Befehl ohne --dry-run:

Bash
1
2
3
restic forget --host werner.garage-lab.de --group-by host,tags \
  --keep-daily <…> --keep-weekly <…> --keep-monthly <…> --keep-yearly <…> \
  --compact

Erwartet: dieselben Tabellen wie in Schritt 4, danach remove N snapshots: mit Fortschrittsanzeige und keine Fehlermeldung. Die Snapshots sind jetzt aus der Liste entfernt, ihr Platz auf dem NAS ist aber noch belegt.

6. Platz freigeben

Bash
restic prune

Das kann je nach Menge der entfernten Snapshots mehrere Minuten dauern. Erwartet: Zeilen wie collecting packs for deletion and repacking, eine Übersicht mit this removes: und total prune:, dann rebuilding index, removing N old packs und am Ende done.

Danach verlässt du den Container mit exit und containerhost mit noch einmal exit.

Prüfen

  • restic snapshots --host werner.garage-lab.de --compact im Container backrest zeigt nur noch die Snapshots, die nach den Regeln bleiben, und der jüngste Snapshot von werner ist noch da.
  • restic check im Container backrest endet mit no errors were found.
  • Das nächste nächtliche Backup von werner läuft ohne Meldung von healthchecks.io durch.

Wenn etwas schiefgeht

  • repository is already locked: Backrest oder das Backup von werner arbeitet gerade im Repository. Warte, bis der Vorgang in Backrest bzw. das Backup fertig ist, und starte den Befehl dann neu. Nur wenn sicher nichts mehr läuft, entfernst du eine liegengebliebene Sperre mit restic unlock.
  • wrong password or no key found: Das Passwort ist falsch; hol es noch einmal wie in Schritt 2 und achte darauf, keine Leerzeichen mitzukopieren.
  • unable to open config file oder no such file or directory für /mnt/nas-backup/…: Das NAS ist auf containerhost nicht eingebunden; siehe NAS und frag in Signal nach.
  • Das Backup von werner ist während prune gelaufen und fehlgeschlagen: Backup-Meldung von healthchecks.io
  • Allgemeines: restic-Doku: Snapshots entfernen und Troubleshooting