Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:backup

Dies ist eine alte Version des Dokuments!


Projekt: Raspberry PI als Backupserver

☚ 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. 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

Der Server stellt zwei Verzeichnisse bereit:

  • /srv/nfs/public → nur lesend (ro)
  • /srv/nfs/data → lesend + schreibend (rw, Service-User 2000)

Für das Datenverzeichnis wird ein technischer Service-User mit der UID/GID 2000 eingerichtet. Alle Schreibzugriffe werden mittels all_squash auf diesen Benutzer umgeleitet. Dadurch gehören sämtliche erzeugten Dateien immer demselben Systemkonto – unabhängig davon, welcher Client sie erstellt hat.

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 /srv/nfs/data werden serverseitig auf UID/GID 2000 abgebildet (all_squash).

SERVER Die IP-Adresse des Servers wird hier mit IP gekennzeichnet und muss im Kurs durch die tatsächliche IP-Adresse ersetzt werden.

NFS SERVER

Im Kurs steht der Server bereits zur Verfügung, sodass es primär darum geht, ihn korrekt einzubinden. Wer einen eigenen NFS-Server aufsetzen möchte, findet hier die vollständige Einrichtung.

Einrichtung Server

NFS CLIENT

Um die Freigaben zu verwenden, wird auf dem Client zunächst das notwendige Paket installiert.

Verfügbare Exports anzeigen

sudo apt install -y nfs-common
showmount -e IP

Der Befehl zeigt an, welche Verzeichnisse der Server exportiert.

Manuell Mounten

Für einen ersten Test werden lokale Mountpunkte angelegt und die Freigaben manuell eingebunden.

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,soft,timeo=50,retrans=3 IP:/srv/nfs/data /mnt/data

Das Verzeichnis /mnt/public ist nur lesbar. Im Verzeichnis /mnt/data können Dateien erzeugt werden, die serverseitig immer UID/GID 2000 gehören.

Automatisch Mounten (/etc/fstab)

Damit der Client auch dann startet, wenn der Server nicht erreichbar ist, erfolgt die Einbindung per systemd-Automount in der /etc/fstab.

IP:/srv/nfs/public  /mnt/public  nfs  ro,_netdev,noatime,x-systemd.automount,nofail  0  0
IP:/srv/nfs/data    /mnt/data    nfs  rw,_netdev,noatime,x-systemd.automount,x-systemd.device-timeout=10s,x-systemd.idle-timeout=600,soft,timeo=50,retrans=3,nofail  0  0
 
sudo systemctl daemon-reload
sudo mount -a

Der Mount erfolgt nun erst beim ersten Zugriff. Ist der Server nicht erreichbar, blockiert der Bootvorgang nicht.

Ergebnis
  • /srv/nfs/public → nur lesbar für alle Clients
  • /srv/nfs/data → schreibbar, serverseitig UID/GID 2000
  • Client bootet auch wenn Server offline ist
  • Mount erfolgt erst bei Zugriff (automount)
  • Keine UID-Anpassung auf Clients erforderlich

Damit steht ein wartungsarmes Backup-System auf Basis eines Raspberry Pi zur Verfügung.

BACKUP ERSTELLEN

Der NFS-Server stellt lediglich den zentralen Speicher bereit. Die eigentlichen Backups werden auf den Clients erzeugt und anschließend in das Verzeichnis /mnt/data geschrieben.

Im Kurs werden zwei einfache Verfahren verwendet:

  1. scp → einfache Kopie
  2. rsync → inkrementelles Backup mit Rotation

Einfache Kopie mit scp

Mit scp kann ein Verzeichnis direkt auf das NFS-Share kopiert werden.

scp -r /home/pi/daten /mnt/data/backup_$(date +%Y-%m-%d)

Es wird ein datumsbasierter Ordner erzeugt. Dieses Verfahren kopiert immer alle Dateien vollständig.

Inkrementelles Backup mit rsync

Für regelmäßige Backups ist rsync effizienter, da nur geänderte Dateien übertragen werden.

rsync -a --delete /home/pi/daten/ /mnt/data/backup_aktuell/

Optionen:

  • -a → Archivmodus (Rechte, Zeitstempel, Links)
  • –delete → entfernt Dateien im Ziel, die im Quellverzeichnis nicht mehr existieren

Backup-Rotation (Round Robin Prinzip)

Um mehrere Sicherungsstände zu behalten, wird eine einfache Rotation verwendet. Dabei werden mehrere Backup-Ordner zyklisch überschrieben.

Beispiel mit drei Generationen:

#!/bin/bash
 
TARGET="/mnt/data"
SOURCE="/home/pi/daten"
 
rm -rf $TARGET/backup_3
mv $TARGET/backup_2 $TARGET/backup_3 2>/dev/null
mv $TARGET/backup_1 $TARGET/backup_2 2>/dev/null
 
rsync -a --delete $SOURCE/ $TARGET/backup_1

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.


Automatische Ausführung mit cron

Damit das Backup regelmäßig ausgeführt wird, wird ein Cronjob eingerichtet.

Crontab öffnen:

crontab -e

Beispiel: tägliches Backup um 22:00 Uhr

0 22 * * * /home/pi/backup.sh

Damit wird das Rotationsskript jeden Tag automatisch gestartet.


Ergebnis

  • 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

Damit steht ein einfaches, nachvollziehbares Backup-Konzept für den Kurs zur Verfügung.

project/backup.1772533468.txt.gz · Zuletzt geändert: von torsten.roehl