Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:backup

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
project:backup [2026/03/03 10:23] torsten.roehlproject:backup [2026/03/03 10:51] (aktuell) torsten.roehl
Zeile 2: Zeile 2:
 [[raspberry_pi:einstiegskurs_raspberry_pi|  ☚ zurück - Einstiegskurs]] [[raspberry_pi:einstiegskurs_raspberry_pi|  ☚ zurück - Einstiegskurs]]
  
-//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. {{ :raspberry_pi:nfs_2.png?300|}}+//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. {{ :raspberry_pi:nfs_2.png?250|}}
 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:
   * ''/srv/nfs/data''    → lesend + schreibend (''rw'', Service-User 2000)   * ''/srv/nfs/data''    → lesend + schreibend (''rw'', Service-User 2000)
  
-{{ :raspberry_pi:nfs1.png?500 |}} +{{ :raspberry_pi:nfs1.png?400 |}}
  
 Für das Datenverzeichnis wird ein technischer Service-User mit der ''UID/GID'' **2000** eingerichtet.   Für das Datenverzeichnis wird ein technischer Service-User mit der ''UID/GID'' **2000** eingerichtet.  
Zeile 21: Zeile 20:
  
 Alle schreibenden Zugriffe auf ''/srv/nfs/data'' werden serverseitig auf ''UID/GID'' **2000** abgebildet (''all_squash''). Alle schreibenden Zugriffe auf ''/srv/nfs/data'' werden serverseitig auf ''UID/GID'' **2000** abgebildet (''all_squash'').
- 
- 
  
 <note important> <note important>
Zeile 29: Zeile 26:
 </note> </note>
  
- +====== 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 /srv/nfs/data sudo chown -R 2000:2000 /srv/nfs/data
 sudo chmod -R 2775 /srv/nfs/data sudo chmod -R 2775 /srv/nfs/data
- 
  
 # ================================ # ================================
Zeile 63: Zeile 57:
 /srv/nfs/public  IP/24(ro,sync,no_subtree_check,root_squash) /srv/nfs/public  IP/24(ro,sync,no_subtree_check,root_squash)
 /srv/nfs/data    IP/24(rw,sync,no_subtree_check,all_squash,root_squash,anonuid=2000,anongid=2000) /srv/nfs/data    IP/24(rw,sync,no_subtree_check,all_squash,root_squash,anonuid=2000,anongid=2000)
- 
  
 # anwenden # anwenden
Zeile 73: Zeile 66:
 sudo exportfs -v sudo exportfs -v
 </code> </code>
- 
  
 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:
 </note> </note>
  
- +====== Backup erstellen ======
-====== BACKUP ERSTELLEN =======+
  
 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:
-  - ''scp''  → einfache Kopie 
-  - ''rsync'' → inkrementelles Backup mit Rotation 
  
-==== Einfache Kopie mit scp ==== +  * ''scp''   → einfache vollständige Kopie 
-Mit ''scp'' kann ein Verzeichnis direkt auf das NFS-Share kopiert werden.+  * ''rsync'' → effizientes inkrementelles Backup 
 +  
 +===== Einfache Kopie mit scp =====
  
 <code bash> <code bash>
-scp -r /home/pi/daten /mnt/data/backup_$(date +%Y-%m-%d)+core) torsten@hiketas:~ $ date +%Y-%m-%d_%H-%M-%S 
 +2026-03-03_11-50-46 
 +</code> 
 + 
 +<code bash> 
 +scp -r /home/pi/daten /mnt/data/backup_$(date +%Y-%m-%d_%H-%M-%S)
 </code> </code>
  
Zeile 155: Zeile 150:
  
  
- +<note>Da das Verzeichnis mit ''nfs'' gemountet ist, wäre technisch auch ein einfaches ''cp'' ausreichend. Im Kurs wird jedoch zusätzlich ''scp'' verwendet, um zu zeigen, wie Backups auf andere Rechner übertragen werden können, die nicht per NFS eingebunden sind.</note> 
-==== Inkrementelles Backup mit rsync ==== +===== Inkrementelles Backup mit rsync =====
- +
-Für regelmäßige Backups ist ''rsync'' effizienter, da nur geänderte Dateien übertragen werden.+
  
 <code bash> <code bash>
Zeile 168: Zeile 161:
   * ''-a'' → Archivmodus (Rechte, Zeitstempel, Links)   * ''-a'' → Archivmodus (Rechte, Zeitstempel, Links)
   * ''--delete'' → entfernt Dateien im Ziel, die im Quellverzeichnis nicht mehr existieren   * ''--delete'' → entfernt Dateien im Ziel, die im Quellverzeichnis nicht mehr existieren
 +  * ''--dry-run''  führt **rsync** als Simulation aus und zeigt an, welche Änderungen vorgenommen würden, ohne tatsächlich Dateien zu kopieren oder zu löschen.
  
 +====== Backupkonzept: Rotation und Automatisierung ======
  
-===== Backup-Rotation (Round Robin Prinzip) =====+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.
  
-Um mehrere Sicherungsstände zu behalten, wird eine einfache Rotation verwendet  +Damit ein Backup-Konzept zuverlässig funktioniertmuss es außerdem automatisiert werden. Andernfalls wird es im Alltag häufig vergessen. Hierfür verwenden wir ''cron'', ein Standardwerkzeug zur zeitgesteuerten Ausführung von Aufgaben
-Dabei werden mehrere Backup-Ordner zyklisch überschrieben.+ 
 +===== Backup-Rotation (Round Robin Prinzip) ===== 
 +Beispiel mit **drei Generationen**: Dabei werden drei Sicherungsstände verwaltet, wobei bei jedem Durchlauf die älteste Sicherung gelöscht, die beiden vorhandenen um eine Position nach hinten verschoben und anschließend ein neues aktuelles Backup erzeugt wird.
  
-Beispiel mit drei Generationen: 
  
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
 +set -euo pipefail
  
 TARGET="/mnt/data" TARGET="/mnt/data"
 SOURCE="/home/pi/daten" SOURCE="/home/pi/daten"
  
-rm -rf $TARGET/backup_3 +rm -rf "$TARGET/backup_3" 
-mv $TARGET/backup_2 $TARGET/backup_3 2>/dev/null +[ -d "$TARGET/backup_2" ] && mv "$TARGET/backup_2" "$TARGET/backup_3" || true 
-mv $TARGET/backup_1 $TARGET/backup_2 2>/dev/null+[ -d "$TARGET/backup_1" ] && mv "$TARGET/backup_1" "$TARGET/backup_2" || true
  
-rsync -a --delete $SOURCE/ $TARGET/backup_1+rsync -a --delete "$SOURCE/" "$TARGET/backup_1/"
 </code> </code>
 +
 +{{ :raspberry_pi:backup_1.png?400 |}}
 +
  
 Ergebnis: Ergebnis:
  
-  * backup_1 → aktuelles Backup +  * ''backup_1'' → aktuelles Backup 
-  * backup_2 → vorherige Version +  * ''backup_2'' → vorherige Version 
-  * backup_3 → ältere 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 wirdwird ein Cronjob eingerichtet.+Skript speichernz.B. als ''/home/pi/backup.sh'': 
 + 
 +<code bash> 
 +chmod +x /home/pi/backup.sh 
 +</code>
  
 Crontab öffnen: Crontab öffnen:
Zeile 210: Zeile 212:
 </code> </code>
  
-Beispiel: tägliches Backup um 22:00 Uhr+Beispiel: tägliches Backup um 22:00 Uhr:
  
 <code bash> <code bash>
Zeile 218: Zeile 220:
 Damit wird das Rotationsskript jeden Tag automatisch gestartet. Damit wird das Rotationsskript jeden Tag automatisch gestartet.
  
------ +<note> 
- +**Ergebnis**
-===== Ergebnis =====+
  
   * Backups werden vom Client erzeugt   * Backups werden vom Client erzeugt
Zeile 227: Zeile 228:
   * Automatische Ausführung über cron   * Automatische Ausführung über cron
   * Keine zusätzliche Backup-Software erforderlich   * Keine zusätzliche Backup-Software erforderlich
- +</note>
-Damit steht ein einfaches, nachvollziehbares Backup-Konzept für den Kurs zur Verfügung. +
project/backup.1772533436.txt.gz · Zuletzt geändert: von torsten.roehl