I think I’m about done with the next release. Here’s the Changelog entry:


  • Add event-based snapshots
  • Add support to change the separator character in snapshot names
    • set the default value of “zfs/sep” to “_”
    • useful for CIFs clients that previously choked on colons in snapshot names
  • Improved shutdown speed via http://blogs.sun.com/dp/entry/speeding_to_a_halt
  • Add support to allow the user disable auto-snapshots of new pools
  • Bugfix to allow snapshots of datasets with spaces in their names
  • Bugfix to properly deal with namespace clashes in dataset names
  • Exported $LAST_SNAP and $PREV_SNAP variables when performing backups

The main new thing here is the “event-based-snapshot” instance, as described in the README and Defect 9595. It’s nothing earth shattering, but a useful feature I think.

I’ve found that in my day to day use of OpenSolaris, I tend to take the lazy option of running "zfs snapshot -r rpool@snap" whenever I’m about to do something to the system that I might regret later, and don’t want to wait for the 15 minute ":frequent" instance to fire. Later, I go to run the same thing again, and find I’ve already got a snapshot called rpool@snap, so I take a new one, rpool@snap2 – can you tell where this is going?

Eventually, I find myself out of disk-space and with no real clue what was interesting about rpool@snapn in the first place. I torch the snapshots and get on with life. So far, this has worked just fine, but it’s a bit manual and results in us snapshotting rpool/swap and rpool/dump, and I don’t really want that.

Some of the stuff Erwann added for 2009.06 helps a bit – with the “snapshot this directory” button in Nautilus, we could take a snapshot of a single dataset, but it doesn’t group them, and still leaves the name of the snapshot as the only place to describe the snapshot contents.

So, my solution was to add the svc:/system/filesystem/zfs/auto-snapshot:event instance. Most of the code for this was in 0.11, but I’m now including a manifest that uses it. This service isn’t managed using cron, instead you get to manually run run the method script each time you want to take a snapshot. You also have to option of supplying a description that gets stored into a user property on the snapshot, com.sun:auto-snapshot-desc (feel free to go all “Web 2.0” here, and add #hashtags if you want!)

Where this wins over a simple "zfs snapshot -r rpool@snap" is that it uses the com.sun:auto-snapshot properties used by the other instances to determine which datasets we want to take snapshots of (and can be overridden by com.sun:auto-snapshot:event).

I’ve hacked together a (flawed) GUI that I’ve added as a launcher on my GNOME panel which shows a Zenity dialog box asking for a description of the snapshot, runs the method script, then pops up a notification once the snapshots have been taken. I’ve not included this in the package, since I’m sure someone will do a better job of it, but download from here if you want it. Obviously this is but one use for event-based snapshots: if you set the zfs/backup-save-cmd SMF property on that instance, you’d have a 1-click “backup my stuff” button! :-)

More of my awesome GUI skills…

The snapshot event notification popup

As ever, the README also documents these changes, and you can get the sources and build yourself a package via:

$ hg clone ssh://anon@hg.opensolaris.org/hg/jds/zfs-snapshot

I’m not sure when these changes will land in OpenSolaris – there’ll be a 0.12.1 release as soon as I get to write support for the ‘zfs list -d’ command that Chris added for the bug I filed 6762432, so perhaps we’ll wait for that (I thought it polite to wait till everyone was able to run a version of OpenSolaris that included that fix before making the changes).

Comments welcome here, or on the zfs-auto-snapshot mailing list