Automatisches USB-Backup mit `rsync` beim Anstecken

Automatisches USB-Backup mit `rsync` beim Anstecken

2. April 2026 20:00 · Linux


Seit Neuestem nutze ich Nextcloud, um meine Dateien zentral zu verwalten und zwischen meinen Geräten synchron zu halten. Gerade weil das für mich eine praktische Cloud-Lösung ist, wollte ich zusätzlich noch eine separate Sicherung haben.

Das automatische Backup direkt beim Anstecken des USB-Sticks empfinde ich dafür als eine richtig gute Lösung: USB-Stick einstecken, Backup startet automatisch, geänderte Dateien werden synchronisiert, Stick wieder abziehen.

Die Lösung dafür habe ich unter Linux mit einer Kombination aus udev, systemd und rsync umgesetzt.


Warum ich das so haben wollte

Nextcloud ist praktisch, weil die Daten auf mehreren Geräten verfügbar sind und man vieles bequem synchron halten kann. Trotzdem ersetzt das für mich kein zusätzliches Backup.

Ich wollte deshalb eine Lösung, die:

  • lokal funktioniert
  • ohne Cloud-Dienst für das Backup auskommt
  • nur geänderte Dateien kopiert
  • automatisch startet, sobald der richtige USB-Stick eingesteckt wird

Gerade für meinen Nextcloud-Ordner ist das angenehm, weil ich nicht jedes Mal manuell einen Befehl starten oder erst daran denken muss.


Die Grundidee

Sobald der USB-Stick eingesteckt wird, erkennt udev das Gerät. Darüber wird ein systemd-Service gestartet, der wiederum ein kleines Skript ausführt.

Dieses Skript:

  • mountet den Stick
  • startet rsync
  • kopiert nur die Änderungen
  • hängt den Stick danach wieder aus

Das Ziel ist also kein kompliziertes Backup-System mit Oberfläche, sondern ein schlanker Ablauf, der im Alltag einfach funktioniert.


Warum rsync dafür gut passt

Ich mag rsync für solche Aufgaben, weil es unter Linux sehr zuverlässig ist und nicht jedes Mal stumpf alle Dateien neu kopiert.

Dadurch hat die Lösung ein paar klare Vorteile:

  • schnelle Synchronisation bei kleinen Änderungen
  • wenig unnötige Schreibvorgänge auf dem Stick
  • saubere Spiegelung des Quellordners
  • mit --delete bleibt das Ziel konsistent

Gerade wenn sich im Nextcloud-Ordner häufig nur einzelne Dateien ändern, spart das Zeit und Schreiblast.


Technischer Aufbau

Der Ablauf sieht bei mir grob so aus:

  1. Der USB-Stick bekommt ein Linux-Dateisystem wie ext4.
  2. Über die UUID wird sichergestellt, dass wirklich nur dieser eine Stick verwendet wird.
  3. Ein Skript unter /usr/local/bin/ mountet den Stick nach /mnt/usb-backup.
  4. Danach synchronisiert rsync den gewünschten Quellordner auf den Stick.
  5. Wenn alles fertig ist, wird der Datenträger wieder ausgehängt.

Zusätzlich schreibe ich den Ablauf in eine Logdatei, damit sich Fehler schnell nachvollziehen lassen.


Anleitung zur Umsetzung

Wer das unter Linux ähnlich umsetzen möchte, kann das mit ein paar einfachen Schritten tun.

1. USB-Stick vorbereiten

Zuerst sollte der Stick mit einem Linux-Dateisystem wie ext4 formatiert werden. Das ist in so einem Setup deutlich zuverlässiger als typische FAT-Varianten.

Mit lsblk lässt sich zuerst prüfen, welches Gerät der Stick ist:

lsblk

Anschließend kann eine Partition angelegt und formatiert werden:

sudo fdisk /dev/sdX
sudo mkfs.ext4 /dev/sdX1

Optional kann man dem Stick noch ein Label geben:

sudo e2label /dev/sdX1 USB_BACKUP

Danach sollte man sich mit blkid die UUID notieren:

blkid

2. Mountpoint anlegen

Damit der Stick sauber eingehängt werden kann, wird ein Mountpoint erstellt:

sudo mkdir -p /mnt/usb-backup

3. Backup-Skript anlegen

Jetzt wird das eigentliche Skript erstellt, das den Stick mountet, rsync ausführt und danach wieder sauber aushängt:

sudo nano /usr/local/bin/usb-nextcloud-backup.sh
#!/bin/bash
set -eu

UUID="deine-usb-stick-uuid"
DEVICE="/dev/disk/by-uuid/$UUID"
MOUNTPOINT="/mnt/usb-backup"
SOURCE="/pfad/zum/quellordner/"
TARGET="$MOUNTPOINT/Backup-Ziel/"
LOGFILE="/var/log/usb-nextcloud-backup.log"

echo "===== $(date '+%Y-%m-%d %H:%M:%S') Backup gestartet =====" >> "$LOGFILE"

sleep 2

if mountpoint -q "$MOUNTPOINT"; then
    umount "$MOUNTPOINT" || true
fi

mount "$DEVICE" "$MOUNTPOINT" -o noatime

if findmnt -no OPTIONS "$MOUNTPOINT" | grep -qw ro; then
    echo "Fehler: $MOUNTPOINT ist nur lesbar eingehängt." >> "$LOGFILE"
    exit 1
fi

mkdir -p "$TARGET"

if rsync -a --delete --info=progress2 "$SOURCE" "$TARGET" >> "$LOGFILE" 2>&1; then
    sync
    umount "$MOUNTPOINT"
    echo "===== $(date '+%Y-%m-%d %H:%M:%S') Backup beendet =====" >> "$LOGFILE"
else
    echo "Fehler: rsync ist fehlgeschlagen." >> "$LOGFILE"
    exit 1
fi

Danach das Skript ausführbar machen:

sudo chmod +x /usr/local/bin/usb-nextcloud-backup.sh

Wichtig ist hier vor allem, die UUID, den Quellpfad und bei Bedarf auch den Zielordner anzupassen.


4. systemd-Service erstellen

Damit das Skript sauber als Dienst gestartet werden kann, wird ein systemd-Service angelegt:

sudo nano /etc/systemd/system/usb-nextcloud-backup.service
[Unit]
Description=Backup eines Ordners auf USB-Stick
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/usb-nextcloud-backup.sh

Danach:

sudo systemctl daemon-reload

5. udev-Regel anlegen

Damit das Backup automatisch beim Einstecken startet, braucht es noch eine passende udev-Regel:

sudo nano /etc/udev/rules.d/99-usb-nextcloud-backup.rules
ACTION=="add", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", ENV{ID_FS_UUID}=="deine-usb-stick-uuid", ENV{UDISKS_IGNORE}="1", TAG+="systemd", ENV{SYSTEMD_WANTS}+="usb-nextcloud-backup.service"

Danach die Regeln neu laden:

sudo udevadm control --reload
sudo udevadm trigger
sudo systemctl daemon-reload

6. Manuell testen

Bevor man sich auf den Automatismus verlässt, sollte der Service einmal manuell gestartet werden:

sudo systemctl start usb-nextcloud-backup.service
sudo systemctl status usb-nextcloud-backup.service

Wenn das sauber funktioniert, sollte das Backup danach auch automatisch beim Einstecken des richtigen USB-Sticks anlaufen.


Warum ich die UUID nutze

Gerätenamen wie /dev/sda oder /dev/sdb sind unter Linux keine verlässliche Grundlage, weil sie sich ändern können. Deshalb ist die UUID für so ein Setup deutlich robuster.

So wird das Backup wirklich nur gestartet, wenn genau der vorgesehene Stick angeschlossen wird, und nicht irgendein anderes USB-Gerät.


Für wen das interessant ist

Die Lösung ist vor allem dann praktisch, wenn man:

  • einen Linux-Rechner nutzt
  • regelmäßig denselben USB-Stick verwendet
  • einen bestimmten Ordner sichern möchte
  • keine zusätzliche Backup-Software installieren will

Für mich passt das aktuell gut, weil ich Nextcloud nutze, zur Cloud-Lösung aber bewusst noch eine zusätzliche Sicherung haben möchte.


Fazit

Ich mag an diesem Setup vor allem, dass es wenig Overhead hat.

Kein großes Backup-Programm, keine komplizierte Oberfläche, kein manuelles Starten. Stick einstecken reicht aus, und der Abgleich läuft automatisch.

Gerade in Kombination mit meinem Nextcloud-Ordner ist das für mich eine praktische Ergänzung: Die Daten liegen bequem in der Cloud-Lösung, und durch das automatische Backup beim Anstecken habe ich zusätzlich noch eine separate lokale Sicherung.

0 💬 2 🔁 2 ⭐