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:20] – torsten.roehl | project:backup [2026/03/03 10:51] (aktuell) – torsten.roehl | ||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| [[raspberry_pi: | [[raspberry_pi: | ||
| - | //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 29: | Zeile 26: | ||
| </ | </ | ||
| - | + | ====== NFS Server | |
| - | + | ||
| - | ====== NFS SERVER | + | |
| Im Kurs steht der Server bereits zur Verfügung, sodass es primär darum geht, ihn korrekt einzubinden. | Im Kurs steht der Server bereits zur Verfügung, sodass es primär darum geht, ihn korrekt einzubinden. | ||
| 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 | + | |
| Um die Freigaben zu verwenden, wird auf dem Client zunächst das notwendige Paket installiert. | Um die Freigaben zu verwenden, wird auf dem Client zunächst das notwendige Paket installiert. | ||
| Zeile 134: | Zeile 125: | ||
| </ | </ | ||
| - | + | ====== | |
| - | ====== | + | |
| - | + | ||
| - | + | ||
| - | ===== Backups mit scp und rsync ===== | + | |
| Der NFS-Server stellt lediglich den zentralen Speicher bereit. | Der NFS-Server stellt lediglich den zentralen Speicher bereit. | ||
| Zeile 145: | Zeile 132: | ||
| Im Kurs werden zwei einfache Verfahren verwendet: | Im Kurs werden zwei einfache Verfahren verwendet: | ||
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| + | |||
| + | ===== Einfache Kopie mit scp ===== | ||
| - | ----- | + | <code bash> |
| - | + | core) torsten@hiketas: | |
| - | ==== Einfaches Backup mit scp ==== | + | 2026-03-03_11-50-46 |
| - | + | </ | |
| - | Mit '' | + | |
| <code bash> | <code bash> | ||
| - | scp -r / | + | scp -r / |
| </ | </ | ||
| Zeile 161: | Zeile 149: | ||
| Dieses Verfahren kopiert immer alle Dateien vollständig. | Dieses Verfahren kopiert immer alle Dateien vollständig. | ||
| - | ----- | ||
| - | |||
| - | ==== Inkrementelles Backup mit rsync ==== | ||
| - | Für regelmäßige Backups | + | < |
| + | ===== Inkrementelles Backup mit rsync ===== | ||
| <code bash> | <code bash> | ||
| Zeile 175: | 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 218: | Zeile 212: | ||
| </ | </ | ||
| - | Beispiel: tägliches Backup um 22:00 Uhr | + | Beispiel: tägliches Backup um 22:00 Uhr: |
| <code bash> | <code bash> | ||
| Zeile 226: | 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 235: | 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.1772533255.txt.gz · Zuletzt geändert: von torsten.roehl
