Home Members Sponsors Blogs Photos Videos Groups Events Polls Forums Articles
Articles
ZFS Rolling Snapshots
01-21-09

ZFS’s snapshot capability is a great way of being able to preserve data quickly and easily. The overhead is minimal and accessing the data is a piece of cake. It even lets you snapshot an entire hierarchy at once. Let’s say you’ve got a pool called ‘tank’, and you’ve created home directories off of it for anna, bill, chad, and dina:

 

NAME USED AVAIL REFER MOUNTPOINT
tank 2.73T 5.52T 2.73T /tank
tank/home 95K 5.52T 23K /zhome
tank/home/anna 18K 5.52T 18K /zhome/anna
tank/home/bill 18K 5.52T 18K /zhome/bill
tank/home/chad 18K 5.52T 18K /zhome/chad
tank/home/dave 18K 5.52T 18K /zhome/dina

 

Now you decide to create a snapshot at midnight every night. This way a user can always go back to ‘yesterday’ and retrieve a file he accidentally deleted or overwrote today. You set up a cronjob to execute a recursive snapshot, zfs snapshot -r tank/home@yesterday, and the result looks like this:

 

NAME USED AVAIL REFER MOUNTPOINT
tank 2.73T 5.52T 2.73T /tank
tank/home 95K 5.52T 23K /zhome
tank/home@yesterday 0 - 23K -
tank/home/anna 18K 5.52T 18K /zhome/anna
tank/home/anna@yesterday 0 - 18K -
tank/home/bill 18K 5.52T 18K /zhome/bill
tank/home/bill@yesterday 0 - 18K -
tank/home/chad 18K 5.52T 18K /zhome/chad
tank/home/chad@yesterday 0 - 18K -
tank/home/dina 18K 5.52T 18K /zhome/dina
tank/home/dina@yesterday 0 - 18K -

 

But what do you do once midnight rolls around again, as is its wont? One option would be to remove the old snapshots using zfs destroy -r tank/home@yesterday and take new ones. But even better would be to preserve the old snapshots. In current zfs implementations, you’d have to write a script, looping over the output of zfs list -Ho name | grep @yesterday and renaming each snapshot in turn.

With the change going into Nevada build 63, you can do this with one command, and all the renaming action happens inside the kernel:

 

# zfs rename -r tank/home@yesterday @2daysago
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 2.73T 5.52T 2.73T /tank
tank/home 95K 5.52T 23K /zhome
tank/home@2daysago 0 - 23K -
tank/home/anna 18K 5.52T 18K /zhome/anna
tank/home/anna@2daysago 0 - 18K -
tank/home/bill 18K 5.52T 18K /zhome/bill
tank/home/bill@2daysago 0 - 18K -
tank/home/chad 18K 5.52T 18K /zhome/chad
tank/home/chad@2daysago 0 - 18K -
tank/home/dina 18K 5.52T 18K /zhome/dina
tank/home/dina@2daysago 0 - 18K -

 

And now you can easily have rolling snapshots, with a simple script:

 

zfs destroy tank/home@7daysago > /dev/null 2>&1
zfs rename -r tank/home@6daysago @7daysago > /dev/null 2>&1
zfs rename -r tank/home@5daysago @6daysago > /dev/null 2>&1
...
zfs rename -r tank/home@yesterday @2daysago > /dev/null 2>&1
zfs snapshot -r tank/home@yesterday

 

Extending it to save @7daysago as @1weekago, and preserve weekly snapshots is also easy.

Powered by:
BoonEx - Community Software; Dating And Social Networking Scripts; Video Chat And More.
Copyright © 2010 Texas Sun Users Group.