
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