ZFS is een schitterend file-system met ontzettend veel mogelijkheden. (Automatische) snaphots zijn hierbij een erg krachtig middel voor backup doeleinden.

Een erg krachtig principe van het ZFS filesysteem zijn de zogenaamde snapshots. Je maakt dan als het ware een foto (moment-opname) van je huidige files op je ZFS Pool. Heb je bijvoorbeeld een file per ongeluk verwijderd dan kun je deze eenvoudig terughalen van de snapshot. Verder kun je een rollback uitvoeren van je filesysteem zoals deze was op het moment dat de snapshot is gemaakt. Belangrijk om te weten is het feit dat een snapshot read-only is.

Ik kan snapshots het eenvoudigste uitleggen met wat commando’s en voorbeelden. Log hiervoor in op je ZFS server met SSH.

Voor een overzicht van je ZFS pools type je het commando ‘zfs list’

zfs list
NAME USED AVAIL REFER MOUNTPOINT
Pool1 8.45T 2.27T 8.45T /mnt/Pool1
Pool2 4.70T 2.43T 4.70T /mnt/Pool2

Je ziet dat ik hier 2 ZFS pools heb met de namen ‘Pool1’ en ‘Pool2’ die je op de betreffende mountpoints (directories) kunt vinden.

Om een snapshot te maken met de naam ‘2014-12-22’ op je ZFS pool met de naam ‘Pool1’ type je het commando ‘zfs snapshot’.

zfs snapshot Pool1@2014-12-22

Om een overzicht van je gemaakte snapshots te krijgen typ je het commando ‘zfs list’.

zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@2014-12-22 141K - 8.45T -

Je ziet dat de snapshot zelf een minimale hoeveelheid data in beslag neemt. Deze hoeveelheid wordt meer als ik bijvoorbeeld een file verwijder op de originele ‘Pool1’. In dit voorbeeld ga ik nu een file van 7.8 MB deleten. Als ik nu kijk voor het overzicht dan zie je een toename in het gebruik.

zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@2014-12-22 741K - 8.45T -

De inhoud van de snapshot kun je vinden op de hidden ‘.zfs/snapshot’ directory van je Pool. Dat is in dit geval dus in de directory ‘/mnt/Pool1/.zfs/snapshot/2014-12-22’. Als je hier vervolgens kijkt dat zul je zien dat de verwijderde file nog wel aanwezig is.

Als ik nu een file toevoeg aan ‘Pool1’ dan zul je zien dat deze alleen in de originele ‘Pool1’ verschijnt en niet in de eerder gemaakte snapshot. Wel zie je een kleine toename in het snapshot gebruik daar dit natuurlijk wel ergens geadministreerd moet worden zodat ZFS weet wat er wel en niet in een snaphot zit. In dit voorbeeld heb ik een file van 867 KB gedownload in ‘Pool1’.

zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@2014-12-22 8.41M - 8.45T -

Bij de eerste verandering zie je een grote toename. Download ik echter nog een file van 7.8 MB dan zie je dat de toename al een stuk minder is.

zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@2014-12-22 8.42M - 8.45T -

Je kunt een snapshot ook eenvoudig renamen. In dit geval verander ik deze van ‘2014-12-22’ in ‘experiment’.

zfs rename Pool1@2014-12-22 Pool1@experiment
zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@experiment 8.42M - 8.45T -

Om terug te keren naar de inhoud van je Pool zoals deze was toen de snapshot werd gemaakt gebruik je het command ‘rollback’. Let op dat dit even tijd in beslag kan nemen.

zfs rollback Pool1@experiment
zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
Pool1@experiment 141K - 8.45T -

Om een snapshot te verwijderen gebruik je het commando ‘destroy’.

zfs destroy Pool1@experiment
zfs list -t snapshot
no datasets available

Zoals je ziet is een snapshot een erg krachtige functie van het ZFS filesysteem. Een erg goede uitleg over nog meer zaken rondom ZFS kun je hier vinden.