最近我思考了很多关于 ZFS 快照的问题,并且有了一些人们可能会感兴趣的想法。下面我将介绍其中一个想法(其他想法将陆续推出——请关注此空间)

zfs-discuss 上,有些人在思考一种根据计划自动获取快照的机制,这是一个好主意。我很赞同这个想法,我建议最好集成到 SMF 中,我还发表了一些关于如何实现该机制的看法。

现在,我有了一个可以使用的原型。它以 SMF 为基础,创建一个 cron 作业,周期性地获取您指定的文件系统的快照。

我认为您应该拥有多个该服务的实例(而不是一个默认实例),每组您想获取的自动快照都有一个实例。我也获得了对创建递归快照的支持,给 zfs snapshot 加上一个 -r 标志会使该支持更好(并且更简单!)

我还没有实现“rolling snapshot”(滚动快照)功能,所以我们只能保持 x 个旧快照。为此,我正在焦急地等待新的 ZFS 标志 -s,该标志使我能根据快照创建时间排序,并删除最老的快照(就是 tail -1 那个快照!)。cron 当前的功能对我也有一点限制,但是我想这些对于初学者来说已经足够了。

它看起来是什么样的?下面是一个“屏幕快照”:

# svcs | grep zfs
online         18:36:11 svc:/system/filesystem/zfs/auto-snapshot:space-timf
# svcs -l svc:/system/filesystem/zfs/auto-snapshot:space-timf
fmri         svc:/system/filesystem/zfs/auto-snapshot:space-timf
name         ZFS automatic snapshots
enabled      true
state        online
next_state   none
state_time   Wed May 10 18:36:11 2006
logfile      /var/svc/log/system-filesystem-zfs-auto-snapshot:space-timf.log
restarter    svc:/system/svc/restarter:default
dependency   require_all/none svc:/system/filesystem/local (online)
dependency   require_all/none svc:/system/cron (online)

是的,看起来并不是那么 令人兴奋。为了更加简便,我写了一个简单的管理 GUI,它向您询问一些相关的问题,并为您构建实例清单。它需要最新版的 zenity(感谢 Glynn!)才能工作,但是这已经包含在 Solaris 中了,所以应该没有问题。看起来就像这样:

Tim 的 ZFS 自动快照管理脚本

对了,如果您希望试一试,请下载此 tarball 的副本,并执行以下操作:

# cp zfs-auto-snapshot/lib/svc/method/zfs-auto-snapshot /lib/svc/method
# svccfg import zfs-auto-snapshot/zfs-auto-snapshot.xml
#  [ now create an instance, using my GUI, or your text editor of choice ]
# svccfg import my-auto-snapshot-instance.xml
# svcadm enable svc:/system/filesystem/zfs/auto-snapshot:tank-foo

如果一切顺利,您应该在 crontab 中看到一个新条目(使用 crontab -l 检查),并且将开始获得定期的快照。由于这是 SMF,您可以使用 svcadm disable svc:/system/filesystem/zfs/auto-snapshot:tank-foo 禁用。我已经在 snv_35 上对其进行了测试,似乎没什么问题,但是如果您遇到了什么奇怪的事情,请告诉我。

现在,还有一些工作要做:特别是,这里处理的错误并不是重点(如果我们因为某种原因无法获得快照,我愿意该服务降级),我还需要实现回滚快照功能,并且应该在安全角色和配置文件方面更加敏感。尽管如此,但作为第一次尝试,我想这已经很不错了。

下面展示的是我拥有的所有快照,包括文件系统的自动快照和手动快照:

# zfs list -r space/timf
NAME                   USED  AVAIL  REFER  MOUNTPOINT
space/timf            1.28G  24.9G  1.28G  /space/timf
space/timf@backup     1.66M      -   458M  -
space/timf@more-recent   114K      -   989M  -
space/timf@something_else  87.5K      -  1003M  -
space/timf@zfs-auto-snap-2006-05-10-19:00:00      0      -  1.28G  -

欢迎评论!

5 月 11 日更新:我已经修复了方法脚本中的一个缺陷,该缺陷可能引起一个自动快照 cron 作业覆盖另一个作业,被覆盖的作业应该是当前作业的子作业。我还调整了 GUI,以根据间隔类型更改快照周期。以上链接更新为指向新的 tarball。

5 月 12 日更新:修复了另一个创建 cron 作业方面的 bug。

6 月 8 日更新:可以在这里这里
这里还有这里查看最近有关此主题的帖子。

Advertisements