#!/bin/bash # ESPO-05-Snapshot-verwerfen - raeumt den Rueckweg weg, nachdem die Instanz von Hand geprueft wurde. # Aufruf: ohne Argumente. # Laeuft bewusst erst nach der Pruefung: Solange der Snapshot besteht, kostet jeder Schreibvorgang # auf /srv einen zusaetzlichen Kopiervorgang, und ein vollgelaufener Snapshot wird still verworfen. set -u # Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist. echo "ESPO-05-Snapshot-verwerfen, Skriptstand 2026-09-24" VG=ubuntu-vg SNAPSHOT=srv-vor-update fehler() { echo "FEHLER: $*"; echo "ESPO05_ERGEBNIS: FEHLER"; exit 1; } # 1. Vorbedingungen. [ "$(id -u)" -eq 0 ] || fehler "nicht als root gestartet" command -v lvremove >/dev/null || fehler "LVM-Werkzeuge fehlen" # 2. Ohne Snapshot gibt es nichts zu verwerfen - das ist kein Erfolg, sondern ein Hinweis: # Entweder lief kein Update, oder der Snapshot ist bereits weg (auch stillschweigend, siehe 3). lvs --noheadings -o lv_name "$VG" 2>/dev/null | grep -qw "$SNAPSHOT" \ || fehler "kein Snapshot '$SNAPSHOT' vorhanden - lief ESPO-04 ueberhaupt?" # 3. Zustand festhalten, bevor er verschwindet. Ein 'I' im Attributfeld heisst: bereits ungueltig, # der Rueckweg haette also gar nicht mehr getragen. Das gehoert ins Protokoll. echo "--- Zustand vor dem Verwerfen" lvs -o lv_name,lv_attr,origin,lv_size,data_percent "$VG/$SNAPSHOT" 2>/dev/null | sed 's/^/ /' ATTR="$(lvs --noheadings -o lv_attr "$VG/$SNAPSHOT" 2>/dev/null | tr -d ' ')" case "$ATTR" in *I*) echo "HINWEIS: Der Snapshot war bereits ungueltig (vollgelaufen) - ein Rueckweg bestand nicht mehr." ;; esac # 4. Verwerfen. lvremove -y "$VG/$SNAPSHOT" >/dev/null 2>&1 || fehler "Snapshot liess sich nicht entfernen" lvs --noheadings -o lv_name "$VG" 2>/dev/null | grep -qw "$SNAPSHOT" \ && fehler "Snapshot ist nach lvremove immer noch da" # 5. Ergebnis zeigen: freie Extents sind die Voraussetzung fuer das naechste Update. echo "--- Danach" echo "Snapshot '$SNAPSHOT' verworfen." vgs --units g -o vg_name,vg_size,vg_free "$VG" 2>/dev/null | sed 's/^/ /' echo "ESPO05_ERGEBNIS: OK"