Debian 8: Automatisches Backup bei Anschluss einer USB-Platte

Seit meinem Umstieg von OpenMediaVault zu einem reinen Debian rüste ich Stück für STück alle Funktionen nach, die OMV in der GUI bot. Mir macht das großen Spaß und es gibt immer etwas zu tun. Heute möchte ich beschreiben, wie man in Debian 8 „Jessy“ mit systemd ein automatisches BAckup beim Anschluss einer USB-FEstplatte startet.

Während man sich in Vor-Systemd-Zeiten noch mit Device-IDs herumärgern musste, gibt es in Debian 8 und auch Ubuntu 16.04 eine viel elegantere Lösuzng.

Zuerst müssen wir einen Mountpoint für die USB-Platte anlegen. Dazu benötigen wir die UUID der Partition

sudo blkid /dev/sdf1

Die hier ausgegebene UUID kopieren wir und fügen sie in die /etc/fstab ein.

UUID=952799a7-bcc2-47af-bc35-d2ae3be05add /media/usbbackup ext4 auto,nofail,rw 0 0

Jetzt können wir den Datenträger einfach einbinden
mkdir /media/usbbackup
mount /media/usbbackup

Als nächstes schreiben wir ein Skript, welches das komplette Backup abwickelt. Mein OS liegt auf einem LVM. Das ist Pflicht um ein laufendes OS zu sichern, ohne zwangsläufig korrupte Dateien zu erzeugen. Die Daten liegen auf einem klassisch partioniertem RAID5-Verbund. Sie werden direkt gesichert, also Ohne einen LVM-Snapshot.

Mein Skript nutzt rsync mit eine paar Optionen. Bei der Systemplatte möchte ich gelöschte Dateien aufheben in einem eigenständigen Ordner. Bei der Datenplatte werden gelöschte Dateien einfach belassen. Der Backup-Ordner wird ausgeschlossen, da er nicht auf die externe Platte passen würde.


sudo nano /root/bin/usbbackup

#!/bin/bash

# This script is executed automatically by systemd
# If you want to use your external drive manually, disable service before plugging in.

beep -l 750
# Create Snapshot
lvcreate –size 2G –snapshot –name backup /dev/server-vg/root
sleep 5 # wait until device is ready
# mount snapshot
mount /dev/server-vg/backup /media/debian
echo „Backup started $(date) in debian“ >> /media/usbbackup/timestamp.txt
rsync -qah –delete -b –backup-dir=/media/usbbackup/debian_deleted/ /media/debian/ /media/usbbackup/debian/
echo „Backup finished $(date)“ >> /media/usbbackup/timestamp.txt
sleep 5

umount /media/debian
lvremove -f /dev/server-vg/backup
# Backup of /raid
echo „Backup started $(date) in raid“ >> /media/usbbackup/timestamp.txt
rsync -qah –exclude=/backups/ /raid/ /media/usbbackup/raid/
echo „Backup finished $(date)“ >> /media/usbbackup/timestamp.txt

umount /media/usbbackup
beep -l 750

Mein Skript macht zum Start des Backups und am Ende einen Piepton mit dem Systemlautsprecher. Dafür benötigt man das Paket beep. Wer das nicht möchte, kann die Zeilen einfach weglassen.

Wir machen das Skript ausführbar
sudo chmod +x /root/bin/usbbackup

Jetzt die Festplatte mal anschließen und testen ob das Skript korrekt läuft.

Mit systemctl list-units -t mount stellen wir den Unit-Name fest, den wir gleich brauchen. In meinem Fall media-usbbackup.mount.

Jetzt unmounten wir die Platte und stöpseln sie ab

sudo umount /media/usbbackup

Wir erzeugen den Service

sudo nano /etcsystemd/system/usbbackup.service

[Unit]
Description=USB Backup of filesystem
Requires=media-usbbackup.mount
After=media-usbbackup.mount

[Service]
ExecStart=/root/bin/usbbackup

[Install]
WantedBy=media-usbbackup.mount

Der gerade erstellte Service muss eingeschaltet werden. Er wird dann automatisch gestartet, wenn man die Platte ansteckt. Durch den beep-Befehl hört man das direkt.

systemctl enable usbbackup.service

Manuell starten kann man den Service nur, wenn die Platte angeschlossen ist. Wenn man die Platte nun einsteckt, sollte direkt das Backup laufen.

Update

Das hier beschriebene Verfahren ist problematisch, weil die Festplatte manchmal im Betrieb unmounted wird. Ein weiterer Nachteil ist, dass man immer nur eine Version der Datei hat. Das ist zum Beispiel bei Verschlüsselungstrojanern ziemlich schlecht. DAher werde ich in Kürze meine neue Backupstrategie mit rsnapshot vorstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam