Automatische zfs snapshots mit sanoid
Einer der Gründe für mich auf FreeBSD zu wechseln war das integrierte Dateisystem zfs mit den Möglichkeiten Snapshots zu erstellen. Um diese Snapshots bequem per Konfiguration zu steuern gibt es sanoid.
Unter FreeBSD ist das schnell installiert.
sudo pkg install sanoid
Um den Namen seiner Dateisysteme zu sehen kann man einfach
sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 51,0G 395G 96K /zroot
zroot/ROOT 4,91G 395G 96K none
zroot/ROOT/default 4,91G 395G 4,90G /
zroot/tmp 13,3M 395G 12,0M /tmp
zroot/usr 46,1G 395G 96K /usr
zroot/usr/home 44,1G 395G 44,0G /usr/home
Die Konfiguration ist recht simple. Ich möchte alle 5 Minuten einen Snapshot und davon 5 vorhalten. Dann 36 stündliche und 7 tägliche. Einmal pro Woche mache ich noch ein externes Backup mit restic.
vi /usr/local/etc/sanoid/sanoid.conf
[zroot/usr/home]
use_template = production
### templates below this line ###
[template_production]
frequent_period = 5
frequently = 5
hourly = 36
daily = 7
autosnap = yes
autoprune = yes
Das ganze einmal manuell starten und das Ergebnis betrachten.
sudo /usr/local/bin/sanoid --cron
zfs list -t snapshot | grep auto
zroot/usr/home@autosnap_2021-02-14_08:05:39_daily 0 - 44,0G -
zroot/usr/home@autosnap_2021-02-14_08:05:39_hourly 0 - 44,0G -
zroot/usr/home@autosnap_2021-02-14_10:07:08_hourly 0 - 44,0G -
zroot/usr/home@autosnap_2021-02-14_10:07:08_frequently 0 - 44,0G -
Zum Testen mal ein Testfile das wir gleich löschen und restaurieren wollen
cd tmp
~/tmp]$ touch test2be-deleted
Nach einem schönen Sontagsspaziergang sah es dann so aus:
zroot/usr/home@autosnap_2021-02-14_08:05:39_daily 0 - 44,0G -
zroot/usr/home@autosnap_2021-02-14_08:05:39_hourly 0 - 44,0G -
zroot/usr/home@autosnap_2021-02-14_10:07:08_hourly 26,4M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:00:00_hourly 22,6M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:30:00_frequently 1,67M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:35:00_frequently 1,41M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:40:00_frequently 1,59M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:45:00_frequently 1,43M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:50:00_frequently 1,34M - 44,0G -
zroot/usr/home@autosnap_2021-02-14_11:55:00_frequently 1,28M - 44,0G -
Jetzt das Testfile löschen und aus einem älteren Snapshot restaurieren. Über ein .zfs Verzeichnis kann man einfach auf seine Snapshots zugreifen
rm test2be-deleted
ls /usr/home/.zfs/snapshot
total 14
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_08:05:39_daily
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_08:05:39_hourly
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_10:07:08_hourly
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:00:00_hourly
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:35:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:40:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:45:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:50:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_11:55:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_12:00:00_frequently
1 drwxr-xr-x 3 root wheel 3 5 Jan. 19:20 autosnap_2021-02-14_12:00:00_hourly
ls /usr/home/.zfs/snapshot/autosnap_2021-02-14_12:00:00_frequently/hbauer/tmp
total 1
1 -rw-r--r-- 1 hbauer hbauer 0 14 Feb. 10:14 test2be-deleted
Man kann diese Snapshots dann auch noch mit Syncoid automatisch an andere zfs Server über ssh versenden. Eine Aufgabe für einen der nächsten Sonntage.