Entfernen alter BTRFS-Snapshots mit Bash

Entfernen alter BTRFS-Snapshots mit Bash

Ich versuche gerade ein eigenes kleines Backup-Skript zu bauen, ich möchte BTRFS Snapshots verwenden und diese eine Zeit lang aufbewahren. Mittlerweile ist das Erstellen der Snapshots für mich kein Problem mehr, aber nun möchte ich diese nach 5 Tagen wieder löschen.

Um den Erstellungszeitpunkt der Snapshots zu ermitteln, habe ich den folgenden Befehl ausgearbeitet.

/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" -exec /usr/sbin/btrfs subvolume show {} \; | /usr/bin/grep "__snapshot|Creation"

Ausgabe:

__snapshot/auto-sn-data-20210803
        Creation time:          2021-08-03 14:59:01 +0200
__snapshot/auto-sn-Log-20210803
        Creation time:          2021-08-03 15:00:42 +0200

Leider finde ich keine Möglichkeit, anhand des Ausgabedatumstrings eine Löschentscheidung zu treffen. Nun lautet die genaue Frage, wie ich anhand dieser Information eine Löschung des Snapshots nach 5 Tagen veranlassen kann?

Danke

Kleine Idee:

/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" ! \( -name "*$(/usr/bin/date -d '1 day ago' +%Y%m%d)" -o -name "*$(/usr/bin/date -d '2 day ago' +%Y%m%d)"  -o -name "*$(/usr/bin/date -d '3 day ago' +%Y%m%d)" \) -exec /usr/sbin/btrfs subvolume delete {} \;

Ich weiß nicht, ob das funktionieren würde

Antwort1

Um nur das Datum abzurufen, können Sie Folgendes tun:

$ btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$'
# 2021-03-11 04:22:58 +0100

Im Grunde sind Sie an diesem Punkt fertig, denn glücklicherweise liegen die Daten im ISO-Format vor, das Sie mithilfe der normalen Zeichenfolgenvergleichsfunktionen von Bash ganz einfach vergleichen können:

$ old_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
(some time passes)
$ new_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
$ [[ "$old_date" < "$new_date" ]] && echo newer || echo older

verwandte Informationen