【51CTO独家特稿】在全面了解Solaris 10 ZFS文件系统的管理一文当中,我们对ZFS文件系统的特点、结构、命令、管理等方面进行了详细的介绍。本篇文章是之前一篇的续作,将以OpenSolaris为例,介绍管理ZFS文件系统的不同方法。
51CTO编辑推荐:下一代Linux文件系统
ZFS文件系统的快照是一个很方便的功能,可以轻松地对系统进行备份、恢复而无需担心系统受到修改。你可以通过命令行进行快照的创建、删除和修改,也可以通过浏览器进行图形化的管理。除此之外,OpenSolaris中还提供了非常方便的时间滑块功能,而我们还可以更加方便的使用一些shell脚本组合进行批处理。
一、ZFS文件系统快照简介
快照是文件系统或卷在给定时间点上的只读版本。使用文件系统快照可以对动态文件系统进行联机备份。快照若与日志技术相结合,可实现文件系统的快速恢复。快照行为类似于文件系统的只读副本,反映文件系统在创建快照的时间点的状态。快照对于备份和最终用户能否从错误中恢复非常重要。可从文件系统根目录中的 .zfs/snapshot 目录下访问文件系统快照。
用户通常无需使用磁带备份便可恢复意外删除的文件,并可在开始进行风险升级或执行其他任务前捕获快照,以便在需要时可以回复到升级或执行其他任务前的状态。ZFS 允许进行回复或“回滚”,这可将文件系统的内容复位到捕获该快照时的状态。ZFS 利用写复制 (copy-on-write, COW) 机制来存储数据,并且几乎可以作为数据存储的副效应来生成快照。COW 在将新数据写入磁盘前会读入旧数据。之后,COW 会将旧数据写入某个新位置以供快照使用。此读取和复制数据的过程同时适用于用户数据和文件系统的专用数据(元数据)。任何后续写入操作都将导致通过 COW 机制分配新块,因此永远不会修改组成快照的那些块。
从本质上而言,从某个备份进行恢复的步骤与从传统备份恢复的步骤是一样的:
◆重建文件系统。
◆恢复完整备份。
◆恢复每个增量备份。
我们也可以创建某个特定快照的克隆(克隆指一个其初始内容与某个快照的内容相同的文件系统)。正如可以修改其他文件系统属性一样,可以修改克隆的属性和内容。
二、使用命令创建和删除ZFS快照
我们使用zfs snapshot命令来创建快照,这个命令只有一个变量就是快照的名字。快照名字如下所示:
filesystem@snapname
volume@snapname
◆创建快照
# zfs snapshot rpool/tank@sun
通过使用 -r 选项可为所有后代文件系统创建快照。
# zfs snapshot -r tank1/home@now
然后使用命令查看所有快照,如图1 。
# zfs list -t snapshot
图1 使用命令查看所有快照
说明:快照不能被修改属性,也不能使数据集的属性应用到快照上。
◆删除快照
请使用zfs destroy命令删除快照:
# zfs destroy tank/home/ahrens@Friday
在快照存在的情况下,数据集不能被删除。另外,如果存在快照的克隆,也不能删除数据集。
◆修改快照名称
可以使用zfs rename命令,给快照改名字。
将cindys快照的名字改为today:
# zfs rename tank/home/cindys@111205 pool/home/cindys@today
◆显示和访问ZFS快照
快照可以使用下面的方法进行显示:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT tank/home@now 0 - 19K - tank1/home@now 0 - 19K - tank1/home/bo@now 16K - 18K -
◆恢复到最初的快照
使用zfs rollback命令能使快照放弃所有的改变,恢复到建立快照的最初状态。如果有些最近的快照的话,使用-r选项能强制删除这些快照,而恢复到最初的快照。
恢复pool/home/ahrens文件系统的星期二的快照:
# zfs rollback pool/home/ahrens@tuesday # zfs rollback -r pool/home/ahrens@tuesday
#p#
三 通过浏览器管理快照
1 安装配置Java Web Console
和Solaris 10相比,OpenSolaris 没有预先配置Java Web Console,需要自行安装配置,这里需要使用Solaris 10 安装DVD光盘或者ISO文件。
安装操作如下:
# lofiadm -a sol-10-u8-ga-x86-dvd.iso /dev/lofi/1 # mkdir /mnt2 # mount -F hsfs /dev/lofi/1 /mnt2 # cd Solaris_10/ # cd Product/ # cp -rf SUNWjhrt SUNWjhdev SUNWj5dev SUNWj5rt SUNWj6rt SUNWjato SUNWmconr SUNWmcon SUNWmcos SUNWmcosx SUNWmctag SUNWmfrun SUNWzfsgr SUNWzfsgu /var/spool/pkg # pkgadd
配置Java Web Console :
执行以下命令以恢复对 RPC 通信的外部访问。
# svccfg svc:> select system/webconsole svc:/system/webconsole> setprop options/tcp_listen=true svc:/system/webconsole> quit # /usr/sbin/smcwebserver start starting Sun Java(TM) Web Console Version 3.1 ... The console is running # netstat -a | grep 6789 *.6789 *.* 0 0 49152 0 LISTEN *.6789 *.* 0 0 49152 0 LISTEN
最后一条命令的输出应返回一个 6789 项,该项为用于连接到 Sun Java Web Console 的端口号。
如果希望服务器在系统引导时自动启动,请运行以下命令:
# /usr/sbin/smcwebserver enable
如果没有Solaris 10 安装DVD 光盘可以访问Oracle/Sun的官网(需注册)下载Java Web Console 3.0.2 软件包。安装过程从略。
2 进入ZFS的管理界面
点击zfs管理链接进入zfs的web管理页面,如图 2 。
图2 zfs的web管理页面
相比Solaris 10,这里只有英文界面了,对于中国用户可能稍微有些麻烦,下面稍微说明下。
◆创建普通快照
包括四个部分:
a.定义快照
图3 定义快照
说明:有效的快照名称长度介于 1 到 256 个字符之间,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。
b.检查配置
图4检查配置
在创建快照之前,如果要进行更改,请在“步骤”选项卡中单击前面的某个步骤,或单击“上一步”按钮在向导中向前导航。
c.预览要执行的命令
在创建快照之前,可以预览所要执行的命令。
d.查看命令结果
如果出现命令执行成功字样是成功建立快照成功的标志。
◆克隆文件系统快照
克隆指一个其初始内容与某个快照的内容相同的文件系统。借助克隆,可对文件系统进行快速复制,这种方法可高效利用空间。克隆最适用于需要某个数据集的许多几乎完全相同的副本的情况。例如,可能有多个系统映像,每个区域对应一个系统映像。与其他文件系统一样,可以修改克隆的设置和内容。克隆文件系统快照同样包括四个步骤:
定义文件系统克隆、检查配置、预览要执行的命令、以及查看命令结果。
图5 定义文件系统克隆
和之前一样。有效的文件系统名称长度介于 1 到 256 个字符之间,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。此处还必须选择一个现有文件系统快照,以作为新文件系统的基础。新文件系统的存储池必须和包含要克隆的快照的存储池相同。新文件系统或克隆的内容最初和它所基于的现有文件系统快照相同。第2-4个步骤与之前一样,此处不再赘述。
#p#
四、ZFS自动快照服务的管理:时间滑块
OpenSolaris在ZFS自动快照服务之上引进了时间滑块服务,并将这些功能整合进GNOME桌面环境。这些创新使得我们能轻松使用GNOME文件管理器来管理ZFS自动快照服务。时间滑块功能默认是关闭的,可以通过系统-系统管理-时间滑块进行开启和设置,如图6 。
图6 时间滑块进行开启和设置
要查看以前的备份,打开想查看的文件夹,如果下图中的红线标识的按钮可以,说明文件的备份可用。点击该按钮,就会显示时间滑块。时间滑块显示如图7,滑动滑快就能看到指定时间上的备份。
图7 时间滑块显示
显示以前版本的文件或目录后,就可以通过拖拽或复制粘贴将旧版本恢复到其他目录,也可以选中要恢复文件或文件夹,点击右键选择恢复到桌面。
五、使用shell脚本管理ZFS
从命令行输入命令时,每输入一次命令,就可得到系统的一次响应。当需要经常一个接一个地连续执行命令,而得到最后的结果时,再像这种操作方法进行操作就显得没有效率了。在这种情况下,可以利用shell程序或shell脚本来实现这一目的。刚开始理解shell编程的时候,可以把它想像成DOS下的批处理程序。DOS离不开批处理,每一个DOS甚至是Windows都会由一个批处理文件(autoexec.bat)在它在启动后不久运行一连串的程序,完成为用户服务的准备工作。同样,在Unix系统中,用户也可以为每次登录系统配置环境、删除垃圾文件等,这就要用到shell编程。shell程序器其实不像批处理程序,它远比批处理要强大。shell编程有很多C语言和其他编程语言的特征,然而又没有编程语言那么复杂。shell程序是通过文本编辑程序放在一个文件中的一系列Unix命令和实用程序。执行shell程序时,通过Unix一个接一个地解释和执行每个命令。
一位国外的资深系统管理员Prashant Shashikant在Sun的社区上分享了一系列管理ZFS的shell脚本组合,51CTO的读者们可以在这里下载它们:
http://www.sun.com/bigadmin/scripts/submittedScripts/zfsufs_scripts.zip
您可以修改该脚本也可以直接使用。建立一个用户名pilankar
,并且建立一个目录/export/home/pilankar/fs-scripts 把zip解压缩到该目录
命令行下运行fsadmin
脚本就可以使用。这些脚本可用于执行以下任务:
◆创建一个ZFS存储池
◆添加到存储池设备
◆创建一个存储池在一个文件系统
◆设置配额在ZFS文件系统
◆创建一个镜像存储池
◆添加到设备镜像存储池
◆创建一个RAID - Z的(增强RAID5的)存储池
◆添加至RAID - Z的存储池设备
◆摧毁一个存储池
◆确定是否问题存在于一个存储池
◆创建的UFS文件系统,并且安装
命令行下运行fsadmin
脚本工作界面如图8
图 8使用shell脚本管理ZFS
脚本的使用详细教程可参考Prashant写的技术文档。
【编辑推荐】