diff --git a/Readme.md b/Readme.md index bffba52..195bb1e 100644 --- a/Readme.md +++ b/Readme.md @@ -1,203 +1,159 @@ # Restic System Backup – Konfiguration & Wiederherstellung -Dieses Repository enthält die Konfiguration für automatisierte System-Backups mit **Restic**, inklusive **systemd-Service**, **Timer** und **Backup-Skript**. +Dieses Repository enthält die Konfiguration für automatisierte **System-Backups mit Restic**, +inklusive **systemd-Service**, **Timer** und **Backup-Skript**. +Das Setup nutzt **rclone** als Backend (z. B. Nextcloud). --- -## 1. Voraussetzungen installieren +## 1. Voraussetzungen -### 1.1 Pakete installieren -Führe folgende Befehle **als Root** aus: +### 1.1 Benötigte Pakete installieren +Als Root ausführen: ```bash -sudo pacman -S restic rclone fuse jq curl +pacman -S restic rclone fuse jq curl ``` -1.2 rclone als Root konfigurieren -Da Restic das Repository über rclone anspricht, muss rclone als Root konfiguriert werden: +1.2 rclone als Root konfigurieren (wichtig!) +Da das Backup als root läuft, muss rclone auch im Root-Kontext konfiguriert sein: + ```bash sudo -i rclone config ``` +Remote testen: -Folge den Anweisungen, um dein Cloud-Storage (z. B. Cloud.Michaelis.Digital) einzurichten. -Wichtig: Teste die Verbindung mit: ```bash rclone lsd Cloud.Michaelis.Digital: ``` - - 2. Repository klonen und Dateien ablegen -2.1 Repository klonen - ```bash git clone /opt/backup-config cd /opt/backup-config ``` - -2.2 Dateien kopieren -Kopiere die Konfigurationsdateien an die richtigen Orte: - +Dateien installieren ```bash -# Service und Timer +# systemd Units cp restic-backup.service /etc/systemd/system/ cp restic-backup.timer /etc/systemd/system/ +``` # Backup-Skript -cp restic-backup /usr/local/bin/ -chmod +x /usr/local/bin/restic-backup - -# Rechte setzen -sudo chown ratatoskr:ratatoskr /usr/local/bin/restic-backup -sudo chmod 750 /usr/local/bin/restic-backup -sudo chown root:root /etc/systemd/system/restic-backup.service -sudo chmod 644 /etc/systemd/system/restic-backup.service -sudo chown root:root /etc/systemd/system/restic-backup.timer -sudo chmod 644 /etc/systemd/system/restic-backup.timer +```bash +cp restic-backup /usr/local/bin/restic-backup +chmod 750 /usr/local/bin/restic-backup +``` +Rechte setzen +```bash +chown ratatoskr:ratatoskr /usr/local/bin/restic-backup +chown root:root /etc/systemd/system/restic-backup.service +chown root:root /etc/systemd/system/restic-backup.timer +chmod 644 /etc/systemd/system/restic-backup.service +chmod 644 /etc/systemd/system/restic-backup.timer ``` 3. Secrets anlegen 3.1 Restic-Passwortdatei -Erstelle die Passwortdatei für Restic (nur für Root lesbar!): ```bash - mkdir -p /home/ratatoskr echo "DEIN_RESTIC_REPO_PASSWORT" > /home/ratatoskr/.restic-pass chmod 600 /home/ratatoskr/.restic-pass -chown root\:root /home/ratatoskr/.restic-pass +chown root:root /home/ratatoskr/.restic-pass ``` -3.2 Umgebungsvariablen (optional) -Falls du die Umgebungsvariablen global setzen willst (z. B. für manuelle Backups), füge folgende Zeilen zu /etc/environment hinzu: -```Bash - -RESTIC_REPOSITORY=rclone\:Cloud.Michaelis.Digital\:Restic/backup-repo -RESTIC_PASSWORD_FILE=/home/ratatoskr/.restic-pass -``` - -Lade die Variablen neu: +3.2 Umgebungsvariablen (empfohlen) ```bash - -source /etc/environment +export RESTIC_REPOSITORY=rclone:Cloud.Michaelis.Digital:Restic/backup-repo +export RESTIC_PASSWORD_FILE=/home/ratatoskr/.restic-pass ``` +Diese Variablen können z. B. in: + +/etc/profile.d/restic.sh + +oder im systemd-Service + +gesetzt werden. + 4. systemd aktivieren ```bash systemctl daemon-reload systemctl enable --now restic-backup.timer -systemctl enable restic-backup.service ``` Status prüfen: ```bash systemctl status restic-backup.timer -journalctl -u restic-backup.service -f +journalctl -u restic-backup.service ``` -5. Backup-Repository initialisieren -Falls das Repository noch nicht existiert: +5. Repository initialisieren (nur beim ersten Mal!) +⚠️ Nur ausführen, wenn das Repository noch nicht existiert! ```bash -restic -r rclone\:Cloud.Michaelis.Digital\:backup-repo init +restic -r rclone:Cloud.Michaelis.Digital:Restic/backup-repo init ``` -6. Snapshots mounten (bei Bedarf) -6.1 Mount-Punkt erstellen +6. Snapshots einsehen & mounten (Read-Only Restore) +6.1 Snapshots anzeigen +```bash +restic snapshots +``` + +6.2 Snapshots mounten ```bash mkdir -p /mnt/restic +restic mount /mnt/restic ``` -6.2 Snapshot mounten (nur bei Bedarf) - -Umgebungsvariablen setzen: +Danach verfügbar unter: ```bash -export RESTIC_REPOSITORY=rclone\:Cloud.Michaelis.Digital\:backup-repo +/mnt/restic/snapshots// +``` + +Unmount: + +```bash +fusermount -u /mnt/restic +``` +7. Wiederherstellung +7.1 Einzelne Dateien oder Ordner +```bash +restic restore \ + --target /tmp/restore \ + --include /home/ratatoskr/.ssh +``` + +7.2 ⚠️ Vollständiges System-Restore (NICHT empfohlen) +Ein Full-Restore auf ein laufendes System wird nicht empfohlen. +Stattdessen selektiv wiederherstellen. + +8. Hinweise & Best Practices +rclone läuft als root + +Snapshots immer zuerst mounten, dann selektiv kopieren + +Kein blindes Restore von /etc oder /usr + +Logs: + +/var/log/restic-backup.log + +journalctl -u restic-backup.service + +Benachrichtigungen via ntfy sind im Script konfigurierbar + +9. Minimaler Quickstart (erprobt) +```bash +Copy code +export RESTIC_REPOSITORY=rclone:Cloud.Michaelis.Digital:Restic/backup-repo export RESTIC_PASSWORD_FILE=/home/ratatoskr/.restic-pass -``` - -Snapshot suchen und mounten: - -```bash -restic -r \$RESTIC_REPOSITORY --password-file $RESTIC_PASSWORD_FILE snapshots -restic -r \$RESTIC_REPOSITORY --password-file $RESTIC_PASSWORD_FILE mount /mnt/restic-snapshot/ -``` - -Hinweis: Das Mounten erfolgt über FUSE und ist lazy – Daten werden erst bei Zugriff geladen. -6.3 Unmounten - -```bash -fusermount -u /mnt/restic-snapshot -``` - -7. Wiederherstellung von Dateien -7.1 Einzelne Dateien wiederherstellen - -```bash -restic -r rclone\:Cloud.Michaelis.Digital\:backup-repo restore --target /tmp/restore -``` - -7.2 Vollständiges System wiederherstellen - -```bash -restic -r rclone\:Cloud.Michaelis.Digital\:backup-repo restore --target / -``` - -8. Wichtige Hinweise - -rclone als Root: Restic benötigt Root-Rechte für rclone, da es auf / zugreift. -FUSE: Wird automatisch von Restic für das Mounten verwendet. -Logs: Backup-Logs findest du in /var/log/restic-backup.log und im Journal (journalctl -u restic-backup.service). -Benachrichtigungen: Das Skript sendet Updates an ntfy.michaelis.digital. Passe die URL und Credentials im Skript an. - -9. Zusammenfassung der Befehle (Copy&Paste-freundlich) - -```bash -# 1. Pakete installieren -pacman -S restic rclone fuse jq curl - -# 2. rclone als Root konfigurieren -sudo -i -rclone config - -# 3. Repository klonen und Dateien ablegen -git clone /opt/backup-config -cd /opt/backup-config -cp restic-backup.service /etc/systemd/system/ -cp restic-backup.timer /etc/systemd/system/ -cp restic-backup /usr/local/bin/ -chmod +x /usr/local/bin/restic-backup - -# 4. Secrets anlegen -mkdir -p /home/ratatoskr -echo "DEIN_RESTIC_REPO_PASSWORT" > /home/ratatoskr/.restic-pass -chmod 600 /home/ratatoskr/.restic-pass -chown root\:root /home/ratatoskr/.restic-pass - -# 5. systemd aktivieren -systemctl daemon-reload -systemctl enable --now restic-backup.timer -systemctl enable restic-backup.service - -# 6. Repository initialisieren (falls neu) -restic -r rclone\:Cloud.Michaelis.Digital\:backup-repo init -``` - -Hinweise zur Nutzung: - -Ersetze mit der tatsächlichen URL deines GTA-Repositories. -Ersetze DEIN_RESTIC_REPO_PASSWORT mit dem tatsächlichen Passwort für dein Restic-Repository. -Die gesamte Datei ist durchgehend in Markdown formatiert und kann direkt als README.md gespeichert werden. -Kopieren - -### **Anmerkungen:** -- Alle Code-Blöcke sind korrekt als `bash` oder `ini` markiert. -- Die Struktur ist durchgehend mit `---` getrennt, um die Lesbarkeit zu erhöhen. -- Die Befehle zum Mounten der Snapshots wurden korrigiert und um die Umgebungsvariablen ergänzt. -- Dopplungen (z. B. die Zusammenfassung der Befehle) wurden entfernt. - -Falls du weitere Anpassungen brauchst, lass es mich wissen! +restic snapshots +restic mount /mnt/restic +``` \ No newline at end of file