diff --git a/miyagi-backup.sh b/miyagi-backup.sh index 82d2648..5230fa4 100644 --- a/miyagi-backup.sh +++ b/miyagi-backup.sh @@ -300,6 +300,9 @@ run_pbs_log_clear() { fi } +vzdump_success=false +pbs_enabled_by_script=false + run_pbs_backup() { if [[ "${BACKUPSERVER,,}" != "yes" ]]; then log "PBS Backup übersprungen: BACKUPSERVER='$BACKUPSERVER' (muss 'yes' sein)" @@ -309,88 +312,155 @@ run_pbs_backup() { get_sourcehostname log "Starte PBS Backup auf Host: $SOURCEHOST" - # PBS-Storage prüfen und ggf. aktivieren + # ------------------------------------------------------------ + # PBS-Storage prüfen und ggf. temporär aktivieren + # ------------------------------------------------------------ + pbs_enabled_by_script=false + log "Prüfe, ob PBS-Storage '$BACKUPSTORE' auf $SOURCEHOST aktiviert ist..." - if rssh root@"$SOURCEHOST" "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then + + if rssh root@"$SOURCEHOST" \ + "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then + log "PBS-Storage '$BACKUPSTORE' ist deaktiviert – aktiviere temporär und warte 10 Sekunden..." - rssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10" - pbs_enabled_by_script=true + + if rssh root@"$SOURCEHOST" \ + "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10"; then + + pbs_enabled_by_script=true + log "PBS-Storage '$BACKUPSTORE' wurde erfolgreich aktiviert." + else + log "FEHLER: PBS-Storage '$BACKUPSTORE' konnte nicht aktiviert werden." + vzdump_success=false + return 1 + fi + else log "PBS-Storage '$BACKUPSTORE' ist bereits aktiviert." - pbs_enabled_by_script=false fi - # PBS Namespace setzen (optional) + # ------------------------------------------------------------ + # PBS Namespace setzen + # ------------------------------------------------------------ + PBS_NS_ARG=() + if [[ -n "$PBS_NAMESPACE" && "${PBS_NAMESPACE,,}" != "none" ]]; then PBS_NS_ARG=(--pbs-namespace "$PBS_NAMESPACE") log "PBS Namespace aktiviert: $PBS_NAMESPACE" else - PBS_NS_ARG=() log "PBS Namespace nicht gesetzt – Backup läuft im Standard-Datastore" fi - + # ------------------------------------------------------------ + # Backup-Status zurücksetzen + # ------------------------------------------------------------ vzdump_success=false - - # Versuch: vzdump mit Change Detection - ## Eintrag muss in /etc/vzdump.conf entries-max 100000000 + # ------------------------------------------------------------ + # vzdump mit Change Detection + # ------------------------------------------------------------ log "Starte vzdump mit Change Detection..." - if rssh root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \ + + if rssh root@"$SOURCEHOST" \ + vzdump --pbs-change-detection-mode metadata \ "${PBS_NS_ARG[@]}" \ - --node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \ - --exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \ + --node "$SOURCEHOSTNAME" \ + --storage "$BACKUPSTORE" \ + --exclude "$BACKUPEXCLUDE" \ + --mode snapshot \ + --all 1 \ --notes-template '{{guestname}}'; then log "vzdump (Change Detection) erfolgreich." vzdump_success=true + else + log "vzdump (Change Detection) fehlgeschlagen – versuche Fallback ohne Change Detection..." - if rssh root@"$SOURCEHOST" vzdump \ + # ---------------------------------------------------------- + # Fallback ohne Change Detection + # ---------------------------------------------------------- + if rssh root@"$SOURCEHOST" \ + vzdump \ "${PBS_NS_ARG[@]}" \ - --node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \ - --exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \ + --node "$SOURCEHOSTNAME" \ + --storage "$BACKUPSTORE" \ + --exclude "$BACKUPEXCLUDE" \ + --mode snapshot \ + --all 1 \ --notes-template '{{guestname}}'; then log "Fallback-vzdump erfolgreich." vzdump_success=true + else + log "FEHLER: vzdump fehlgeschlagen – auch im Fallback." + vzdump_success=false + + fi + fi + # ------------------------------------------------------------ + # PBS-Storage nach erfolgreichem Backup wieder deaktivieren + # + # WICHTIG: + # Nur deaktivieren, wenn dieses Script den Storage + # vorher selbst aktiviert hat. + # ------------------------------------------------------------ + if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then + + log "Deaktiviere temporär aktiviertes PBS-Storage '$BACKUPSTORE' auf $SOURCEHOST..." + + if rssh root@"$SOURCEHOST" \ + "pvesm set '$BACKUPSTORE' --disable 1"; then + + log "PBS-Storage '$BACKUPSTORE' wurde wieder deaktiviert." + + else + + log "WARNUNG: PBS-Storage '$BACKUPSTORE' konnte nicht wieder deaktiviert werden." + fi fi - # PBS-Storage ggf. wieder deaktivieren - if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then - log "Deaktiviere temporär aktiviertes PBS-Storage '$BACKUPSTORE' auf $SOURCEHOST..." - rssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1" - fi -} - # PBS-Storage ggf. wieder deaktivieren - if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then - log "Deaktiviere temporär aktiviertes PBS-Storage '$BACKUPSTORE' auf $SOURCEHOST..." - rssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1" - fi - - # Monitoring-Ausgabe + # ------------------------------------------------------------ + # Rückgabestatus + # ------------------------------------------------------------ if [[ "$vzdump_success" == true ]]; then - echo "0 DailyPBS - Daily Backup erfolgreich" > /tmp/cmk_tmp.out + return 0 else - echo "2 DailyPBS - Daily Backup FEHLGESCHLAGEN" > /tmp/cmk_tmp.out + return 1 fi - - { - echo "<<>>" - cat /tmp/cmk_tmp.out - } > /tmp/90000_checkpbs - - rscp /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool \ - || log "Fehler beim Übertragen des Monitoring-Outputs via SCP" - - rm -f /tmp/cmk_tmp.out /tmp/90000_checkpbs - #write_pbs_status } +# ================================================================ +# Monitoring-Ausgabe +# ================================================================ + +if [[ "$vzdump_success" == true ]]; then + echo "0 DailyPBS - Daily Backup erfolgreich" > /tmp/cmk_tmp.out +else + echo "2 DailyPBS - Daily Backup FEHLGESCHLAGEN" > /tmp/cmk_tmp.out +fi + +{ + echo "<<>>" + cat /tmp/cmk_tmp.out +} > /tmp/90000_checkpbs + +rscp /tmp/90000_checkpbs \ + root@"$SOURCEHOST":/var/lib/check_mk_agent/spool \ + || log "Fehler beim Übertragen des Monitoring-Outputs via SCP" + +rm -f /tmp/cmk_tmp.out /tmp/90000_checkpbs + +#write_pbs_status +} + + +run_maintenance() { + run_maintenance() { if [[ "${BACKUPSERVER,,}" != "yes" ]]; then log "PBS Backup wird übersprungen (BACKUPSERVER=$BACKUPSERVER)"