Skip to main content

💾 Backup/Restore

Home-Verzeichnis per rsync auf einen externen Datenträger sichern oder wiederherstellen

  • Beispielpfad: /mnt/ext-nvme/Backup/jo/
  • Ziel-Dateisystem sollte ACLs und xattrs unterstützen (z.B. ext4 oder btrfs)
  • siehe auch: Linux -> TRIM & ext4-Speicherfreigabe -> Externe NVMe-SSD in fstab einbinden

Diese Anleitung zeigt, wie das Home-Verzeichnis eines Benutzers (/home/USERNAME) mit rsync auf eine externe SSD gesichert und bei Bedarf daraus wiederhergestellt werden kann.

rsync eignet sich dafür besonders gut, weil es Dateien zuverlässig kopiert und dabei wichtige Eigenschaften wie Dateirechte, Besitzer, Zeitstempel, symbolische Links, ACLs und erweiterte Attribute erhält. Dadurch bleibt das Home-Verzeichnis nach dem Kopieren vollständig und funktionsfähig.


Backup: Home-Verzeichnis auf externe SSD sichern

sudo rsync -aAX --exclude='.cache/' --info=progress2 /home/jo/ /mnt/ext-nvme/Backup/jo/

Dieser Befehl kopiert den Inhalt von /home/jo/ auf das externe Laufwerk in das Verzeichnis /mnt/ext-nvme/Backup/jo/.

Parameter-Erklärung:

  • sudo → Führt den Befehl mit Root-Rechten aus (wichtig für Besitzer & Rechte)
  • rsync → Werkzeug zum Synchronisieren/Kopieren von Dateien
  • -a → Archivmodus (rekursiv + erhält Rechte, Besitzer, Zeitstempel, Links)
  • -A → Erhält ACLs (Access Control Lists)
  • -X → Erhält erweiterte Attribute (xattrs)
  • -H → Optional zusätzlich nutzbar zum Erhalt von Hardlinks, erhöht jedoch Speicherbedarf und Laufzeit beim Backup (im Home-Verzeichnis selten relevant)
  • -v → Optional zusätzlich nutzbar für ausführliche Ausgabe (verbose), erzeugt jedoch mehr Ausgaben in der Konsole
  • --exclude='.cache/' → Schließt den Cache-Ordner vom Backup aus
  • --info=progress2 → Zeigt den Gesamtfortschritt des Transfers an
  • /home/jo/ → Quelle (Inhalt des Home-Verzeichnisses)
  • /mnt/ext-nvme/Backup/jo/ → Ziel (Backup auf externer SSD)

Restore: Home-Verzeichnis aus Backup synchronisieren

Info: Einzelne Dateien können bei Bedarf auch direkt mit einem Dateibrowser aus dem Backup wiederhergestellt werden.

sudo rsync -aAX --exclude='.cache/' --info=progress2 /mnt/ext-nvme/Backup/jo/ /home/jo/

Dieser Befehl synchronisiert den Inhalt des Backups von der externen SSD nach /home/jo/.

Dabei werden Dateien aus dem Backup übernommen. Vorhandene Dateien im Ziel werden bei Abweichungen überschrieben. Dateien, die nur im Ziel vorhanden sind und nicht im Backup enthalten sind, bleiben jedoch erhalten.

⚠️ Achtung

Dieser Befehl stellt das Home-Verzeichnis nicht vollständig auf den Stand des Backups zurück.
Dateien, die nur im Zielverzeichnis vorhanden sind, bleiben bestehen.


Vollständiger Restore

Für einen vollständigen Restore auf den Stand des Backups kann zusätzlich --delete verwendet werden:

sudo rsync -aAX --delete --exclude='.cache/' --info=progress2 /mnt/ext-nvme/Backup/jo/ /home/jo/

Dabei werden im Zielverzeichnis alle Dateien entfernt, die nicht im Backup enthalten sind.
Das Ergebnis entspricht anschließend dem Zustand des Backups.


Tipp

Vor einem Restore kann ein Testlauf mit --dry-run durchgeführt werden:

sudo rsync -aAXv --exclude='.cache/' --info=progress2 --dry-run /mnt/ext-nvme/Backup/jo/ /home/jo/

Es werden dabei alle geplanten Änderungen angezeigt, ohne dass tatsächlich Dateien kopiert oder gelöscht werden.
-v ist optional und zeigt zusätzlich detaillierte Dateiausgaben.


Hinweis

  • jo ist nur ein Beispiel. Benutzername und Pfade müssen an das eigene System angepasst werden.
  • /mnt/ext-nvme/Backup/jo/ ist nur ein Beispielpfad. Verwende den tatsächlichen Einhängepunkt und Ordnernamen des eingebundenen Laufwerks.
  • Der Slash am Ende eines Pfads ist wichtig:
    • /home/jo/ kopiert den Inhalt des Verzeichnisses
    • /home/jo kopiert das Verzeichnis selbst
  • --exclude='.cache/' schließt den Cache-Ordner aus, um Speicherplatz zu sparen und unnötige temporäre Dateien nicht mitzusichern.
  • Die Verwendung von sudo ist sinnvoll, damit Dateirechte, Besitzer und erweiterte Attribute korrekt übernommen werden.
  • Ohne --delete werden im Ziel keine Dateien entfernt, die in der Quelle nicht mehr vorhanden sind. Dadurch entsteht kein exakter Spiegel der Quelle.

Ein einfaches, robustes Bash-Script mit Statusmeldungen für manuelle Backups oder den Start per Autostart:

#!/bin/bash
set -euo pipefail

# =========================
# backup_home.sh
# V2026-03-18
# =========================

SOURCE="/home/jo/"
DEST="/mnt/ext-nvme/Backup/jo/"
MOUNTPOINT="/mnt/ext-nvme"
EXCLUDES=(--exclude=.cache/)

# Optional: aktivieren für Testlauf
DRYRUN=()   # → für Testlauf: DRYRUN=(--dry-run)

# =========================
# Startmeldung
# =========================
echo "========================================"
echo "💾 Starte Backup..."
echo "Quelle: $SOURCE"
echo "Ziel:   $DEST"
echo "Zeit:   $(date)"
echo "========================================"

# UX: Hinweis bei Dry-Run
if [ ${#DRYRUN[@]} -ne 0 ]; then
    echo "⚠️ DRY-RUN aktiv – es werden keine Änderungen durchgeführt!"
    echo ""
fi

# =========================
# Prüfungen
# =========================

# Root prüfen
if [ "$EUID" -ne 0 ]; then
    echo "❌ Bitte als root ausführen (z.B. mit: sudo bash backup_home.sh)"
    exit 1
fi

# rsync vorhanden?
command -v rsync >/dev/null 2>&1 || {
    echo "❌ rsync ist nicht installiert!"
    exit 1
}

# Quelle vorhanden?
if [ ! -d "$SOURCE" ]; then
    echo "❌ Quellverzeichnis existiert nicht!"
    exit 1
fi

# Ziel vorhanden?
if [ ! -d "$DEST" ]; then
    echo "❌ Zielverzeichnis existiert nicht!"
    echo "👉 Bitte prüfen: $DEST"
    exit 1
fi

# Mount prüfen (sehr wichtig!)
if ! mountpoint -q "$MOUNTPOINT"; then
    echo "❌ Ziel-Laufwerk ist nicht gemountet!"
    echo "👉 Erwartet: $MOUNTPOINT"
    exit 1
fi

# =========================
# Backup
# =========================
echo "🔄 Backup läuft..."
echo ""

rsync -aAX "${DRYRUN[@]}" "${EXCLUDES[@]}" --info=progress2 "$SOURCE" "$DEST"

# =========================
# Fertig
# =========================
echo ""
echo "========================================"
echo "✅ Backup erfolgreich abgeschlossen!"
echo "Zeit: $(date)"
echo "========================================"
exec bash

⚠️ Wichtig

Das Script mit Root-Rechten ausführen:

sudo bash backup_home.sh

Alternativ kann es ausführbar gemacht und direkt gestartet werden:

chmod +x backup_home.sh
sudo ./backup_home.sh

Beispiel: KDE Shortcut backup_home.desktop
(Benutzername anpassen)

[Desktop Entry]
Comment[de_DE]=
Comment=
Exec=konsole -e bash -c "sudo /home/jo/bin/backup_home.sh"
GenericName[de_DE]=
GenericName=
Icon=backup
MimeType=
Name[de_DE]=backup_home
Name=backup_home
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=