Backup Strategie¶
Status: ✅ Eingerichtet & Automatisiert\ Letzte Aktualisierung: 2026-03-02
Changelog¶
2026-03-02:
- Bugfix: rclone Config-Pfad — monatliches Backup schlug fehl (03:00 via HA shell_command)
- Ursache: /data/.config/rclone/rclone.conf nur im Claude Code Add-on-Kontext zugänglich, nicht im HA-Kontext
- Fix: Config nach /config/tools/rclone.conf verschoben (für beide Kontexte zugänglich)
- Rotation vereinfacht: 1× Yearly + 1× Monthly + 1× Weekly (statt 2+3)
- Yearly Backup hinzugefügt: 1. Januar um 04:00
- Weekly Trigger: Tage [8, 16, 23] → nur noch 9. des Monats
- Watchdog-Tage aktualisiert: [2, 8, 16, 23] → [2, 9] + 1. Januar
- Cleanup läuft jetzt vor dem Upload (verhindert Quota-Fehler bei vollem OneDrive)
- Backup-Größe korrigiert: ~9 GB pro Backup (statt geschätzter ~15 GB)
- OneDrive-Limit dokumentiert: 30 GB → bei >29 GB Yearly streichen
2026-02-27:
- Umfassende Robustifizierung: 7 Bugs im Script analysiert und behoben
- Bug 1 (bestätigt): Sonarr tar crashte auf asp/key-*.xml (Container-gesperrte Session-Keys)
- Bug 2–5 (präventiv): Radarr, Lidarr, SABnzbd, Glances, Paperless tar ohne %%--ignore-failed-read%%
- Bug 6: KEEP_COUNT weekly war 1 statt 3 (seit Anfang falsch, jetzt korrigiert)
- Bug 7: rm statt rm -f für alle tmp-Dateien (würde crashen wenn tar fehlschlägt)
- Neu: Graceful Degradation für pg_dump/pg_dumpall falls Container gestoppt
- Backup neu gestartet — läuft jetzt alle 9 Schritte komplett durch
2026-02-24: - Bugfix: rclone-Config-Pfad korrigiert (war nach HAOS-Update nicht mehr vorhanden) - Refactoring: Benachrichtigungssystem auf Watchdog-Ansatz umgestellt (robuster) - Entfernt: Webhook-Automationen (cloud_backup_erfolgreich, cloud_backup_fehlgeschlagen) - Neu: Watchdog-Automation prüft täglich um 07:00 ob Backup stattfand
2026-02-18: - Bugfix: Webhook-Automationen für Benachrichtigungen erstellt (fehlten!) - Umstellung: Backup-Zeitplan von Cron auf HA-Automationen (HAOS hat keinen persistenten Cron) - Aufräumen: Initiales Backup (flache Struktur) gelöscht
2026-02-02: - Initiales Setup
Übersicht¶
Versionierte 3-2-1 Backup-Strategie: - 3 Kopien (Original + Cloud + Lokal) - 2 verschiedene Medien (NAS + Cloud) - 1 Offsite (OneDrive Cloud, verschlüsselt)
Backup-Rotation¶
| Typ | Tag | Zeit | Behalte | | Yearly | 1. Januar | 04:00 | 1 | | Monthly | 2. des Monats | 03:00 | 1 | | Weekly | 9. des Monats | 03:00 | 1 |
Max. Speicher: ~27 GB (3× ~9 GB) — OneDrive-Limit: 30 GB (bei >29 GB Yearly streichen)
Struktur in OneDrive:
Was wird gesichert¶
| Nr | Daten | Größe | | 1 | HA Backups (VorClaudeCode + neuestes) | ~4.5 GB | | 2 | DokuWiki | ~7 MB | | 3 | Paperless Dokumente | ~2 GB | | 4 | Paperless Datenbank (SQL Dump) | ~5 MB | | 5 | Immich Datenbank (SQL Dump) | ~570 MB | | 6 | Plex (library.db + Preferences.xml) | ~680 MB | | 7 | Sonarr Config | ~290 MB | | 8 | Radarr Config | ~155 MB | | 9 | Lidarr Config | ~7.2 GB | | 10 | SABnzbd Config | ~18 MB | | 11 | Glances Config | (leer) | | Pro Backup | ~9 GB |
Automatisierung¶
WICHTIG: Der Backup-Zeitplan läuft über Home Assistant Automationen, NICHT über Cron!\ (HAOS hat keinen persistenten Cron-Dienst)
Automationen:
- automation.cloud_backup_yearly → 1. Januar um 04:00
- automation.cloud_backup_monthly → 2. des Monats um 03:00
- automation.cloud_backup_weekly → 9. des Monats um 03:00
- automation.cloud_backup_watchdog → Überwachung täglich um 07:00 (an Backup-Tagen)
Shell-Commands:
- shell_command.cloud_backup_yearly
- shell_command.cloud_backup_monthly
- shell_command.cloud_backup_weekly
Benachrichtigungen (Watchdog-System)¶
Das Backup-Script sendet keine Webhooks mehr. Stattdessen:
- Script schreibt bei Erfolg das heutige Datum in
/config/tools/cloud_backup_last_success - HA-Sensor
sensor.cloud_backup_letzter_erfolgliest diese Datei (stündlich) automation.cloud_backup_watchdogprüft um 07:00 an Backup-Tagen (2., 9., 1. Jan):- Sensor enthält heutiges Datum → kein Alarm
- Sensor nicht aktuell → Push-Benachrichtigung: "❌ Cloud Backup FEHLER"
Kein Push bis 07:00 = Backup lief durch. Wenn Push kommt = Fehler, Log prüfen.
Bewusst NICHT gesichert¶
- Plex Metadata - Kann neu heruntergeladen werden
- Docker Images - Können neu gepullt werden
- Media-Dateien (Filme, Serien, Musik) - Zu groß, ersetzbar
- Immich Fotos - Gehen auf lokalen Backup-Server (160+ GB)
- MediaCover/ Verzeichnisse - Werden automatisch regeneriert
- logs/ Verzeichnisse - Nicht relevant
Wichtige Pfade¶
| Komponente | Pfad |
| rclone Binary | /config/tools/rclone |
| rclone Config | /config/tools/rclone.conf |
| Backup-Script | /config/tools/backup-to-cloud.sh |
| Backup-Log | /config/tools/backup.log |
| Cron-Log | /config/tools/backup-cron.log |
| Erfolgs-Marker | /config/tools/cloud_backup_last_success |
| HA-Sensor | sensor.cloud_backup_letzter_erfolg |
rclone Config: Liegt in /config/tools/rclone.conf (für HA-Kontext und Claude Code Add-on zugänglich).\
NICHT mehr in /data/.config/ — dieser Pfad ist im HA shell_command-Kontext nicht zugänglich!
KRITISCH: Verschlüsselungs-Credentials¶
DIESE DATEN UNBEDINGT SICHER AUFBEWAHREN!\ Ohne diese Passwörter sind die Cloud-Backups NICHT wiederherstellbar!
rclone Crypt Passwort¶
- Algorithmus: AES-256
- Dateinamen: Verschlüsselt
- Verzeichnisnamen: Verschlüsselt
OneDrive¶
OMV SFTP¶
Backup manuell ausführen¶
# Yearly Backup manuell starten
/config/tools/backup-to-cloud.sh yearly
# Monthly Backup manuell starten
/config/tools/backup-to-cloud.sh monthly
# Weekly Backup manuell starten
/config/tools/backup-to-cloud.sh weekly
# Live-Log verfolgen
tail -f /config/tools/backup.log
# Letzten Erfolg prüfen
cat /config/tools/cloud_backup_last_success
# Cloud-Inhalt anzeigen
/config/tools/rclone --config /config/tools/rclone.conf lsd backup-crypt:
/config/tools/rclone --config /config/tools/rclone.conf size backup-crypt:
Wiederherstellung¶
Schritt 1: rclone installieren¶
Schritt 2: rclone konfigurieren¶
[onedrive]
type = onedrive
# Token wird bei 'rclone config reconnect onedrive:' neu generiert!
[backup-crypt]
type = crypt
remote = onedrive:Backup
password = t2k1Srf4L7v6Lkd-vDKE29bfvdl9i5Ln60LiuBX3-YIYcUALRHCJfydKoEQOOxtqr8
password2 = t2k1Srf4L7v6Lkd-vDKE29bfvdl9i5Ln60LiuBX3-YIYcUALRHCJfydKoEQOOxtqr8
filename_encryption = standard
directory_name_encryption = true
# OneDrive verbinden (Browser öffnet sich)
rclone config reconnect onedrive:
# Testen
rclone lsd backup-crypt:
Schritt 3: Backup herunterladen¶
# Neuestes Monthly Backup herunterladen
rclone copy backup-crypt:monthly/DATUM/ /restore/ -P
# Oder einzelne Bereiche
rclone copy backup-crypt:monthly/DATUM/ha-backups/ ./ha-restore/ -P
rclone copy backup-crypt:monthly/DATUM/dokuwiki/ ./dokuwiki-restore/ -P
Einzelne Dienste wiederherstellen¶
Home Assistant¶
rclone copy backup-crypt:monthly/DATUM/ha-backups/ ./
# In HA: Einstellungen → System → Backups → Hochladen
DokuWiki¶
rclone copy backup-crypt:monthly/DATUM/dokuwiki/ /dockeruser/data/dokuwiki/ -P
chown -R 1001:100 /dockeruser/data/dokuwiki/
docker restart dokuwiki
Paperless¶
# Dokumente
rclone copy backup-crypt:monthly/DATUM/paperless/media/ /dockeruser/data/paperless/media/ -P
# Datenbank
rclone copy backup-crypt:monthly/DATUM/paperless/paperless.sql ./
cat paperless.sql | docker exec -i paperless-postgres psql -U paperless paperless
docker restart paperless-webserver
Immich Datenbank¶
rclone copy backup-crypt:monthly/DATUM/immich/immich.sql ./
docker stop immich_server immich_machine_learning
cat immich.sql | docker exec -i immich_postgres psql -U postgres
docker start immich_server immich_machine_learning
Plex¶
rclone copy backup-crypt:monthly/DATUM/plex/ ./plex-restore/ -P
docker stop plex
cp ./plex-restore/com.plexapp.plugins.library.db "/Plex/Library/Application Support/Plex Media Server/Plug-in Support/Databases/"
cp ./plex-restore/Preferences.xml "/Plex/Library/Application Support/Plex Media Server/"
docker start plex
Sonarr / Radarr / Lidarr¶
# Beispiel Sonarr
rclone copy backup-crypt:monthly/DATUM/docker-configs/sonarr/ ./sonarr-restore/ -P
docker stop sonarr
cp ./sonarr-restore/config.xml /dockeruser/data/Sonarr/
cp ./sonarr-restore/sonarr.db /dockeruser/data/Sonarr/
chown -R 1001:100 /dockeruser/data/Sonarr/
docker start sonarr
SABnzbd¶
rclone copy backup-crypt:monthly/DATUM/docker-configs/sabnzbd/ /dockeruser/data/sabnzbd/ -P
chown -R 1001:100 /dockeruser/data/sabnzbd/
docker restart sabnzbd