ZFS-Snapshots automatisch erstellen und kopieren

Im letzten Beitrag hatte ich das Tool „zfSnap“ erwähnt. Dieses Shell-Skript ist in den Universe-Quellen von Ubuntu (15.04 und höher) enthalten und vereinfacht das Erstellen und Verwalten von ZFS-Snapshots.

Ich habe mir zwei Cron-Skripte erstellt, welches das Erstellen von Snapshots meiner beiden Pool automatisiert. Ersteres erstellt mit Hilfe von „zfSnap“ jeden Tag einen Snapshot meiner beiden Pools „ubuntu-1“ (Der Systempartition) und „home-1“ (Benutzerverzeichnis) und kopiert diese Snapshots dann wöchenlich mit Hilfe von „zfs send“ auf meine zweite interne Festplatte.

Skript zum Snapshots erstellen (Liegt in „/etc/cron.daily„):

#!/bin/sh
test -x /usr/sbin/zfSnap || exit 0
/usr/sbin/zfSnap -a 5d rpool/ROOT/ubuntu-1 rpool/HOME/home-1
/usr/sbin/zfSnap -d

Die Parameter sind relativ leicht erklärt:

-a 5d -> Es werden maximal 5 Tage lang die Snapshots gespeichert (Dient quasi als Hinweis für den „d„-Parameter)

-d -> Löscht alle Snapshots, die älter als die Zahl am Ende des Names eines Snapshot ist.

Verständlicher wird die Sache, wenn man sich die Namensgebung eines Snapshots anschaut:

pool/HOME/home-1@2016-03-16_09.30.42--5d

Das Datum und die Uhrzeit sind selbsterklärend. Am Ende stehen dann die 5 Tage Haltezeit, die durch den Parameter festgelegt wurden.

Skript zum Kopieren der Snapshots (Liegt in „/etc/cron.weekly„):

#!/bin/sh
BACKUP_DIRECTORY="/data/Backups"
FILEEXTENSION="zfs"

LATEST=`zfs list -t snapshot -o name -s creation | tail -n2`
for NAME in $LATEST;
   do
   SHORTNAME=`echo $NAME | awk 'BEGIN{FS="/|--"; OFS="\t"}{print $3}'`
   zfs send $NAME > $BACKUP_DIRECTORY/$SHORTNAME.$FILEEXTENSION;
   done

In der Variablen „BACKUP_DIRECTORY“ kann man das Verzeichnis festlegen, in welches der/die Snapshots verschoben werden sollen. Das Skript funktioniert prinzipiell mit jedem Snapshots, also nicht nur mit solchen die mit Hilfe von „zfSnap“ angelegt wurden.

Beides zusammen ergibt für mich eine wunderbare Möglichkeit ohne Aufwand regelmäßig ein Backup meines Systems zu erhalten. Das schöne an der Sache mit den Snapshots ist zudem, dass man auch mal mit dem System experimentieren kann ohne keine Sorge haben muss, dass man etwas dauerhaft kaputt macht. Einfach vor dem Experiment einen Snapshot anlegen und wenn es schief geht, diesen wieder einspielen.