Backups/Snapshots
note
Snapshots sind lokale Kopien eines Subvolumes (in unserem Fall Ordner in /persist) zu einem bestimmten Zeitpunkt. Sie sind eher für schnelle “Rollbacks” (z.B. nach versehentlichem löschen der Datenbnk) gedacht als für tatsächliche Disaster Recovery. Backups wiederum liegen nicht lokal, sondern auf einer anderen Maschine (am besten off-site) und können auch nach einem kompletten Ausfall des Host Systems wiederhergestellt werden.
Die Ordner Struktur in /persist wird automatisch gesnapshotted. Die Snapshots sind inkrementell und read-only und liegen in /persist/.snapshots.
Snapshots werden automatisch jede Stunde und beim (neu-)starten eines NixOS Containers erstellt.
Snapshots auflisten
Alle Snapshots können mit sudo btrbk ls /persist/.snapshots aufgelistet werden.
Snapshots sind nach folgendem Format benannte:
name.YYYYMMDD<T>hhmmss+<TZOffset>
▲ ▲
│ └── Zeitstempel, der 01.04.2025 um 13:20:05 Sommerzeit (UTC+2) wäre
│ 20250401T132005+0200
│
└─ Name des Ordners in /persist
Snapshots erstellen
Ein manueller Snapshot (für z.B. fscshhude) kann mit sudo btrbk run /persist/fscshhude erstellt werden.
Snapshots wiederherstellen
Wir gehen dies anhand eines Beispiels durch indem wir einen Snapshot des /persist/fscshhude Ordner wiederherstellen wollen. Alle Orte wo fscshhude steht müssen dann natürlich durch den eigentlichen Ordnernamen in /persist ersetzt werden.
Schritt -1: Den Service stoppen
WICHTIG! Ist halt doof wenn der Service noch in die Ordner schreibt während wir snapshotten (Unfertige Transaction oder son kack).
Schritt 0: Den aktuellen Zustand snapshotten
Wiederherstellen um dann zu merken das der gerade weggeworfene Zustand doch richtig war, ist doof. Deswegen machen wir vorher immer brav einen Snapshot damit uns auch niemand mit “Kein Backup, kein Mitleid” hauen kann.
Dafür einfach den Command sudo btrbk run /persist/fscshhude ausführen.
Schritt 1: Welchen Snapshot wollen wir den haben?
Wie oben beschrieben mit sudo btrbk ls /persist/.snapshots alle Snapshots auflisten und den richtigen aussuchen. Wir nehmen als Beispiel jetzt mal /persist/.snapshots/fscshhude.20250928T000000+0200.
Schritt 2: Den aktuellen Zustand entfernen
Jetzt entfernen wir den alten Zustand um Platz für den Snapshot zu machen.
Dafür führen wir sudo btrfs subvolume delete /persist/fscshhude aus.
Schritt 3: Den Snapshot widerherstellen
Dafür führen wir sudo btrfs sub snap /persist/.snapshots/fscshhude.20250928T000000+0200 /persist/fscshhude aus.