Description

Bash script to snapshot zfs within same hierarchy and sync with secondary (backup) server. No need to specify new zfs, all are discovered and sent to receiver. This implementation is intended for KVMs LXCs and container volumes.

Solution

Bash script hosted HERE.

Configure

Copy the script to /usr/local/bin/.

Setup SSH access with keys to destination system.

Edit the variables in the script (or source a config file).

Add a crontab like below. I would normally do daily or twice daily, the 10 minute interval here is just for testing purposes with 2 LXC running nginx on a 1 hour (RETENTION=6) retention.

*/10 * * * * bash -l -c /usr/local/bin/zfs_snap.sh

Results on the source :

[root@test1 ~]# zfs list -t all -r data2/datacenter/lxc
NAME                                                USED  AVAIL     REFER  MOUNTPOINT
data2/datacenter/lxc/www1                            620M  1.45T      620M  /var/lib/lxc/www1
data2/datacenter/lxc/www1@2020-12-03T20:20:02         59K      -      620M  -
data2/datacenter/lxc/www1@2020-12-03T20:30:02         59K      -      620M  -
data2/datacenter/lxc/www1@2020-12-03T20:40:01         59K      -      620M  -
data2/datacenter/lxc/www1@2020-12-03T20:50:01         59K      -      620M  -
data2/datacenter/lxc/www1@2020-12-03T21:00:01         59K      -      620M  -
data2/datacenter/lxc/www1@2020-12-03T21:10:02        256K      -      620M  -
data2/datacenter/lxc/www2                            620M  1.45T      620M  /var/lib/lxc/www2
data2/datacenter/lxc/www2@2020-12-03T20:20:02         59K      -      620M  -
data2/datacenter/lxc/www2@2020-12-03T20:30:02         59K      -      620M  -
data2/datacenter/lxc/www2@2020-12-03T20:40:01         59K      -      620M  -
data2/datacenter/lxc/www2@2020-12-03T20:50:01         59K      -      620M  -
data2/datacenter/lxc/www2@2020-12-03T21:00:01         59K      -      620M  -
data2/datacenter/lxc/www2@2020-12-03T21:10:02        256K      -      620M  -

Results on the destination (only the top level zfs data1/backup/hosts was created here before the script ran from cron) As you can see no retention management implmented for the destination at this time.

[root@test2 ~]# zfs list -t all -r data2/datacenter/lxc
NAME                                                               USED  AVAIL     REFER  MOUNTPOINT
data1/backup/hosts/test1.home.lan/www1                            373M   393G      369M  /data1/backup/hosts/test1.home.lan/www
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:00:06         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:10:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:20:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:30:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:40:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T19:50:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:00:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:10:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:20:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:30:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:40:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T20:50:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T21:00:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www1@2020-12-03T21:10:02        112K      -      369M  -
data1/backup/hosts/test1.home.lan/www2                            373M   393G      369M  /data1/backup/hosts/test1.home.lan/www
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:00:06         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:10:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:20:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:30:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:40:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T19:50:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:00:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:10:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:20:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:30:02         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:40:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T20:50:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T21:00:01         96K      -      369M  -
data1/backup/hosts/test1.home.lan/www2@2020-12-03T21:10:02        112K      -      369M  -

Conclusion

Refereneces