www.fabiankeil.de/blog-surrogat/2021/03/21/simplesnap-auf-electrobsd.html
Auf meinem Laptop setze ich zogftw ein um Backups zu machen. Da ich es genau dafür geschrieben habe, bin ich sehr zufrieden damit.
zogftw erstellt ZFS-Snapshots und überträgt sie auf eine beliebige Anzahl von externen mit geli verschlüsselten Speichermedien.
Auf Servern, auf die man nicht oder nur umständlich physikalisch zugreifen kann, kommt der Einsatz von externen Festplatten natürlich nicht in Frage.
zogftw kann zwar auch über ggated zur Verfügung gestellten Speicher zugreifen und auch das mache ich mit meinem Laptop, dies auf einem Server zu automatisieren ist jedoch etwas umständlich.
Seit ein paar Monaten sehe ich mich daher nach einer Backup-Lösung für ElectroBSD-Server um und teste derzeit simplesnap.
Um simplesnap unter ElectroBSD nutzen zu können musste ich es patchen damit GNU head verwendet wird. Das triviale Patch-Set habe ich Ende 2020 an den simplesnap-Entwickler geschickt, aber keine Antwort erhalten.
Auf GitHub ist mir später ein Pull-Request von einem MacOS-Nutzer mit einem ähnlichen Patch aufgefallen, der bereits seit 2019 ignoriert wird ...
simplesnap ist ein Bash-Skript, als Abhängigkeit müssen auf ElectroBSD außer der Bash noch die GNU coreutils installiert werden.
In der von mir verwendeten Konfiguration wird simplesnap auf dem System ausgeführt, wo die Backups gespeichert werden, verbindet sich über ssh mit dem zu sichernden System und ruft dort ebenfalls simplesnap auf. Dies geschieht über ein Wrapper-Skript.
Die simplesnap-Dokumentation empfiehlt, simplesnap mit root-Rechten auszuführen.
Davon halte ich nicht so viel, stattdessen nutze ich einen eigenen simplesnap-User,
der über zfs allow
die notwendigen Rechte erhalten hat.
Auch der simplesnap-User muss sowohl auf den Quell-Systemen als auch auf dem Backup-Speicher eingerichtet werden.
Auf den Quell-Systemen benötigt der simplesnap-Nutzer ssh-Zugang, den man über die authorized_keys-Datei einschränken kann:
[fk@elektrobier ~]$ sudo cat ~simplesnap/.ssh/authorized_keys command="/usr/local/sbin/simplesnapwrap",from="[...]",no-port-forwarding,no-X11-forwarding,no-pty ssh-ed25519 AAAAC3[...]a simplesnap@backup
Auf dem Backup-Speicher werden die ZFS-Rechte "create,destroy,mount,receive" benötigt, auf den Quell-Systemen "create,destroy,hold,mount,send,snapshot".
simplesnap überträgt nicht alle vorhandenen Snapshots, was mir am liebsten wäre, sondern nur seit dem letzten Aufruf neu hinzugekommenen Snapshots und die aktuellen Änderungen. Beim ersten Aufruf werden nur der aktuelle Stand der Datasets ohne Snapshots gesichert.
simplesnap erzeugt selbst Snapshots, behält aber nur den zuletzt erstellen Snapshot vorrätig.
Wenn man nicht zusätzlich manuell oder durch andere Software Snapshots erstellt, hat man also auch auf dem Backup-Speicher jeweils nur den Stand des letzten Backup-Vorgangs.
Für die automatisierte Snapshot-Erstellung werde ich mir vermutlich das in der simplesnap-Dokumentation empfohlene zfsnap näher anschauen.
Momentan erstelle ich Snapshots manuell mit zogftw.
Standardmäßig sichert simplesnap alle vorhandenen Datasets, Ausnahmen können auf dem
zu sichernden System durch Setzen der ZFS-Property org.complete.simplesnap:exclude
mit dem Wert on
markiert werden.
Mehr als 70 Datasets von einem System in Amsterdam auf ein System in Frankfurt zu sichern dauert nur etwa fünf Minuten, wenn wenig Daten hinzugekommen sind:
[simplesnap@backup ~]$ time /usr/local/sbin/simplesnap --host elektrobier.fabiankeil.de --setname mainset --store dpool/simplesnap --sshcmd "ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap" --receivecmd "/sbin/zfs receive -F -u" real 4m54.262s user 0m2.332s sys 0m12.025s [simplesnap@backup ~]$ zfs list -r -H dpool/simplesnap/elektrobier.fabiankeil.de | wc -l 74 [simplesnap@backup ~]$ time /usr/local/sbin/simplesnap --host elektrobier.fabiankeil.de --setname mainset --store dpool/simplesnap --sshcmd "ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap" --receivecmd "/sbin/zfs receive -F -u" real 5m0.988s user 0m7.661s sys 0m13.694s [simplesnap@backup ~]$ zfs list dpool/simplesnap/elektrobier.fabiankeil.de NAME USED AVAIL REFER MOUNTPOINT dpool/simplesnap/elektrobier.fabiankeil.de 41.5G 866G 23K /dpool/simplesnap/elektrobier.fabiankeil.de
Den Set-Namen mainset
habe ich der Dokumentation entnommen betrachte
ihn rückblickend als unvorteilhaft, da der Name in die von simplesnap erzeugten
Snapshots eingefügt wird:
[fk@elektrobier ~]$ zfs list -r -t all dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de | tail dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-19_16:09 169K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-19_17:29 169K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-19_19:24 128K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-19_19:28 186K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-19_19:31 128K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-20_13:36 209K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-20_13:46 209K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-21_13:39 134K - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@2021-03-21_13:48 0 - 713M - dpool/usr/jails/fabiankeil.de/usr/local/www/fabiankeil.de@__simplesnap_mainset_2021-03-21T14:15:55__ 0 - 713M -
Eine Referenz auf das sichernde System (backup-vm-frankfurt
)
wäre also praktisch, da ich mehr als ein sicherndes System einsetzen
möchte.
Ich bin aber zu faul, jetzt alle Snapshots manuell umzubenennen, solange das Testsystem läuft werde ich den Namen daher voraussichtlich beibehalten.
simplesnap hat leider keine Verbose-Option, bei Fehlern rufe ich es
daher über bash -x ..
auf, was natürlich nicht ideal ist.
Grundsätzlich versucht simplesnap auch Syslog zu nutzen, in der ElectroBSD-Standard-Syslog-Konfiguration, die der von FreeBSD entspricht, landen die nicht-kritischen Log-Meldungen aber im Nichts.
Um das zu ändern muss die Syslog-Konfiguration angepasst werden:
[fk@backup ~]$ cat /etc/syslog.d/simplesnap.conf :programname, regex, "^simplesnap*" *.* /var/log/simplesnap
simplesnap erzeugt dann Meldungen wie:
Mar 21 14:57:48 backup simplesnap[14899]: Invoked as: /usr/local/sbin/simplesnap --host elektrobier.fabiankeil.de --setname mainset --store dpool/simplesnap --sshcmd ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap --receivecmd /sbin/zfs receive -F -u Mar 21 14:57:48 backup simplesnap[14899]: Store dpool/simplesnap is mounted at /dpool/simplesnap Mar 21 14:57:48 backup simplesnap[14899]: Lock obtained at /dpool/simplesnap/elektrobier.fabiankeil.de/.lock with mkdir Mar 21 14:57:48 backup simplesnap[14899]: Finding remote datasets to back up Mar 21 14:57:48 backup simplesnap[14899]: Running ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap elektrobier.fabiankeil.de simplesnapwrap listfs Mar 21 14:57:49 backup simplesnap[14899]: ssh exited successfully Mar 21 14:57:49 backup simplesnap[14899]: Running ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap elektrobier.fabiankeil.de simplesnapwrap sendback mainset dpool Mar 21 14:57:49 backup simplesnap[14899]: Running /sbin/zfs receive -F -u dpool/simplesnap/elektrobier.fabiankeil.de/dpool Mar 21 14:57:51 backup simplesnap[14899]: ssh exited successfully Mar 21 14:57:51 backup simplesnap[14899]: /sbin/zfs exited successfully Mar 21 14:57:51 backup simplesnap[14899]: Received backup into dpool/simplesnap/elektrobier.fabiankeil.de/dpool Mar 21 14:57:51 backup simplesnap[14899]: Running ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap elektrobier.fabiankeil.de simplesnapwrap reap mainset dpool Mar 21 14:57:53 backup simplesnap[14899]: ssh exited successfully Mar 21 14:57:53 backup simplesnap[14899]: Running /sbin/zfs list -t snapshot -r -d 1 -H -o name dpool/simplesnap/elektrobier.fabiankeil.de/dpool Mar 21 14:57:53 backup simplesnap[14899]: /sbin/zfs exited successfully Mar 21 14:57:53 backup simplesnap[14899]: Destroying snapshot dpool/simplesnap/elektrobier.fabiankeil.de/dpool@__simplesnap_mainset_2021-03-21T14:13:47__ Mar 21 14:57:53 backup simplesnap[14899]: Running /sbin/zfs destroy dpool/simplesnap/elektrobier.fabiankeil.de/dpool@__simplesnap_mainset_2021-03-21T14:13:47__ Mar 21 14:57:53 backup simplesnap[14899]: /sbin/zfs exited successfully [...] Mar 21 15:02:30 backup simplesnap[14899]: Running ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap elektrobier.fabiankeil.de simplesnapwrap sendback mainset rpool/var/tmp Mar 21 15:02:30 backup simplesnap[14899]: Running /sbin/zfs receive -F -u dpool/simplesnap/elektrobier.fabiankeil.de/rpool/var/tmp Mar 21 15:02:31 backup simplesnap[14899]: ssh exited successfully Mar 21 15:02:31 backup simplesnap[14899]: /sbin/zfs exited successfully Mar 21 15:02:31 backup simplesnap[14899]: Received backup into dpool/simplesnap/elektrobier.fabiankeil.de/rpool/var/tmp Mar 21 15:02:31 backup simplesnap[14899]: Running ssh -p 55 -i ~/.ssh/id_ed25519_simplesnap elektrobier.fabiankeil.de simplesnapwrap reap mainset rpool/var/tmp Mar 21 15:02:32 backup simplesnap[14899]: ssh exited successfully Mar 21 15:02:32 backup simplesnap[14899]: Running /sbin/zfs list -t snapshot -r -d 1 -H -o name dpool/simplesnap/elektrobier.fabiankeil.de/rpool/var/tmp Mar 21 15:02:32 backup simplesnap[14899]: /sbin/zfs exited successfully Mar 21 15:02:32 backup simplesnap[14899]: Destroying snapshot dpool/simplesnap/elektrobier.fabiankeil.de/rpool/var/tmp@__simplesnap_mainset_2021-03-21T14:18:44__ Mar 21 15:02:32 backup simplesnap[14899]: Running /sbin/zfs destroy dpool/simplesnap/elektrobier.fabiankeil.de/rpool/var/tmp@__simplesnap_mainset_2021-03-21T14:18:44__ Mar 21 15:02:32 backup simplesnap[14899]: /sbin/zfs exited successfully Mar 21 15:02:32 backup simplesnap[14899]: Exiting successfully.
simplesnap erfüllt zwar nicht alle meine Wünsche, aber bis ich eine bessere Lösung gefunden habe werde ich es wohl einsetzen.