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.

4 Kommentare

  1. Super praktische Anleitung zum automatischen Erstellen von Snapshots !
    Gibt es eine Möglichkeit das untere Script so zu modifizieren, daß der aktuelle snapshot automatisch in einen anderen Pool repliziert wird (das Dateisystem also direkt gespiegelt wird) ?

  2. Vielen Dank für den interessanten Artikel.

    Ich würde gerne die snapshots auch unter Samba in Windows als Vorgängerversion anzeigen lassen. Leider erscheint diese dort nicht. In der smb.conf habe ich das eingetragen.

    vfs objects = shadow_copy2
    shadow: snapdir = .zfs/snapshot
    shadow: sort = desc
    shadow: format = %Y-%m-%d_%H.%M.%S–5d
    shadow:localtime = no

    Woran könnte das denn liegen?

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.