💾 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
joist 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/jokopiert 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
sudoist sinnvoll, damit Dateirechte, Besitzer und erweiterte Attribute korrekt übernommen werden.- Ohne
--deletewerden 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.shAlternativ 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=