[gelöst] Script für Borg-Backup optimieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
hobbyadmin
Beiträge: 132
Registriert: 26.12.2020 18:13:43

[gelöst] Script für Borg-Backup optimieren

Beitrag von hobbyadmin » 04.03.2023 12:37:51

Guten Tag in die Runde!
Ich verwende Borg-Backup und habe mir für die Automatisierung ein kleines Script aus dem Internet auf meine Befürfnisse angepasst.
Das funktioniert auch alles aber ich möchte eine Optimierung vornehmen und komme da nicht weiter.
Am Ende des Scripts wird immer eine Status-E-Mail mit den Log-Dateien im Anhang gesendet. Da ich mir nicht zu helfen wusste, habe ich den Befehl einfach vollständig an das Ende des Scriptes geschrieben.
Ich hätte aber gerne, dass in dem eigentlichen Script-Befehl nur Variablen stehen und das die entsprechenden Variablen dann weiter oben eingetragen werden.
Meine Frage an Euch:
Könnt Ihr mir bitte helfen, das in dem Script entsprechend umzusetzen?
Ist wahrscheinlich ganz einfach.
Das Script darf übrigens jeder gerne weiter verwenden.

Hier das Script:

Code: Alles auswählen

#!/bin/bash

# Zunaechst werden die Daten mit Rsync vom NAS geholt:
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=ihm --log-file=/var/log/rsync/rsync_qnap.log .....
#
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=@Recently-Snapshot --log-file=/var/log/rsync/rsync_ihm_qnap.log .....
#

# Danach wird ein Borg-Backup erstellt.
# Skriptvorlage BorgBackup:
# https://wiki.ubuntuusers.de/BorgBackup/
# https://borgbackup.readthedocs.io/en/stable/


# Hier Pfad zum Sicherungsmedium angeben.
# z.B. zielpfad="/media/peter/HD_Backup"
zielpfad=""

# Hier Namen des Repositorys angeben.
# z.B. repository="borgbackups"
repository=""

# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
sicherung=""

# Hier den Pfad für die Log-Datei angeben.
# z.B. LOG="/var/log/borg/backup.log"
LOG=""

# Hier die Art der Verschlüsselung angeben
# z.B. verschluesselung="none" "keyfile" "repokey"
verschluesselung=""

# Hier die Art der Kompression angeben
# z.B. kompression="none" "lz4" "zlib" "lzma"
kompression=""

# Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll
# z.B. rootuser="ja" "nein"
rootuser=""

# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
# Die Vorgabe behält alle Sicherungen des aktuellen Tages. Zusätzlich das aktuellste Archiv der 
# letzten 7 Sicherungstage, der letzten 5 Wochen sowie der letzten 12 Monate.
pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=1"

# Hier die Angaben für den E-Mail-Versand angeben.
# Text in der E-Mail:
?????
# Text in der Betreffzeile:
?????
# E-Mail-Adresse des Empfängers:
?????
# Pfad zum Dateianhang 1:
?????
# Pfad zum Dateianhang 2:
?????
# Pfad zum Dateianhang 3:
?????


# AB HIER KEINE VERÄNDERUNGEN MEHR VORNEHMEN!
###################################################################################################
###################################################################################################

# destination path:
repopfad="$zielpfad"/"$repository"

# check for root:
if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then
  echo "Sicherung muss als Root-User ausgeführt werden."
  exit 1
fi

# Init borg-repo if absent:
if [ ! -d $repopfad ]; then
  borg init --encryption=$verschluesselung $repopfad 
  echo "Borg-Repository erzeugt unter $repopfad"
fi

# write to log-file:
exec > >(tee -i ${LOG})
exec 2>&1

# backup data:
SECONDS=0
echo "Start der Sicherung $(date)."

borg create --compression $kompression --exclude-caches --one-file-system -v --stats --progress \
            $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden"

# prune archives:
borg prune -v --list $repopfad --prefix '{hostname}-' $pruning

# send status e-mail:
echo "Mein Text in der E-Mail" | mail -s "Mein Text in der Betreffzeile" benutzer@email.adresse.de -A "/pfad/zur/Log-Datei-1.log" -A "/pfad/zur/Log-Datei-2.log" -A "/pfad/zur/Log-Datei-3.log"
Zuletzt geändert von hobbyadmin am 04.03.2023 15:17:27, insgesamt 1-mal geändert.

chrbr
Beiträge: 624
Registriert: 29.10.2022 15:53:26

Re: Script für Borg-Backup optimieren

Beitrag von chrbr » 04.03.2023 13:36:40

Ich bin mir nicht sicher, was Du genau suchst. Vielleicht hilft das folgende Beispiel.

Code: Alles auswählen

+chris@lenovo:~$ b="Hallo"
+chris@lenovo:~$ t="Trallala"
+chris@lenovo:~$ echo $t|mail -s $b chris
Das Ergebnis ist

Code: Alles auswählen

+chris@lenovo:~$ cat Maildir/mbox/new/1677933159.M341490P283562V0000000000010302I0000000001AC0174_0.lenovo\,S\=507 
Return-Path: <chris@lenovo.local>
Delivered-To: chris@lenovo.local
Received: from localhost (lenovo.local [local])
	by lenovo.local (OpenSMTPD) with ESMTPA id fb5c410d
	for <chris@lenovo.local>;
	Sat, 4 Mar 2023 12:32:39 +0000 (UTC)
From: Christoph Brinkhaus <chris@lenovo.local>
Date: Sat, 4 Mar 2023 13:32:39 +0100 (CET)
To: chris@lenovo.local
Subject: Hallo
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-ID: <dd1b46d696a584f2@lenovo.local>

Trallala

hobbyadmin
Beiträge: 132
Registriert: 26.12.2020 18:13:43

Re: Script für Borg-Backup optimieren

Beitrag von hobbyadmin » 04.03.2023 15:16:39

Jau, das war es. Ich ahnte ja schon, dass es einfach sein würde. Vielen Dank für die Hilfe!
Hier ist das fertige Script für Borg-Backup zur freien Verfügung.

Code: Alles auswählen

#!/bin/bash
#
# Zunächst werden die Daten mit Rsync vom Server/NAS geholt:
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=ihm --log-file=/var/log/rsync/rsync_nas.log ...
#
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=@Recently-Snapshot --log-file=/var/log/rsync/rsync_ihm_nas.log ...
#
#
# Danach wird ein Borg-Backup erstellt.
#
# Hier Pfad zum Sicherungsmedium angeben.
# z.B. zielpfad="/media/peter/HD_Backup"
zielpfad=""
#
# Hier Namen des Repositorys angeben.
# z.B. repository="borgbackups"
repository=""
#
# Hier eine Liste mit den zu sichernden Verzeichnissen angeben.
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
sicherung=""
#
# Hier den Pfad für die Log-Datei angeben.
# z.B. LOG="/var/log/borg/backup.log"
LOG=""
#
# Hier die Art der Verschlüsselung angeben.
# z.B. verschluesselung="none" "keyfile" "repokey"
verschluesselung=""
#
# Hier die Art der Kompression angeben.
# z.B. kompression="none" "lz4" "zlib" "lzma"
kompression=""
#
# Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll.
# z.B. rootuser="ja" "nein"
rootuser=""
#
# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=1 --keep-yearly=0"
#
# Hier Angaben für den E-Mail-Versand angeben.
# Wichtig! msmtp muss dafür installiert und funktionsfähig sein.
#
# Text in E-Mail:
# z.B. var1="Status-E-Mail des täglichen Borg-Backup."
var1=""
# Text in Betreff-Zeile:
# z.B. var2="Borg-Backup"
var2=""
# E-Mail-Adresse des Empfängers:
# z.B. var3="benutzer@e-mail-adresse.de"
var3=""
# Pfad zu Log-Datei-1:
# z.B. var4="/var/log/borgbackup.log"
var4=""
# Pfad zu Log-Datei-2:
# z.B. var5="/var/log/rsync1.log"
var5=""
# Pfad zu Log-Datei-3:
# z.B. var6="/var/log/rsync2.log"
var6=""
#
#
# AB HIER BITTE NICHTS MEHR VERÄNDERN!
###################################################################################################
###################################################################################################

# destination path:
repopfad="$zielpfad"/"$repository"

# check for root:
if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then
  echo "Sicherung muss als Root-User ausgeführt werden."
  exit 1
fi

# Init borg-repo if absent:
if [ ! -d $repopfad ]; then
  borg init --encryption=$verschluesselung $repopfad 
  echo "Borg-Repository erzeugt unter $repopfad"
fi

# write to log-file:
exec > >(tee -i ${LOG})
exec 2>&1

# backup data:
SECONDS=0
echo "Start der Sicherung $(date)."

borg create --compression $kompression --exclude-caches --one-file-system -v --stats --progress \
            $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden"

# prune archives:
borg prune -v --list $repopfad --prefix '{hostname}-' $pruning

# send status e-mail:
echo "$var1" | mail -s "$var2" $var3 -A "$var4" -A "$var5" -A "$var6"

hobbyadmin
Beiträge: 132
Registriert: 26.12.2020 18:13:43

Re: [gelöst] Script für Borg-Backup optimieren

Beitrag von hobbyadmin » 06.03.2023 14:25:13

Moin!
Es waren doch noch leichte Anpassungen notwendig. Jetzt funktioniert es bei mir einwandfrei.

Code: Alles auswählen

#!/bin/bash
#
# Zunächst werden die Daten mit Rsync vom Server/NAS geholt (optional):
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=ihm --log-file=/var/log/rsync/rsync_nas.log ...
#
/usr/bin/rsync -aSAXHP -e ssh --delete --exclude=@Recycle --exclude=@Recently-Snapshot --log-file=/var/log/rsync/rsync_ihm_nas.log ...
#
#
# Danach wird ein Borg-Backup erstellt.
#
# Hier Pfad zum Sicherungsmedium angeben.
# z.B. zielpfad="/media/peter/HD_Backup"
zielpfad=""
#
# Hier Namen des Repository angeben.
# z.B. repository="borgbackups"
repository=""
#
# Hier eine Liste mit den zu sichernden Verzeichnissen angeben.
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
sicherung=""
#
# Hier den Pfad für die Log-Datei angeben.
# z.B. LOG="/var/log/borg/backup.log"
LOG=""
#
# Hier die Art der Verschlüsselung angeben.
# z.B. verschluesselung="none" "keyfile" "repokey"
verschluesselung=""
#
# Hier die Art der Kompression angeben.
# z.B. kompression="none" "lz4" "zlib" "lzma"
kompression=""
#
# Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll.
# z.B. rootuser="ja" "nein"
rootuser=""
#
# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=1 --keep-yearly=0"
#
# Hier Angaben für den E-Mail-Versand angeben.
# Wichtig! msmtp muss dafür installiert und funktionsfähig sein.
#
# Text in E-Mail:
# z.B. var1="Status-E-Mail des täglichen Borg-Backup."
var1=""
# Text in Betreff-Zeile:
# z.B. var2="Borg-Backup"
var2=""
# E-Mail-Adresse des Empfängers:
# z.B. var3="benutzer@e-mail-adresse.de"
var3=""
# Pfad zu Log-Datei-1:
# z.B. var4="/var/log/borgbackup.log"
var4=""
# Pfad zu Log-Datei-2:
# z.B. var5="/var/log/rsync1.log"
var5=""
# Pfad zu Log-Datei-3:
# z.B. var6="/var/log/rsync2.log"
var6=""
#
#
# AB HIER BITTE NICHTS MEHR VERÄNDERN!
###################################################################################################
###################################################################################################

# destination path:
repopfad="$zielpfad"/"$repository"

# check for root:
if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then
  echo "Sicherung muss als Root-User ausgeführt werden."
  exit 1
fi

# Init borg-repo if absent:
if [ ! -d $repopfad ]; then
  borg init --encryption=$verschluesselung $repopfad 
  echo "Borg-Repository erzeugt unter $repopfad"
fi

# write to log-file:
exec > >(tee -i ${LOG})
exec 2>&1

# backup data:
SECONDS=0
echo "Start der Sicherung $(date)."

borg create --compression $kompression --exclude-caches --one-file-system -v --stats --progress \
            $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden"

# prune archives:
borg prune -v --list $repopfad --prefix '{hostname}-' $pruning

# pause the script:
sleep 60

# send status e-mail:
echo "$var1" | mail -s "$var2" $var3 -A "$var4" -A "$var5" -A "$var6"

# pause the script:
sleep 10

# end of script
exit

Antworten