ChickenLipsRfun2eat hat schon deutlich gemacht, dass man nur sichern kann, was auch auf die Festplatte geschrieben wurde. Das bedeutet in Abhängigkeit von den jeweiligen Applikationen, dass diese bedarfsweise zu schließen sind, um inkonsistente und damit "kaputte" Sicherungen zu vermeiden.
ZFS erlaubt dir das Anlegen von Snapshots für Datasets/Dateisysteme. Bzgl. der Anlage von Dateisystemen sind dir eigentlich keine Grenzen gesetzt. Du kannst diese sogar verschachteln und damit noch mehr Granularität reinbringen. Das bedeutet gleichzeitig, dass du die Snapshots für die einzelnen Datasets unabhängig voneinander übertragen kannst. Damit kannst du bei Bedarf auch dafür sorgen, dass bestimmte Abschnitte gar nicht erst übertragen werden.
Die send/receive-Skripte in deinem "Pull-Szenario" dürften am Ende gar nicht so anders aussehen. Effektiv funktioniert ein receive nicht, wenn es kein send gibt - wo soll der die Daten herbekommen? Das einzige "Pullige" an deinem Backup-Server ist damit die Quelle der Befehle, die die zu sichernden Systeme ausführen müssen. Hier muss sich ein Skript auf dem Backup-Server auf jeden Backup-Client verbinden, die Anlage der Snapshots und das Senden dieser auslösen, den Empfang auf dem Backup-Server initiieren und fertig. Gleiches gilt auch für andere Sicherungsmethoden.
Bei der Wiederherstellung aus ZFS-Snapshots hast du in Abhängigkeit vom auslösenden Szenario verschiedene Möglichkeiten:
Wenn du ein Dateisystem in einen Mountpunkt eingehangen hast, solltest du dort ein Unterverzeichnis .zfs /snapshot mit den verfügbaren Snapshots vorfinden. Darin stöbern und die gesuchten Dateien herauskopieren.
Du erstellst ein neues ZFS Dateisystem und empfängst den gewünschten Snapshot dorthin.
Du rollst so viele Snapshots zurück, bis zu den gewünschten Zustand erreichst - mit Verlust der danach angelegten Snapshots.
Du klonst einen Snapshots in ein eigenes Dateisystem und arbeitest damit weiter.
rsync hat im Vergleich zu ZFS-Snapshots den Vorteil, dass es einigermaßen unabhängig vom verwendeten Dateisystem ist. Du könntest also fleißig Dateisysteme wechseln, ohne etwas an der Sicherung ändern zu müssen. Mit fortgeschrittenen rsync-Funktionien, die z.B. dirvish benutzt, kannst du sogar den Eindruck einer täglichen Vollsicherung erwecken, ohne dass zusätzlicher Speicher verwendet wird (ich vermeide hier mal, das als eine Form von Deduplizierung darzustellen).
Was die Installation angeht, kannst du dich mit der Installationsanleitung von Ubuntu beschäftigen. Insbesondere das dort genannte Preseeing ist gar nicht mal so uninteressant. Ich benutze derzeit die Bento-Templates, um mir automatisch virtuelle Maschinen für VirtualBox/Vagrant zu generieren. Das kombiniert mit einem Post Install-Skript pro Maschine ist vielleicht auch eine Sache, die sich mittel- bis langfristig umsetzen lässt. Allerdings ist das ein ganz anderes Themengebiet. 😉