3 Commits

Author SHA1 Message Date
René Mathieu
07ce794828 Add timestamped Pushover start/end on Tomedo branch 2026-03-11 10:59:44 +01:00
René Mathieu
7040f0c90b Handle Borg warning exit codes on Tomedo branch 2026-03-08 15:19:54 +01:00
René Mathieu
8221378011 Add Tomedo backup script variant 2026-03-08 15:18:36 +01:00

View File

@@ -1,5 +1,4 @@
#!/usr/bin/env bash
# MAIN-HINWEIS: Diese Version ist nun inkl. Tomedo-Backup.
# Robust: WireGuard hoch, CIFS mounten (inkl. Stale-Handle-Fix), rsync,
# nur erlaubte Dateitypen zusätzlich nach paperless-consume (flach, OHNE GIF),
# Paperless-Backup rsync als echtes Sync (mit --delete),
@@ -89,8 +88,6 @@ 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"
TOMEDO_RSYNC_MAX_RETRIES=3
TOMEDO_RSYNC_RETRY_SLEEP=5
# -----------------------------
# Hilfsfunktionen
@@ -139,7 +136,7 @@ cleanup() {
set +e
log "== Cleanup =="
if is_cifs_mounted; then
if mountpoint -q "$CIFS_MOUNTPOINT"; then
log "Unmount: $CIFS_MOUNTPOINT"
umount "$CIFS_MOUNTPOINT" 2>/dev/null || umount -l "$CIFS_MOUNTPOINT" || true
else
@@ -218,14 +215,10 @@ _mount_cifs_with_opts() {
fi
}
is_cifs_mounted() {
awk -v mp="$CIFS_MOUNTPOINT" '$2 == mp && $3 == "cifs" { found=1 } END { exit(found ? 0 : 1) }' /proc/mounts
}
mount_cifs() {
log "== CIFS mount: $CIFS_SHARE -> $CIFS_MOUNTPOINT =="
if is_cifs_mounted; then
if mountpoint -q "$CIFS_MOUNTPOINT"; then
log "Mountpoint ist gemountet -> versuche umount"
umount "$CIFS_MOUNTPOINT" 2>/dev/null || umount -l "$CIFS_MOUNTPOINT" || true
fi
@@ -245,88 +238,34 @@ mount_cifs() {
_mount_cifs_with_opts "$opts_robust"
local rc=$?
set -e
if [[ $rc -eq 0 ]] && is_cifs_mounted; then
if [[ $rc -eq 0 ]]; then
log "OK gemountet (robust)."
return 0
fi
if [[ $rc -eq 0 ]]; then
log "WARNUNG: mount meldet Erfolg, aber CIFS ist nicht stabil eingehängt."
fi
log "WARNUNG: CIFS mount (robust) fehlgeschlagen (rc=$rc). Fallback auf Basis-Optionen."
set +e
_mount_cifs_with_opts "$opts_base"
rc=$?
set -e
if [[ $rc -eq 0 ]] && is_cifs_mounted; then
if [[ $rc -eq 0 ]]; then
log "OK gemountet (base)."
return 0
fi
if [[ $rc -eq 0 ]]; then
log "WARNUNG: mount (base) meldet Erfolg, aber CIFS ist nicht stabil eingehängt."
fi
log "FEHLER: CIFS mount fehlgeschlagen (rc=$rc)."
exit 1
}
ensure_cifs() {
local attempt
for ((attempt=1; attempt<=3; attempt++)); do
if is_cifs_mounted; then
return 0
fi
log "WARNUNG: CIFS nicht gemountet -> remount (Versuch ${attempt}/3)"
if ! mountpoint -q "$CIFS_MOUNTPOINT"; then
log "WARNUNG: CIFS nicht gemountet -> remount"
mount_cifs
sleep 1
if is_cifs_mounted; then
return 0
fi
done
if ! mountpoint -q "$CIFS_MOUNTPOINT"; then
log "FEHLER: CIFS Remount fehlgeschlagen."
exit 1
}
run_rsync_with_cifs_retry() {
local label="$1"
shift
local attempt rc=0
for ((attempt=1; attempt<=TOMEDO_RSYNC_MAX_RETRIES; attempt++)); do
ensure_cifs
log "rsync ${label}: Versuch ${attempt}/${TOMEDO_RSYNC_MAX_RETRIES}"
set +e
rsync "$@"
rc=$?
set -e
if [[ "$rc" -eq 0 ]]; then
return 0
fi
if [[ "$rc" -eq 11 || "$rc" -eq 12 || "$rc" -eq 30 || "$rc" -eq 35 ]]; then
if [[ "$attempt" -lt "$TOMEDO_RSYNC_MAX_RETRIES" ]]; then
log "WARNUNG: rsync ${label} fehlgeschlagen (rc=$rc). Remount und Retry in ${TOMEDO_RSYNC_RETRY_SLEEP}s."
if is_cifs_mounted; then
umount "$CIFS_MOUNTPOINT" 2>/dev/null || umount -l "$CIFS_MOUNTPOINT" || true
fi
sleep "$TOMEDO_RSYNC_RETRY_SLEEP"
mount_cifs
continue
fi
log "FEHLER: rsync ${label} nach ${TOMEDO_RSYNC_MAX_RETRIES} Versuchen fehlgeschlagen (rc=$rc)."
return "$rc"
fi
log "FEHLER: rsync ${label} fehlgeschlagen (rc=$rc)."
return "$rc"
done
return "$rc"
}
copy_to_paperless_flat_if_allowed_ext() {
@@ -474,16 +413,15 @@ rsync_tomedo_backup() {
fi
mkdir -p "$dst_snapshot" "$dst_files"
local tomedo_rsync_opts=(-r -l -t -O --info=progress2 --temp-dir=/tmp)
log "== rsync Tomedo Snapshot: $src_snapshot -> $dst_snapshot =="
run_rsync_with_cifs_retry "Tomedo Snapshot" "${tomedo_rsync_opts[@]}" \
rsync -r -l -t -O --info=progress2 \
--exclude-from "$TOMEDO_MACOS_EXCLUDES" \
"$src_snapshot" \
"$dst_snapshot"
log "== rsync Tomedo Files: $src_files -> $dst_files =="
run_rsync_with_cifs_retry "Tomedo Files" "${tomedo_rsync_opts[@]}" \
rsync -r -l -t -O --info=progress2 \
--exclude-from "$TOMEDO_MACOS_EXCLUDES" \
--exclude-from "$TOMEDO_FILES_EXCLUDES" \
"$src_files" \