ZFS自动快照服务的实现与管理


OpenSolaris 2008.11 已于前些日子正式发布,它是 OpenSolaris的最新发行版本。对于用户、开发人员和部署人员来说,OpenSolaris 是一个功能强大而且完善的操作系统。它继承了 Solaris 安全、稳定且高度可伸缩的传统,更加贴近桌面用户,为用户提供了现代计算环境中所应有的工具。该发行版为桌面用户引进了很多新特性,本文将对其自动快照新特性进行介绍。

1)为什么要使用自动快照服务?

我在opensolaris下的snapshot及基于zfs的系统恢复这篇博客中,曾详细分析了opensolaris下的snapshot机制和定期进行snapshot的一些好处。但对普通桌面用户来说,他需要的可能是系统提供一种开销低,同时又能通过点几下鼠标进行设置,就能对重要文件进行自动snapshot和恢复到特定状态。OpenSolaris 2008.11为我们提供了这样的功能,使用文件管理器中的时间滑块功能就能浏览文件的更改记录,查看并恢复更改。有了自动快照服务,能极大的降低你误删文件可能造成的损失。

2ZFS自动快照服务的实现

SMFservice management facility)是solaris新一代的服务管理框架。SMF 提供了在传统 UNIX 启动脚本、init 运行级和配置文件的基础上进行扩充的基础结构。SMF 框架中的基本管理单元是服务实例实例是指服务的特定配置,每个 SMF 服务都有可能配置了多个版本。而且,同一版本的多个实例也可以在一个 Solaris 系统上运行。SMF的系统框图如下:

snapshot_pic1

repository.db存放了所有服务的属性的值,比如ZFS自动快照服务的时间间隔之类的,当服务启动的时候需要加载这些值。svc.configd这个后台进程用于维护这个属性数据库,所有的对这个数据库的读或者写的操作都要经过这个进程,这样的设计保证了这个数据库的完整性。svc.startd这个后台进程在开机的时候使用,它将读出需要启动的每一个服务的属性的值,然后用这些值去启动这些服务。SMF toolsSMF的一些维护工具如svcadm

cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。cron 假定系统持续运行,如果当某任务被调度时系统不在运行,该任务就不会被执行。

ZFS自动快照服务包含在SUNWzfs-auto-snapshot程序包中,其利用了ZFSsnapshot特性和cron定时执行任务的功能,并被实现成SMF服务。在配置服务实例后,每当启动一个服务实例,就对应生成一个cron作业,自动定期对配置的文件进行snapshot。停止服务时,对应的cron作业被删除。当snapshots占到预设硬盘空间的一定百分比后,后台进程会删除最旧的一些snapshots

3ZFS自动快照服务的管理

OpenSolaris 2008.11ZFS自动快照服务之上,引进了时间滑块服务,并将这些功能整合进GNOME桌面环境。这些创新使得我们能轻松使用GNOME文件管理器,来管理ZFS自动快照服务。基于命令行的管理可以参见参考文献[3]

时间滑块功能默认是关闭的,可以通过System -> Administration -> time slider setup进行开启和设置

snapshot_pic2

要查看以前的备份,打开想查看的文件夹,如果下图中的红线标识的按钮可以,说明文件的备份可用。点击该按钮,就会显示时间滑块。

snapshot_pic3

时间滑块显示如下图,滑动滑快就能看到指定时间上的备份。

snapshot_pic4

显示以前版本的文件或目录后,就可以通过拖拽或复制粘贴将旧版本恢复到其他目录,也可以选中要恢复文件或文件夹,点击右键选择恢复到桌面。

snapshot_pic5

 

参考文献:

[1] http://blogs.sun.com/timf/

[2] http://blogs.sun.com/erwann/date/20081013

[3] http://docs.sun.com/app/docs/doc/817-2271/gbcxl?l=zh&q=Automatic+snapshot&a=view

This entry was posted in Solaris and tagged , . Bookmark the permalink.

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>