Backup-Script für Home-Verzeichnis, Paketliste und Emails. Erstellt rotierende Backups (max. 10 Stück) mit zstd-Kompression (MultiCPU – deutlich schneller als tar).
Erstellen einer neuer Datei mit Nano.
nano ~/.local/bin/backup-home.fish
Kopiere den folgenden Code in die neue Datei.
#!/usr/bin/env fish
# Backup-Script für Home-Verzeichnis, Paketliste und Emails
# Erstellt rotierende Backups (max. 10 Stück) mit zstd-Kompression
set BACKUP_DIR "/mnt/d4a1646f-a41f-4d91-b95e-53b6beab7027/07_Data/cf"
set TIMESTAMP (date +%Y%m%d_%H%M%S)
set BACKUP_NAME "home_backup_$TIMESTAMP"
# Backup-Verzeichnis erstellen
mkdir -p $BACKUP_DIR
# Paketliste sichern
pacman -Qqe > "$BACKUP_DIR/package_list_$TIMESTAMP.txt"
# Home-Verzeichnis sichern mit zstd (multicore)
tar --zstd \
--exclude=".cache" \
--exclude=".local/share/Trash" \
--exclude=".local/share/baloo" \
--exclude="Downloads" \
--exclude=".steam" \
--exclude=".local/share/Steam" \
--exclude=".local/share/lutris" \
--exclude=".wine" \
--exclude=".local/share/bottles" \
--exclude="node_modules" \
--exclude=".npm" \
--exclude=".cargo/registry" \
--exclude=".rustup" \
--exclude=".cache/yay" \
--exclude=".cache/pacman" \
--exclude=".cache/paru" \
--exclude=".local/backups" \
-cf "$BACKUP_DIR/$BACKUP_NAME.tar.zst" -C $HOME .
# Emails synchronisieren (Thunderbird und andere gängige Clients)
if test -d "$HOME/.thunderbird"
mkdir -p "$BACKUP_DIR/emails/thunderbird"
rsync -av --delete "$HOME/.thunderbird/" "$BACKUP_DIR/emails/thunderbird/"
end
if test -d "$HOME/.local/share/evolution"
mkdir -p "$BACKUP_DIR/emails/evolution"
rsync -av --delete "$HOME/.local/share/evolution/" "$BACKUP_DIR/emails/evolution/"
end
if test -d "$HOME/.config/geary"
mkdir -p "$BACKUP_DIR/emails/geary"
rsync -av --delete "$HOME/.config/geary/" "$BACKUP_DIR/emails/geary/"
end
# Alte Backups löschen (nur die letzten 10 behalten)
cd $BACKUP_DIR
ls -t home_backup_*.tar.zst 2>/dev/null | tail -n +11 | xargs -r rm
ls -t package_list_*.txt 2>/dev/null | tail -n +11 | xargs -r rm
# Alte Email-Backups löschen (nur die letzten 10 behalten)
if test -d "$BACKUP_DIR/emails"
ls -td "$BACKUP_DIR/emails"/*/ 2>/dev/null | tail -n +11 | xargs -r rm -rf
end
# Log-Eintrag
echo (date): Backup erstellt: $BACKUP_NAME.tar.zst >> "$BACKUP_DIR/backup.log"
echo (date): Emails synchronisiert >> "$BACKUP_DIR/backup.log"
Mit „Strg+O“ (und Return) kannst du die Änderungen speichern. „Strg+X“ verlässt du Nano wieder.
Schritt-für-Schritt-Anleitung zur Einrichtung der Automatisierung
1. Skript ausführbar machen
Stelle sicher, dass dein Skript die nötigen Rechte hat, um ausgeführt zu werden.
chmod +x /home/cf/.local/bin/backup-home.fish
Es ist auch eine gute Praxis, am Anfang deines Fish-Skripts einen Shebang zu setzen, falls noch nicht vorhanden: #!/usr/bin/fish
.
2. Service-Datei erstellen
Erstelle die Datei am richtigen Ort. Der Ordner muss eventuell erst angelegt werden. Öffne die Datei mit einem Editor und füge den oben korrigierten Inhalt ein:
# Ordner anlegen falls nicht vorhanden.
mkdir -p ~/.config/systemd/user/
# Datei in Nano erstellen
nano ~/.config/systemd/user/backup-home.service
Öffne die Datei mit einem Editor und füge den folgenden Inhalt ein:
[Unit]
Description=Backup home directory on login
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=/home/cf/.local/bin/backup-home.fish
RemainAfterExit=yes
[Install]
WantedBy=default.target
3. User-Service aktivieren
Jetzt kommt der wichtigste Befehl. Wir benutzen systemctl
mit dem --user
Flag. Das sagt systemd, dass es im Kontext deines Benutzers und nicht des Systems arbeiten soll.
systemctl --user enable --now backup-home.service
--user
: Arbeitet mit den User-Units in~/.config/systemd/user/
.enable
: Sorgt dafür, dass der Service bei jedem zukünftigen Login automatisch gestartet wird.--now
: Startet den Service sofort zum ersten Mal. Das ist super zum Testen!
4. Überprüfen (optional, aber empfohlen)
Du kannst jederzeit den Status deines Services prüfen:
systemctl --user status backup-home.service
Manuell ausführen:
~/.local/bin/backup-home.fish
Deaktivieren
systemctl --user disable backup-home.service
Wenn alles geklappt hat, sollte dort „active (exited)“ stehen und die letzten Log-Einträge deines Skripts angezeigt werden.
Das war’s! Ab jetzt wird bei jedem Login dein Backup-Skript zuverlässig im Hintergrund ausgeführt.