espo-deploy/rmm-tasks/ESPO-05-Snapshot-verwerfen.sh
Gordon Zimm 449627de30 Update-Weg: ESPO-04 mit Snapshot als Riegel, ESPO-05 zum Verwerfen
ESPO-04 legt zuerst den LVM-Snapshot an und bricht ab, wenn das nicht gelingt -
kein Update ohne Rueckweg. Es bricht ausserdem ab, wenn noch ein Snapshot aus
einem frueheren Lauf besteht: Das hiesse, dass das vorige Update nie bestaetigt
wurde, und zwei Snapshots uebereinander waeren kein Rueckweg mehr.

ESPO-05 verwirft den Snapshot, nachdem jemand die Instanz geprueft hat, und
haelt vorher Fuellgrad und Gueltigkeit fest - war er bereits vollgelaufen, hat
der Rueckweg schon vorher nicht mehr getragen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-24 14:37:45 +02:00

44 lines
2.0 KiB
Bash
Executable File

#!/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"