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!
Schreibe einen Kommentar