zfstools und snapshots von datasets als Teil von boot environments

crotchmaster

happy BSD user
Moin Forenleser,

ich kümmere mich gerade mal etwas um meine automatisierten Backups meines privaten Servers. Dafür nutze bzw. möchte ich die sysutils/zfstools nutzen, weil die u.a. komfortabel einen Snapshot von einem Dataset eines PostgreSQL-Servers machen können und auch eingebaute Rotation haben. Leider scheinen die nicht so gut mit dem Layout von Datasets als Teil von boot Environments zusammen zuspielen.

Wenn ich händisch mit:
zfs snap -r zroot@fullbackup
einen Snapshot erstelle, werden von wirklich Datasets Snapshots erstellt und ich kann sie mit
zfs send -R zroot@fullbackup|... senden. Alles fein soweit.

Ich habe mit:
Code:
zfs set com.sun:auto-snapshot=true zroot
zfs set com.sun:auto-snapshot=postgresql zroot/postgresdb
das Snapshoting durch zfstools aktiviert.

Mit:
zfs-auto-snapshot -k daily 7 erstelle ich nun einen Snapshot.

Mit:
zfs list -t snap -o name|grep zfs-auto-snap_daily-2019-12-10-01h00
erhalte ich folgende Liste von Snapshots:
Code:
zroot@zfs-auto-snap_daily-2019-12-10-01h00                                                                 
zroot/ROOT/default@zfs-auto-snap_daily-2019-12-10-01h00                                                    
zroot/backups@zfs-auto-snap_daily-2019-12-10-01h00                                                         
zroot/jails@zfs-auto-snap_daily-2019-12-10-01h00                                                           
zroot/jails/basejail@zfs-auto-snap_daily-2019-12-10-01h00                                                  
zroot/jails/dbserver@zfs-auto-snap_daily-2019-12-10-01h00                                                  
zroot/jails/mailserver@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/newjail@zfs-auto-snap_daily-2019-12-10-01h00                                                   
zroot/jails/poudriere@zfs-auto-snap_daily-2019-12-10-01h00                                                 
zroot/jails/webserver1@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/webserver2@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/webserver3@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/webserver4@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/webserver5@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/jails/webserver6@zfs-auto-snap_daily-2019-12-10-01h00                                                
zroot/postgresdb@zfs-auto-snap_daily-2019-12-10-01h00                                                      
zroot/poudriere/jails/FreeBSD:12:amd64@zfs-auto-snap_daily-2019-12-10-01h00                                
zroot/poudriere/jails/FreeBSD:12:i386@zfs-auto-snap_daily-2019-12-10-01h00                                 
zroot/poudriere/ports@zfs-auto-snap_daily-2019-12-10-01h00                                                 
zroot/poudriere/ports/default@zfs-auto-snap_daily-2019-12-10-01h00                                         
zroot/tmp@zfs-auto-snap_daily-2019-12-10-01h00                                                             
zroot/usr/home@zfs-auto-snap_daily-2019-12-10-01h00                                                        
zroot/usr/local@zfs-auto-snap_daily-2019-12-10-01h00                                                       
zroot/usr/ports@zfs-auto-snap_daily-2019-12-10-01h00                                                       
zroot/usr/ports/distfiles@zfs-auto-snap_daily-2019-12-10-01h00                                             
zroot/usr/src@zfs-auto-snap_daily-2019-12-10-01h00                                                         
zroot/var/audit@zfs-auto-snap_daily-2019-12-10-01h00                                                       
zroot/var/crash@zfs-auto-snap_daily-2019-12-10-01h00                                                       
zroot/var/log@zfs-auto-snap_daily-2019-12-10-01h00                                                         
zroot/var/mail@zfs-auto-snap_daily-2019-12-10-01h00                                                        
zroot/var/tmp@zfs-auto-snap_daily-2019-12-10-01h00

In der Liste fehlen die Snapshots von zroot/usr und zroot/var, weshalb ein:
zfs send -R zroot@zfs-auto-snap_daily-2019-12-10-01h00|... fehl schlägt.

Bei beiden Datasets sind die properties canmount und mounted wie folgt gesetzt:
Code:
NAME       PROPERTY  VALUE     SOURCE
zroot/usr  mounted   no        -
zroot/usr  canmount  off       local
zroot/var  mounted   no        -
zroot/var  canmount  off       received
.

Was für Möglichkeiten habe ich, mit den zfstools von wirklich jedem Dataset einen Snapshot zu erstellen, so dass ich einfach mit einem zfs send -R den Stream sichern kann? Oder wie macht Ihr Eure Backups?
Wenn ich eine "Lösung" mit zfstools und dem normalen zfs snap -r zroot@name mache, wird es sicher kompliziert.

Danke schon mal fürs Lesen.
 
Hallo,

Vielleicht schaust Du Dir mal sanoid an, und da das Werkzeug syncoid.

Ich habe mich erst vor kurzem begonnen, mich damit etwas zu befassen, es soll einige Sachen bei zfs einfacher machen.

Aber aufpassen, das Zeug braucht eine Bourne Shell.
 
Vor einem ähnlichen Problem stand ich vor einiger Zeit auch, allerdings ging es mir darum das UFS nodump Flag irgendwie zu berücksichtigen.

Im Backup-Script rotieren rekursive Snapshots vom Pool (Manpage Example 15) und in einer Schleife sichert ein zfs send ... jedes einzelne Dataset (inkrementell, nicht wenn nosend Property!=0).

Der Mehraufwand beim Restore/Receive versteht sich von selbst.

Vllt genügt dir bereits die Snapshot Rotation aus der Manpage, zroot/usr und zroot/var haben auf meinem Server die gleichen Eigenschaften und die Snapshots werden angelegt. Somit sollte ein zfs send -R ... durchlaufen.
 
Danke Euch beiden für die Tipps. Ich habe mir gerade sanoid angeschaut und es in einer VM ausprobiert.
Ist doch einfacher als gedacht. Ich glaube das werde ich weiter verfolgen.
 
Kleines Update. sanoid ist doch durchgefallen. Es macht auch nicht von allen datasets einen Snapshot. Ich mache seit gut einer Woche die Snapshots mit einem selbst kreierten Shellscript und sende diese dann mit einem zfs send -R ... bzw. zfs send -Ri .. auf meinen Cloudspeicher.
 
Zurück
Oben