ZFS rolling snapshots

Posted by Dick on October 12, 2007

I’ve got more zones than I know what to do with now, but they’re all interdependant.

I need to snapshot them all at the same time if I want to be able to rollback consistently.

Since it’s a backup it needs as few moving parts as possible.

I’m really more of a perl guy

As you saw yesterday, my shell scripting is pretty bloody awful.
But here’s a dead easy way to get daily snapshots across an entire storage pool.

   vera bin # cat /opt/local/bin/citizensnaps
   #! /bin/sh

   ZPOOL=$1

   if [ ! -n "$ZPOOL" ] ; then
           echo 'Usage: $0 poolname' ; exit
   fi

   # check we have a pool with that name
   /usr/sbin/zpool status $1 > /dev/null || exit

   TODAY=`date +%A`

   # get rid of last weeks snapshot, and create a fresh one
   pfexec zfs destroy -r ${ZPOOL}@${TODAY}
   pfexec zfs snapshot -r ${ZPOOL}@${TODAY}

Then run it out of roots crontab (or someone else with the correct rights profile) every night:

    # daily snapshot of everything
    59 23 * * * /opt/local/bin/citizensnaps tank

Bear in mind this is a dirt-simple, ‘works for me’ solution. If you want something more polished, look at Tim Fosters excellent work  (which is making its way into Opensolaris ).

Trackbacks

Use this link to trackback from your own site.

Comments

Leave a response

Comments