diff --git a/Scripts/borg.sh b/Scripts/borg.sh new file mode 100644 index 0000000..8584ae2 --- /dev/null +++ b/Scripts/borg.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +# My personal script to take Borg backups +# Expecting an already initialized repository + +# 0. Gotify-Benachrichtigung, falls Fehler +err() { +curl "https://gotify.dataprolet.de/message?token=XXXXXXXXXX" -F "title=Borg Backup Desktop" \ + -F "message=Borg-Backup hatte einen Fehler." -F "priority=5" +} + +# 1. Desktop-Benachrichtigung, dass das Backup startet +sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Backup started..' + +# 2. Verzeichnis für die Logdatei festlegen +log="/home/$user/.borg/logs/"$(date +"%Y-%m-%d_%H:%M")".log" + +# 3. Adresse des Repositories festlegen +repo= # Fill in your repositories address here + +# 4. Standard streams in Logdatei umleiten +exec >> >(tee -i ${log}) +exec 2>&1 + +# 5. Passwort für Repository exportieren +export BORG_PASSCOMMAND='cat "/etc/borgpass"' + +# 6. Backup erstellen (niceness = 2, verbose, zeige Statistiken, Kompression = automatisch & zstd) +# https://borgbackup.readthedocs.io/en/stable/usage/create.html +nice -n 19 ionice -c 3 borg create -v --stats -C auto,zstd \ + $repo::'{now:%Y-%m-%d_%H:%M}' \ + /home/$user/Daten \ + || err + +# 7. Desktop-Benachrichtigung, dass das Backup beendet ist +sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Backup finished.' + +# 8. Leerzeichen für die Logdatei +echo + +# 9. Desktop-Benachrichtigung, dass das Repository bereinigt wird +# https://borgbackup.readthedocs.io/en/stable/usage/prune.html +sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Pruning backups..' + +# 10. Zeitstempel für die Logdatei (Start) +echo "Started pruning backups: $(date)" +echo + +# 11. Behalte 7 tägliche, 4 wöchentliche, 6 monatliche und 1 jährliche Backup(s). +# Zeitmessung für die Logdatei +time borg prune --stats --list --save-space -d=5 -m=3 -y=1 $repo + +# 12. Leerzeile für die Logdatei +echo + +# 13. Zeitstempel für die Logdatei (Ende) +echo "Finished pruning: $(date)" + +# 14. Desktop-Benachrichtigung, dass die Bereinigung beendet ist +sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Pruning finished' + +# 15. Logdateien löschen, die älter sind als 30 Tage +/usr/bin/find /home/$user/.borg/logs/* -mtime +30 -exec sudo -u $user env XDG_RUNTIME_DIR="/run/user/$(id -u $user)" /usr/bin/rmtrash -rf {} \;