Compare commits
3 Commits
codex/tome
...
codex/Tome
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07ce794828 | ||
|
|
7040f0c90b | ||
|
|
8221378011 |
@@ -4,13 +4,14 @@
|
||||
# Paperless-Backup rsync als echtes Sync (mit --delete),
|
||||
# Anmeldung ebenfalls sync + consume,
|
||||
# zusätzlich: Borg lokal (inkrementell, versioniert) + Mirror per rsync auf CIFS (mit delete),
|
||||
# zusätzlich: Tomedo-Backup per rsync,
|
||||
# robust gegen CIFS-Aussetzer: ensure_cifs + rsync temp-dir lokal + Mount-Fallback.
|
||||
# Zusätzlich: Pushover-Benachrichtigung bei Erfolg/Fehler.
|
||||
# Fix: Wenn wg0 schon aktiv ist, wird es nicht erneut gestartet und beim Cleanup
|
||||
# nur dann beendet, wenn dieses Skript es selbst hochgebracht hat.
|
||||
# Zusätzlich: Schutz gegen parallele Ausführung per flock.
|
||||
|
||||
set -euo pipefail
|
||||
set -Eeuo pipefail
|
||||
|
||||
# -----------------------------
|
||||
# Konfiguration
|
||||
@@ -79,10 +80,20 @@ DRY_RUN_DELETE="0"
|
||||
# Welche Dateien nach paperless-consume? (OHNE GIF)
|
||||
CONSUME_EXT_REGEX='\.([Pp][Dd][Ff]|[Dd][Oo][Cc][Xx]?|[Xx][Ll][Ss][Xx]?|[Pp][Pp][Tt][Xx]?|[Oo][Dd][Tt]|[Oo][Dd][Ss]|[Oo][Dd][Pp]|[Rr][Tt][Ff]|[Tt][Xx][Tt]|[Cc][Ss][Vv]|[Mm][Dd]|[Hh][Tt][Mm][Ll]?|[Jj][Pp][Ee]?[Gg]|[Pp][Nn][Gg]|[Tt][Ii][Ff][Ff]?|[Ww][Ee][Bb][Pp]|[Hh][Ee][Ii][Cc])$'
|
||||
|
||||
# -----------------------------
|
||||
# Tomedo Backup
|
||||
# -----------------------------
|
||||
TOMEDO_SRC_ROOT="/mnt/TomedoBackup"
|
||||
TOMEDO_LAST_FILE="${TOMEDO_SRC_ROOT}/lastFilesBackup"
|
||||
TOMEDO_DEST_ROOT="${CIFS_MOUNTPOINT}/TomedoBackup"
|
||||
TOMEDO_MACOS_EXCLUDES="${TOMEDO_DEST_ROOT}/macos.excludes"
|
||||
TOMEDO_FILES_EXCLUDES="${TOMEDO_DEST_ROOT}/files.excludes"
|
||||
|
||||
# -----------------------------
|
||||
# Hilfsfunktionen
|
||||
# -----------------------------
|
||||
log() { echo "[$(date +'%F %T')] $*"; }
|
||||
ts_now() { date +'%F %T'; }
|
||||
|
||||
send_pushover() {
|
||||
local message="$1"
|
||||
@@ -149,6 +160,7 @@ on_error() {
|
||||
local line_no="${1:-unknown}"
|
||||
log "FEHLER in Zeile ${line_no}, Exit-Code ${exit_code}"
|
||||
send_pushover "Backup FEHLER auf $(hostname): Zeile ${line_no}, Exit-Code ${exit_code}" 1
|
||||
trap - EXIT
|
||||
cleanup
|
||||
exit "$exit_code"
|
||||
}
|
||||
@@ -161,7 +173,7 @@ trap 'on_error $LINENO' ERR
|
||||
trap on_exit EXIT
|
||||
|
||||
check_deps() {
|
||||
local deps=(wg-quick wg mount rsync ping mountpoint umount awk cp date basename tee mktemp sleep id mkdir rm dirname borg df curl hostname flock)
|
||||
local deps=(wg-quick wg mount rsync ping mountpoint umount awk cp date basename tee mktemp sleep id mkdir rm dirname borg df curl hostname flock cat)
|
||||
for d in "${deps[@]}"; do
|
||||
command -v "$d" >/dev/null 2>&1 || { echo "Fehlt: $d"; exit 1; }
|
||||
done
|
||||
@@ -357,9 +369,90 @@ rsync_paperless_backup() {
|
||||
"$SRC_PAPERLESS_BACKUP" "$DEST_PAPERLESS_BACKUP"
|
||||
}
|
||||
|
||||
rsync_tomedo_backup() {
|
||||
ensure_cifs
|
||||
|
||||
log "== Tomedo Backup starten =="
|
||||
|
||||
if [[ ! -f "$TOMEDO_LAST_FILE" ]]; then
|
||||
log "FEHLER: Datei fehlt: $TOMEDO_LAST_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local last_backup
|
||||
last_backup="$(cat "$TOMEDO_LAST_FILE")"
|
||||
|
||||
if [[ -z "$last_backup" ]]; then
|
||||
log "FEHLER: $TOMEDO_LAST_FILE ist leer"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local src_snapshot="${TOMEDO_SRC_ROOT}/${last_backup}/"
|
||||
local dst_snapshot="${TOMEDO_DEST_ROOT}/${last_backup}"
|
||||
local src_files="${TOMEDO_SRC_ROOT}/files/"
|
||||
local dst_files="${TOMEDO_DEST_ROOT}/files"
|
||||
|
||||
if [[ ! -d "$src_snapshot" ]]; then
|
||||
log "FEHLER: Tomedo Snapshot-Ordner fehlt: $src_snapshot"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -d "$src_files" ]]; then
|
||||
log "FEHLER: Tomedo files-Ordner fehlt: $src_files"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$TOMEDO_MACOS_EXCLUDES" ]]; then
|
||||
log "FEHLER: Exclude-Datei fehlt: $TOMEDO_MACOS_EXCLUDES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$TOMEDO_FILES_EXCLUDES" ]]; then
|
||||
log "FEHLER: Exclude-Datei fehlt: $TOMEDO_FILES_EXCLUDES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$dst_snapshot" "$dst_files"
|
||||
|
||||
log "== rsync Tomedo Snapshot: $src_snapshot -> $dst_snapshot =="
|
||||
rsync -r -l -t -O --info=progress2 \
|
||||
--exclude-from "$TOMEDO_MACOS_EXCLUDES" \
|
||||
"$src_snapshot" \
|
||||
"$dst_snapshot"
|
||||
|
||||
log "== rsync Tomedo Files: $src_files -> $dst_files =="
|
||||
rsync -r -l -t -O --info=progress2 \
|
||||
--exclude-from "$TOMEDO_MACOS_EXCLUDES" \
|
||||
--exclude-from "$TOMEDO_FILES_EXCLUDES" \
|
||||
"$src_files" \
|
||||
"$dst_files"
|
||||
|
||||
log "== Tomedo Backup fertig: $last_backup =="
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Borg: lokal sichern + Mirror auf CIFS
|
||||
# -----------------------------
|
||||
run_borg_allow_warning() {
|
||||
local label="$1"
|
||||
shift
|
||||
|
||||
local rc
|
||||
set +e
|
||||
"$@"
|
||||
rc=$?
|
||||
set -e
|
||||
|
||||
if [[ "$rc" -ge 2 ]]; then
|
||||
log "FEHLER: ${label} fehlgeschlagen (Exit-Code ${rc})."
|
||||
return "$rc"
|
||||
fi
|
||||
|
||||
if [[ "$rc" -eq 1 ]]; then
|
||||
log "WARNUNG: ${label} mit Warnungen beendet (Exit-Code 1), mache weiter."
|
||||
fi
|
||||
}
|
||||
|
||||
borg_local_backup() {
|
||||
log "== Borg lokal Backup -> $LOCAL_BORG_REPO =="
|
||||
|
||||
@@ -379,7 +472,7 @@ borg_local_backup() {
|
||||
local archive="agathe-$(hostname)-$(date +%F_%H%M%S)"
|
||||
log "Platz lokal: $(df -h "$LOCAL_BORG_BASE" | tail -1)"
|
||||
|
||||
borg create --stats --compression zstd,6 \
|
||||
run_borg_allow_warning "borg create" borg create --stats --compression zstd,6 \
|
||||
"$LOCAL_BORG_REPO::$archive" \
|
||||
/ \
|
||||
/boot \
|
||||
@@ -405,14 +498,14 @@ borg_local_backup() {
|
||||
--exclude /mnt/groot \
|
||||
--exclude-caches
|
||||
|
||||
borg prune -v --list "$LOCAL_BORG_REPO" \
|
||||
run_borg_allow_warning "borg prune" borg prune -v --list "$LOCAL_BORG_REPO" \
|
||||
--keep-daily="$KEEP_DAILY" \
|
||||
--keep-weekly="$KEEP_WEEKLY" \
|
||||
--keep-monthly="$KEEP_MONTHLY" \
|
||||
--prefix "agathe-$(hostname)-"
|
||||
|
||||
if [[ "$BORG_CHECK" == "1" ]]; then
|
||||
borg check -v --verify-data "$LOCAL_BORG_REPO"
|
||||
run_borg_allow_warning "borg check" borg check -v --verify-data "$LOCAL_BORG_REPO"
|
||||
fi
|
||||
|
||||
log "Lokales Borg Backup fertig: $archive"
|
||||
@@ -445,6 +538,8 @@ need_root
|
||||
check_deps
|
||||
acquire_lock
|
||||
|
||||
send_pushover "Backup START auf $(hostname) um $(ts_now)."
|
||||
|
||||
bringup_wg
|
||||
mount_cifs
|
||||
|
||||
@@ -452,9 +547,10 @@ rsync_and_copy_to_consume_flat "$SRC_GROOT" "$DEST_GROOT" "GROOT"
|
||||
rsync_and_copy_to_consume_flat "$SRC_ANMELDUNG" "$DEST_ANMELDUNG" "ANMELDUNG"
|
||||
|
||||
rsync_paperless_backup
|
||||
rsync_tomedo_backup
|
||||
|
||||
borg_local_backup
|
||||
rsync_borg_mirror_to_cifs
|
||||
|
||||
log "== Fertig. =="
|
||||
send_pushover "Backup erfolgreich auf $(hostname) abgeschlossen."
|
||||
send_pushover "Backup ENDE auf $(hostname) um $(ts_now)."
|
||||
|
||||
Reference in New Issue
Block a user