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 09:30] – torsten.roehl | project:backup [2026/03/03 10:51] (aktuell) – torsten.roehl | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Projekt: Raspberry PI als Backupserver ====== | ====== Projekt: Raspberry PI als Backupserver ====== | ||
| - | |||
| [[raspberry_pi: | [[raspberry_pi: | ||
| - | ===== Varianten des NFS-Betriebs ===== | + | //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.// | ||
| - | In diesem Projekt werden zwei einfache und praxisnahe Varianten behandelt. | + | ====== Konzept ====== |
| - | Eine dritte, klassische UNIX-Variante existiert ebenfalls, wird hier jedoch nicht umgesetzt. | + | |
| + | Der Server stellt zwei Verzeichnisse bereit: | ||
| - | ==== Variante A – Einheitlicher | + | * ''/ |
| + | * ''/ | ||
| - | Alle Zugriffe von Clients werden serverseitig auf eine feste UID/GID (hier 2000) abgebildet. | + | {{ : |
| - | Merkmale: | + | Für das Datenverzeichnis wird ein technischer Service-User mit der '' |
| - | * keine UID-/GID-Synchronisation zwischen Clients notwendig | + | Alle Schreibzugriffe werden mittels '' |
| - | | + | |
| - | | + | |
| - | * ideal für Backup- oder Sammelverzeichnisse | + | |
| - | * geeignet für kleine, vertrauenswürdige Netzwerke | + | |
| - | Diese Variante wird in diesem Projekt standardmäßig verwendet. | + | Dieses Modell verhindert UID-Konflikte zwischen unterschiedlichen Linux-Systemen im Netzwerk und sorgt für ein eindeutiges Besitzmodell auf dem Server. |
| + | Alle schreibenden Zugriffe auf ''/ | ||
| + | <note important> | ||
| + | **SERVER** | ||
| + | Die IP-Adresse des Servers wird hier mit '' | ||
| + | </ | ||
| - | ==== Variante B – Nur Lesen (read-only Export) | + | ====== NFS Server ====== |
| - | Der Server | + | Im Kurs steht der Server |
| + | Wer einen eigenen NFS-Server aufsetzen möchte, findet hier die vollständige Einrichtung. | ||
| - | Merkmale: | + | ++++ Einrichtung Server | |
| - | * Clients können keine Daten verändern | + | <code bash> |
| - | * hohe Betriebssicherheit | + | sudo apt update |
| - | * geeignet für Software-Repositories, | + | sudo apt install |
| - | * nicht geeignet als Backup-Ziel | + | |
| - | Diese Variante ist optional möglich und wird unten technisch gezeigt. | + | # Service-User für schreibendes Share |
| + | sudo groupadd -g 2000 nfsdata | ||
| + | sudo useradd -u 2000 -g 2000 -M -r nfsdata | ||
| + | # Verzeichnisse anlegen | ||
| + | sudo mkdir -p / | ||
| + | sudo mkdir -p / | ||
| + | # Rechte setzen | ||
| + | sudo chown -R root:root / | ||
| + | sudo chmod -R 755 / | ||
| - | ==== Variante C – Klassisches UNIX-Modell (nicht Bestandteil dieses Projekts) ==== | + | sudo chown -R 2000:2000 / |
| + | sudo chmod -R 2775 / | ||
| - | Hier arbeiten Server und Clients mit identischen UID/GID-Werten. | + | # ================================ |
| - | Der Server speichert echte Benutzer-IDs ohne Mapping. | + | # /etc/exports |
| + | # ================================ | ||
| - | Merkmale: | + | / |
| - | * saubere Benutzertrennung | + | / |
| - | * ACLs und klassische UNIX-Rechte funktionieren vollständig | + | |
| - | * erfordert konsistente Benutzerverwaltung auf allen Systemen | + | |
| - | * administrativ aufwendiger | + | |
| - | Diese Variante wird hier bewusst nicht behandelt, da der Fokus auf einem einfachen, | + | # anwenden |
| - | wartungsarmen Backup-Server liegt. | + | sudo exportfs |
| + | sudo systemctl restart nfs-kernel-server | ||
| + | sudo systemctl enable nfs-kernel-server | ||
| + | # prüfen | ||
| + | sudo exportfs -v | ||
| + | </ | ||
| + | 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. | ||
| + | ++++ | ||
| - | ===== Voraussetzungen | + | ====== NFS Client ====== |
| - | * SERVER: Mit '' | + | |
| - | * CLIENT: Rechner, der das exportierte Verzeichnis vom Server einbindet. | + | |
| + | Um die Freigaben zu verwenden, wird auf dem Client zunächst das notwendige Paket installiert. | ||
| - | + | ===== Verfügbare Exports anzeigen | |
| - | ===== NFS SERVER | + | |
| <code bash> | <code bash> | ||
| - | sudo apt update | + | sudo apt install -y nfs-common |
| - | sudo apt install -y nfs-kernel-server | + | showmount |
| + | </ | ||
| - | # Service-User (nur für Variante A notwendig) | + | Der Befehl zeigt an, welche Verzeichnisse der Server exportiert. |
| - | sudo groupadd -g 2000 nfsdata | + | |
| - | sudo useradd -u 2000 -g 2000 -M -r nfsdata | + | |
| - | # Export-Verzeichnis | + | ===== Manuell Mounten ===== |
| - | sudo mkdir -p /srv/nfs/data | + | |
| - | sudo chown -R 2000:2000 /srv/nfs/data | + | Für einen ersten Test werden lokale Mountpunkte angelegt und die Freigaben manuell eingebunden. |
| - | sudo chmod -R 2775 / | + | |
| + | <code bash> | ||
| + | sudo mkdir -p /mnt/public | ||
| + | sudo mkdir -p /mnt/data | ||
| + | |||
| + | sudo mount -t nfs -o ro IP:/srv/nfs/public /mnt/public | ||
| + | sudo mount -t nfs -o rw, | ||
| </ | </ | ||
| + | Das Verzeichnis ''/ | ||
| + | Im Verzeichnis ''/ | ||
| - | ==== Variante A – Schreibend mit Service-User | + | ===== Automatisch Mounten (/ |
| + | |||
| + | Damit der Client auch dann startet, wenn der Server nicht erreichbar ist, erfolgt die Einbindung per systemd-Automount in der ''/ | ||
| <code bash> | <code bash> | ||
| - | # /etc/exports | + | IP:/srv/nfs/ |
| + | IP:/ | ||
| - | /srv/ | + | sudo systemctl daemon-reload |
| + | sudo mount -a | ||
| + | </code> | ||
| - | # anwenden | + | Der Mount erfolgt nun erst beim ersten Zugriff. |
| - | sudo exportfs -ra | + | Ist der Server nicht erreichbar, blockiert der Bootvorgang nicht. |
| - | sudo systemctl restart nfs-kernel-server | + | |
| - | sudo systemctl enable nfs-kernel-server | + | |
| - | # prüfen | + | <note>**Ergebnis** |
| - | sudo exportfs -v | + | |
| - | </code> | + | |
| + | * / | ||
| + | * / | ||
| + | * Client bootet auch wenn Server offline ist | ||
| + | * Mount erfolgt erst bei Zugriff (automount) | ||
| + | * Keine UID-Anpassung auf Clients erforderlich | ||
| - | ==== Variante B – Nur Lesen ==== | + | Damit steht ein wartungsarmes Backup-System auf Basis eines **Raspberry Pi** zur Verfügung. |
| + | </ | ||
| - | <code bash> | + | ====== Backup erstellen ====== |
| - | # / | + | |
| - | /srv/nfs/data | + | Der NFS-Server stellt lediglich den zentralen Speicher bereit. |
| + | Die eigentlichen Backups werden auf den Clients erzeugt und anschließend in das Verzeichnis '' | ||
| - | # anwenden | + | Im Kurs werden zwei einfache Verfahren verwendet: |
| - | sudo exportfs -ra | + | |
| - | sudo systemctl restart nfs-kernel-server | + | |
| - | sudo systemctl enable nfs-kernel-server | + | |
| - | # prüfen | + | * '' |
| - | sudo exportfs | + | * '' |
| + | |||
| + | ===== Einfache Kopie mit scp ===== | ||
| + | |||
| + | <code bash> | ||
| + | core) torsten@hiketas: | ||
| + | 2026-03-03_11-50-46 | ||
| </ | </ | ||
| + | <code bash> | ||
| + | scp -r / | ||
| + | </ | ||
| + | Es wird ein datumsbasierter Ordner erzeugt. | ||
| + | Dieses Verfahren kopiert immer alle Dateien vollständig. | ||
| - | ===== NFS CLIENT ===== | ||
| - | ==== Verfügbare Exports anzeigen | + | < |
| + | ===== Inkrementelles Backup mit rsync ===== | ||
| <code bash> | <code bash> | ||
| - | sudo apt install | + | rsync -a --delete / |
| - | showmount | + | |
| </ | </ | ||
| + | Optionen: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ====== Backupkonzept: | ||
| + | |||
| + | Ein Backup ist gut – mehrere Sicherungsstände sind besser. Ein verbreitetes Verfahren ist die **Rotation nach dem Round-Robin-Prinzip**. Dabei werden mehrere Backup-Ordner zyklisch überschrieben. So stehen mehrere Generationen zur Verfügung, ohne dass der Speicherplatz unbegrenzt wächst. | ||
| + | |||
| + | Damit ein Backup-Konzept zuverlässig funktioniert, | ||
| + | |||
| + | ===== Backup-Rotation (Round Robin Prinzip) ===== | ||
| + | Beispiel mit **drei Generationen**: | ||
| - | ==== Manuell Mounten ==== | ||
| <code bash> | <code bash> | ||
| - | sudo mkdir -p /mnt/nfs | + | # |
| - | sudo mount -t nfs -o rw, | + | set -euo pipefail |
| + | |||
| + | TARGET=" | ||
| + | SOURCE="/ | ||
| + | |||
| + | rm -rf " | ||
| + | [ -d " | ||
| + | [ -d " | ||
| + | |||
| + | rsync -a --delete " | ||
| </ | </ | ||
| + | {{ : | ||
| - | ==== Automatisch Mounten | + | |
| + | Ergebnis: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Bei jedem Lauf wird die älteste Version gelöscht und die anderen rücken nach. | ||
| + | |||
| + | ===== Automatische Ausführung mit cron ===== | ||
| + | |||
| + | Skript speichern, z.B. als ''/ | ||
| <code bash> | <code bash> | ||
| - | # /etc/fstab | + | chmod +x /home/pi/ |
| + | </ | ||
| - | IP:/ | + | Crontab öffnen: |
| - | sudo systemctl daemon-reload | + | <code bash> |
| - | sudo mount -a | + | crontab |
| </ | </ | ||
| + | Beispiel: tägliches Backup um 22:00 Uhr: | ||
| - | ===== Ergebnis ===== | + | <code bash> |
| + | 0 22 * * * / | ||
| + | </ | ||
| - | | + | Damit wird das Rotationsskript jeden Tag automatisch gestartet. |
| - | * Variante B: Reiner Lesezugriff | + | |
| - | * Client bootet auch wenn Server | + | < |
| - | * Mount erfolgt erst bei Zugriff (automount) | + | **Ergebnis** |
| - | * Kein Boot-Blockieren | + | |
| - | * Exportierte Verzeichnisse prüfbar mit '' | + | * Backups werden vom Client erzeugt |
| + | * Speicherung erfolgt zentral auf dem NFS-Server | ||
| + | * Mehrere Sicherungsstände durch Rotation | ||
| + | * Automatische Ausführung über cron | ||
| + | * Keine zusätzliche Backup-Software erforderlich | ||
| + | </ | ||
project/backup.1772530237.txt.gz · Zuletzt geändert: von torsten.roehl
