Files
raspi-backup/05_status.sh
2025-12-30 18:37:44 +01:00

97 lines
2.8 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
CFG="$SCRIPT_DIR/config.sh"
[[ -f "$CFG" ]] || { echo "ERROR: config.sh fehlt: $CFG (erst 01_setup.sh ausführen)"; exit 1; }
# shellcheck disable=SC1090
source "$CFG"
LOG_FILE="$SCRIPT_DIR/raspi-backup.log"
host_short(){ hostname -s 2>/dev/null || hostname 2>/dev/null || echo "raspi"; }
nas_alias(){ echo "${ALIAS_PREFIX}-$(host_short)"; }
hn="$(host_short)"
alias="$(nas_alias)"
remote_root="${NAS_BACKUP_BASE%/}/${hn}"
echo "== Backup Status =="
echo "Script-Ordner : $SCRIPT_DIR"
echo "Host : $hn"
echo "NAS : ${NAS_USER}@${NAS_HOST}:${NAS_PORT}"
echo "Remote Root : $remote_root"
echo "Log : $LOG_FILE"
echo
# Log-Info (letzter Lauf)
if [[ -f "$LOG_FILE" ]]; then
echo "-- Letzter Log-Block (kurz) --"
# Zeige die letzten ~25 Zeilen, aber etwas "smart" ab BACKUP START wenn vorhanden
if grep -q "BACKUP START" "$LOG_FILE"; then
awk '
BEGIN{start=0}
/BACKUP START/{start=1}
{buf[NR]=$0}
END{
# gib die letzten 80 Zeilen aus, aber nur wenn start irgendwann vorkam
from = (NR-80>1)?NR-80:1
for(i=from;i<=NR;i++) print buf[i]
}' "$LOG_FILE" | tail -n 25
else
tail -n 25 "$LOG_FILE"
fi
echo
else
echo "Noch kein Log vorhanden."
echo
fi
# NAS Status (ohne Passwort möglich nur wenn Key-Auth passt)
echo "-- NAS Check --"
echo "Alias (nur Info): $alias"
echo "Hinweis: Dieser Status nutzt direkten SSH Host/Port/User. Falls Passwortabfrage kommt, ist Key-Auth noch nicht sauber."
echo
# Keypfad für SSH_USER
hn2="$hn"
key_path="$(eval echo "~${SSH_USER}/.ssh/id_${KEY_TYPE}_${hn2}")"
if [[ ! -f "$key_path" ]]; then
echo "Local Key fehlt: $key_path"
echo "=> erst 02_setup_ssh.sh ausführen."
exit 0
fi
SSH_BASE=(ssh -p "$NAS_PORT" -i "$key_path"
-o IdentitiesOnly=yes
-o BatchMode=yes
-o StrictHostKeyChecking=yes
-o ConnectTimeout=10
)
# Remote listing
if sudo -u "$SSH_USER" "${SSH_BASE[@]}" "${NAS_USER}@${NAS_HOST}" "test -d '$remote_root'" >/dev/null 2>&1; then
echo "Remote erreichbar: OK"
echo
echo "-- Remote Inhalt --"
sudo -u "$SSH_USER" "${SSH_BASE[@]}" "${NAS_USER}@${NAS_HOST}" "ls -la '$remote_root' | sed -n '1,40p'"
echo
echo "-- latest Ziel + Größe (wenn vorhanden) --"
sudo -u "$SSH_USER" "${SSH_BASE[@]}" "${NAS_USER}@${NAS_HOST}" \
"if [ -L '$remote_root/latest' ]; then \
echo -n 'latest -> '; readlink '$remote_root/latest' || true; \
echo -n 'Size(latest): '; du -sh '$remote_root/latest' 2>/dev/null || echo 'n/a'; \
else \
echo 'Kein latest Symlink vorhanden.'; \
fi"
else
echo "Remote erreichbar: FAIL"
echo "Check:"
echo " - NAS erreichbar? IP/Port"
echo " - SSH Key installiert?"
echo " - Rechte auf $remote_root"
fi