project:backup
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| project:backup [2026/03/03 10:25] – [Inkrementelles Backup mit rsync] torsten.roehl | project:backup [2026/03/03 10:51] (aktuell) – torsten.roehl | ||
|---|---|---|---|
| Zeile 4: | Zeile 4: | ||
| //In diesem Projekt wird aus einem **Raspberry Pi** ein zentraler **NFS-Backupserver** für ein lokales Netzwerk aufgebaut. Ziel ist eine saubere und technisch nachvollziehbare Trennung zwischen einem ausschließlich lesbaren Bereich und einem schreibbaren Datenbereich. {{ : | //In diesem Projekt wird aus einem **Raspberry Pi** ein zentraler **NFS-Backupserver** für ein lokales Netzwerk aufgebaut. Ziel ist eine saubere und technisch nachvollziehbare Trennung zwischen einem ausschließlich lesbaren Bereich und einem schreibbaren Datenbereich. {{ : | ||
| Dabei wird bewusst **keine Benutzer-Synchronisation zwischen Client und Server** eingesetzt. Stattdessen werden alle Schreibzugriffe serverseitig auf einen definierten Service-User abgebildet. Dadurch bleibt die Client-Konfiguration minimal, konsistent und unabhängig von lokalen UID-Strukturen.// | Dabei wird bewusst **keine Benutzer-Synchronisation zwischen Client und Server** eingesetzt. Stattdessen werden alle Schreibzugriffe serverseitig auf einen definierten Service-User abgebildet. Dadurch bleibt die Client-Konfiguration minimal, konsistent und unabhängig von lokalen UID-Strukturen.// | ||
| - | |||
| ====== Konzept ====== | ====== Konzept ====== | ||
| + | |||
| Der Server stellt zwei Verzeichnisse bereit: | Der Server stellt zwei Verzeichnisse bereit: | ||
| Zeile 12: | Zeile 12: | ||
| * ''/ | * ''/ | ||
| - | {{ : | + | {{ : |
| Für das Datenverzeichnis wird ein technischer Service-User mit der '' | Für das Datenverzeichnis wird ein technischer Service-User mit der '' | ||
| Zeile 21: | Zeile 20: | ||
| Alle schreibenden Zugriffe auf ''/ | Alle schreibenden Zugriffe auf ''/ | ||
| - | |||
| - | |||
| <note important> | <note important> | ||
| Zeile 28: | Zeile 25: | ||
| Die IP-Adresse des Servers wird hier mit '' | Die IP-Adresse des Servers wird hier mit '' | ||
| </ | </ | ||
| - | |||
| - | |||
| ====== NFS Server ====== | ====== NFS Server ====== | ||
| Zeile 55: | Zeile 50: | ||
| sudo chown -R 2000:2000 / | sudo chown -R 2000:2000 / | ||
| sudo chmod -R 2775 / | sudo chmod -R 2775 / | ||
| - | |||
| # ================================ | # ================================ | ||
| Zeile 63: | Zeile 57: | ||
| / | / | ||
| / | / | ||
| - | |||
| # anwenden | # anwenden | ||
| Zeile 73: | Zeile 66: | ||
| sudo exportfs -v | sudo exportfs -v | ||
| </ | </ | ||
| - | |||
| Nach dem Neustart des Dienstes stellt der **Raspberry Pi** beide Verzeichnisse im Netzwerk bereit. | Nach dem Neustart des Dienstes stellt der **Raspberry Pi** beide Verzeichnisse im Netzwerk bereit. | ||
| Das öffentliche Verzeichnis ist ausschließlich lesbar, während im Datenverzeichnis alle Schreibzugriffe auf den Service-User 2000 abgebildet werden. | Das öffentliche Verzeichnis ist ausschließlich lesbar, während im Datenverzeichnis alle Schreibzugriffe auf den Service-User 2000 abgebildet werden. | ||
| + | ++++ | ||
| - | |||
| - | ++++ | ||
| ====== NFS Client ====== | ====== NFS Client ====== | ||
| Zeile 134: | Zeile 125: | ||
| </ | </ | ||
| - | + | ====== | |
| - | ====== | + | |
| Der NFS-Server stellt lediglich den zentralen Speicher bereit. | Der NFS-Server stellt lediglich den zentralen Speicher bereit. | ||
| Zeile 141: | Zeile 131: | ||
| Im Kurs werden zwei einfache Verfahren verwendet: | Im Kurs werden zwei einfache Verfahren verwendet: | ||
| - | - '' | ||
| - | - '' | ||
| - | ==== Einfache Kopie mit scp ==== | + | * '' |
| - | Mit '' | + | * '' |
| + | |||
| + | ===== Einfache Kopie mit scp ===== | ||
| <code bash> | <code bash> | ||
| - | scp -r / | + | core) torsten@hiketas: |
| + | 2026-03-03_11-50-46 | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | scp -r / | ||
| </ | </ | ||
| Zeile 155: | Zeile 150: | ||
| - | + | < | |
| - | ==== Inkrementelles Backup mit rsync ==== | + | ===== Inkrementelles Backup mit rsync ===== |
| - | + | ||
| - | Für regelmäßige Backups ist '' | + | |
| <code bash> | <code bash> | ||
| Zeile 168: | Zeile 161: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| - | * '' | + | * '' |
| + | ====== Backupkonzept: | ||
| - | ===== Backup-Rotation | + | Ein Backup |
| - | Um mehrere Sicherungsstände zu behalten, wird eine einfache Rotation verwendet. | + | Damit ein Backup-Konzept zuverlässig funktioniert, muss es außerdem automatisiert werden. Andernfalls |
| - | Dabei werden | + | |
| + | ===== Backup-Rotation (Round Robin Prinzip) ===== | ||
| + | Beispiel mit **drei Generationen**: | ||
| - | Beispiel mit drei Generationen: | ||
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| + | set -euo pipefail | ||
| TARGET="/ | TARGET="/ | ||
| SOURCE="/ | SOURCE="/ | ||
| - | rm -rf $TARGET/ | + | rm -rf "$TARGET/ |
| - | mv $TARGET/ | + | [ -d " |
| - | mv $TARGET/ | + | [ -d " |
| - | rsync -a --delete $SOURCE/ $TARGET/ | + | rsync -a --delete |
| </ | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| Ergebnis: | Ergebnis: | ||
| - | * backup_1 → aktuelles Backup | + | * '' |
| - | * backup_2 → vorherige Version | + | * '' |
| - | * backup_3 → ältere Version | + | * '' |
| Bei jedem Lauf wird die älteste Version gelöscht und die anderen rücken nach. | Bei jedem Lauf wird die älteste Version gelöscht und die anderen rücken nach. | ||
| - | |||
| - | ----- | ||
| ===== Automatische Ausführung mit cron ===== | ===== Automatische Ausführung mit cron ===== | ||
| - | Damit das Backup regelmäßig ausgeführt wird, wird ein Cronjob eingerichtet. | + | Skript speichern, z.B. als ''/ |
| + | |||
| + | <code bash> | ||
| + | chmod +x / | ||
| + | </ | ||
| Crontab öffnen: | Crontab öffnen: | ||
| Zeile 211: | Zeile 212: | ||
| </ | </ | ||
| - | Beispiel: tägliches Backup um 22:00 Uhr | + | Beispiel: tägliches Backup um 22:00 Uhr: |
| <code bash> | <code bash> | ||
| Zeile 219: | Zeile 220: | ||
| Damit wird das Rotationsskript jeden Tag automatisch gestartet. | Damit wird das Rotationsskript jeden Tag automatisch gestartet. | ||
| - | ----- | + | < |
| - | + | **Ergebnis** | |
| - | ===== Ergebnis | + | |
| * Backups werden vom Client erzeugt | * Backups werden vom Client erzeugt | ||
| Zeile 228: | Zeile 228: | ||
| * Automatische Ausführung über cron | * Automatische Ausführung über cron | ||
| * Keine zusätzliche Backup-Software erforderlich | * Keine zusätzliche Backup-Software erforderlich | ||
| - | + | </ | |
| - | Damit steht ein einfaches, nachvollziehbares Backup-Konzept für den Kurs zur Verfügung. | + | |
project/backup.1772533544.txt.gz · Zuletzt geändert: von torsten.roehl
