Ich muss sicher keinem mehr erzählen, dass ich ein absoluter ZFS Fan bin…. Wie sich Snapshots erstellen und per ssh einfach über das Netzwerk übertragen lassen, habe ich ja bereits vor einigen Jahren beschrieben. In einem Gespräch sind wir vor kurzem auf FlexClone von NetApp gekommen (von wegen Enterprise Storage 😉 ). In diesem Zusammenhang auch irgendwann auf die Art wie ich die Datensicherung auf meinem FreeBSD Notebook machen 🙂

Ich habe einen kleinen Solaris basierten Storageserver. Auf diesen pumpe ich inkrementell das ZFS Home Volume von diesem Notebook. Um euch nicht im Dunkeln zu lassen, beschreibe ich es hier kurz.

Der Ablauf ist im Grunde so:
– Snapshot auf dem Client anlegen.
– Volume auf dem Ziel anlegen.
– Snapshot vom Client per SSH in das Ziel schieben.
– Weitere Snapshots auf dem Client anlegen.
– Die Differenz der Snapshots auf das Volume ins Ziel schieben.

Los gehts!

Erstellen eines Snapshots auf dem Notebook. Dieses definiert damit auch den zu sichernden Stand:

$ zfs snapshot -r tank/usr/home/kernel@-12-10-2014

Nun sollte dieser Snapshot bei einem zfs list aufgelistet werden:

$ zfs list
NAME                                         USED  AVAIL  REFER  MOUNTPOINT
tank                                         107G   109G   144K  none
tank/ROOT                                   8,76G   109G   144K  none
tank/ROOT/beforeUpdate-2014-10-10_20-18-44     8K   109G  5,04G  /mnt
tank/ROOT/beforeUpdate-2014-10-10_21-02-41     8K   109G  5,06G  /mnt
tank/ROOT/beforeUpdate-2014-10-12_17-38-35   136K   109G  8,05G  /mnt
tank/ROOT/default                           8,76G   109G  8,28G  /mnt
tank/ROOT/default@2014-10-10-20:18:44       56,6M      -  5,04G  -
tank/ROOT/default@2014-10-10-21:02:41       31,3M      -  5,06G  -
tank/ROOT/default@2014-10-12-17:38:35        323M      -  8,05G  -
tank/tmp                                     392K   109G   392K  /tmp
tank/usr                                    98,4G   109G   144K  /mnt/usr
tank/usr/home                               97,0G   109G   152K  /usr/home
tank/usr/home/kernel                        97,0G   109G  96,9G 
/usr/home/kernel
tank/usr/home/kernel@-12-10-2014            20,0M      -  96,9G  -
tank/usr/jails                               144K   109G   144K  /usr/jails
tank/usr/obj                                 144K   109G   144K  /usr/obj
tank/usr/pbi                                 144K   109G   144K  /usr/pbi
tank/usr/ports                              1,41G   109G   856M  /usr/ports
tank/usr/ports/distfiles                     582M   109G   582M 
/usr/ports/distfiles
tank/usr/src                                 144K   109G   144K  /usr/src
tank/var                                    9,32M   109G   144K  /mnt/var
tank/var/audit                               160K   109G   160K  /var/audit
tank/var/log                                 356K   109G   356K  /var/log
tank/var/tmp                                8,67M   109G  8,67M  /var/tmp

Sollte ein zfs list keine Snapshots anzeigen, ist dieses sicher beim Pool deaktiviert. In diesem Fall hilft ein:

$ zpool set listsnapshots=on tank

Auf dem Sicherungsziel erstelle ich nun ein neues ZFS Volume, in welches die Sicherung gehen soll:

$ zfs create DatenPool01/Datensicherung/errorlap
$ zfs list DatenPool01/Datensicherung/errorlap
NAME                                  USED  AVAIL  REFER  MOUNTPOINT
DatenPool01/Datensicherung/errorlap   209K  2.56T   209K  /mnt/DatenPool01/Datensicherung/errorlap

Nun kann ich bereits den erstellten Snapshot in dieses neue Volume schieben:

$ zfs send -R tank/usr/home/kernel@-12-10-2014 | ssh
root@solaris-storage.kernel-error.de zfs receive -Fduv DatenPool01/Datensicherung/errorlap
The authenticity of host 'solaris-storage.kernel-error.de (192.168.10.10' can't be
established.
ECDSA key fingerprint is ec:c0:e6:ed:81:b4:16:35:e9:c6:22:f0:a7:f7:ed:d6.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'solaris-storage.kernel-error.de' (ECDSA) to the list of known
hosts.
root@solaris-storage.kernel-error.de's password:
receiving full stream of tank/usr/home/kernel@-12-10-2014 into
DatenPool01/Datensicherung/errorlap/usr/home/kernel@-12-10-2014
received 98.4GB stream in 5298 seconds (19.0MB/sec)

Ist dieses durch, sollte man dieses natürlich am Ziel auch erkennen können:

$ zfs list DatenPool01/Datensicherung/errorlap
NAME                                  USED  AVAIL  REFER  MOUNTPOINT
DatenPool01/Datensicherung/errorlap  97.0G  2.47T   221K  /mnt/DatenPool01/Datensicherung/errorlap

Jetzt ist also bereits eine Vollsicherung im Ziel angekommen. Die weiteren Sicherungen sollen/können nun inkrementell erfolgen. Dazu erstelle ich einen weiteren Snapshot:

$ zfs snapshot -r tank/usr/home/kernel@-12-10-2014-02

Nun kann ich die Differenz dieser beiden Snapshots ins Ziel schieben:

$ zfs send -R -i tank/usr/home/kernel@-12-10-2014
tank/usr/home/kernel@-12-10-2014-02 | ssh root@solaris-storage.kernel-error.de zfs
receive -Fduv DatenPool01/Datensicherung/errorlap
root@solaris-storage.kernel-error.de's password:
Permission denied, please try again.
root@solaris-storage.kernel-error.de's password:
receiving incremental stream of tank/usr/home/kernel@-12-10-2014-02 into
DatenPool01/Datensicherung/errorlap/usr/home/kernel@-12-10-2014-02
received 991MB stream in 59 seconds (16.8MB/sec)

Somit liegt im Ziel nun eine aktuelle Datensicherung. Dieses lässt sich nun natürlich per Script automatisieren und vor allem alle 15 Minuten erstellen, sofern gewünscht! So lassen sich natürlich auch Vollsicherungen des kompletten Notebooks erstellen 🙂

B.t.w.1: NetApp stelle ich hiermit sicher nicht in Frage. Spitzen Produkte, gut durchdacht und toller Service.

B.t.w.2: PC-BSD bietet ein Stück Software mit dem Namen Life Preserver. Mit dessen Hilfe kann man die Snapshots auf seinem kompletten Pool managen und diesen recht einfach per SSH mit einem anderen ZFS System syncen. So zum Beispiel auch mit FreeNAS. Alles lässt sich damit komplett automatisieren. So kann man alle 15 Minuten per SSH seinen kompletten Pool auf sein ZFS Backup schieben. Mit passenden Internetanbindung von überall auf der Welt transparent. Stirbt das System, kann man mit einer Boot CD und einer neuen Platte ganz flott alles wiederherstellen, egal wo man gerade ist 😀 

Fragen? Dann fragen!