Shadow Copy with ZFS

Alison Winters alisonw at
Thu Feb 8 01:05:01 GMT 2007

Hi Ed,

I think this genericizing of the existing module will be really useful.
 Comments below...

Ed Plese wrote:
> Below is a set of additional options to shadow_copy that I think would
> work for most cases.  It requires the snapshot names to be of the form
> "prefixYYYY.MM.DD-HH.MM.SS".  The prefix is customizable and optional
> but the timestamp format is fixed and must be at the end of the name.
> The defaults for these options would make the module function exactly
> like the current implementation.
> path:
>   This is the directory that contains all of the snapshots.  Defaults to "".
I presume "" means "." - i.e. snapshots mounted directly under the share

> subpath:
>   This is the relative path under the snapshot directory to the files.
>   Defaults to "".
This is cool, being able to use variable substitutions is nice.

> sort:
>   This is used to specify how (asc or desc, if at all) the shadow copies
>   should be sorted.  This is useful for filesystems for which readdir
>   doesn't return the files in order.

> Does this seem like it would be a reasonable way to implement this?
> Would this work with XVM snapshots?
Yes and no :-)  We can mount XVM snapshots anywhere, but the current
snapshot manager implementation mounts them with a different filename
that won't match the YYYY.MM.DD-HH.MM.SS format.

I can anticipate other situations where for policy reasons snapshots are
mounted with a different naming convention, so i'd propose using
strptime(), or a cut down version to make the format of the mount point
fully configurable.  I can see two immediate problems with strptime():

1. it overloads the existing "%" substitutables in smb.conf,

2. it may not be implemented in older UNIXes, meaning we'd probably need
   to add a whole bunch of safe wrapper functions into lib/

Problem #1 can be overcome by using another character in the smb.conf
(e.g. "$" instead of "%").

Problem #2 is a bit more annoying.  Perhaps we could write a really
cut-down version of strptime() for Samba that only handles the six field
descriptors we're interested in (%Y, %m, %d, %H, %M, %S)?  Well, and %%
of course.

Here's the option i see:

  The format of the snapshot directory names.  Defaults to

For the weird format we're using here, the setting would be:

  path = /pool/fs
  vfs objects = shadow_copy
  shadow_copy: path = SNAPSHOTS
  shadow_copy: format = $Y_$m_$d_$H$M$S
  shadow_copy: sort = desc

We also have junk characters on the end of that format (e.g.
2007_02_08_010236_Thu), but those could be thrown away like how sscanf
does it.

I know this is a bit more work than just standardizing on a common mount
name, but i think it'll add a lot more flexibility that users will
appreciate at the end of the day.

What do you think?


More information about the samba-technical mailing list