【51CTO独家特稿】本文对ZFS文件系统的特点、结构、命令、管理等方面进行了详细的介绍,读者可以通过本文了解管理ZFS文件系统的各种方法。
51CTO编辑推荐:下一代Linux文件系统
ZFS是Sun公司Jeff Bonwick在领导开发的一种128位文件系统,最早宣布于04年9月,代表"Zettabyte File System",ZFS文件系统是***个128位的文件系统,同时ZFS又被Sun称作史上***一个文件系统(The Last Word In File Systems)。ZFS作为一个全新的文件系统,全面抛弃传统File System + Volume Manager + Storage(文件系统+卷管理+存储)的架构,所有的存储设备是通过ZFS 池进行管理,只要把各种存储设备加入同一个ZFS 池,大家就可以轻松的在这个ZFS 池管理配置文件系统。
ZFS 分层结构
ZFS 包括一系列具有分层结构的存储元素,其中既有物理存储元素,又有逻辑存储元素。所有这些元素都以有助于方便管理的方式相关联。
◆存储池—是若干存储设备的集合,可由许多 ZFS 文件系统共享。存储池中的任何 ZFS 文件系统都可使用该池中任何磁盘上的任何存储空间。当需要更多存储器时,可以很容易地将更多磁盘添加到池中。池中的文件系统会立即开始使用新的存储设备。
◆数据集—ZFS 会指定池的特定部分用于存储。一般将这些部分称为数据集。在各种类型的数据集中,有文件系统、卷、克隆和快照。
◆文件系统数据集—这些数据集用于容纳文件系统,包括文件、文件夹以及文件夹中的文件夹。
◆卷数据集—与文件系统数据集相对,卷数据集提供原始存储空间,不在卷数据集上强制存储文件系统。卷数据集最常用于交换设备。只要需要使用未格式化的空间来存储数据(如在数据库中),就会使用卷数据集。图1是ZFS文件系统与传统文件系统的对比图。
图1 ZFS文件系统与传统文件系统的对比图
#p#
一 ZFS命令行工具简介
管理ZFS最简单的是使用命令行工具方式进行ZFS文件系统的配置。
1 了解zpool命令列表
zpool命令包括一组子命令如下:
◆create 使用指定的实际设备建立存储池
◆destroy摧毁一个ZFS存储池,但是不删除设备中数据
◆add 在存储池中添加虚拟设备
◆remove 在存储池中删除虚拟设备,但是不删除设备中数据
◆list 显示所有存储池
◆iostat查看存储池I/O状况
◆status 查看存储池健康状况
◆online把存储池状态设置为在线
◆offline把存储池状态设置为离线
◆clear 消除存储池设备错误计数
◆attach 固定一个设备在存储池中
◆detach 从存储池中分离设备
◆replace 替换存储池中的设备
◆scrub 校验存储池
◆import 导入存储池
◆export 导出存储池
◆upgrade 升级存储池
◆history 显示所有存储池操作命令
◆get 找回和列出存储池的设备
◆set 设置一个或者多个设备在一个存储池
2 了解zfs命令
ZFS命令包括一组子命令主要如下:
◆create 创建zfs文件系统
◆destroy 摧毁一个ZFS文件系统
◆snapshot 建立一个文件系统的快照
◆rollback 从一个文件系统的快照中恢复
◆clone 建立一个文件系统的克隆
◆promote 从一个克隆创建一个文件系统
◆upgrade 升级 ZFS 文集系统
◆list查看和询问数据集的信息
◆allow 将用于执行 ZFS 管理任务的细粒度权限委托给非特权用户
◆unallow 将用于执行 ZFS 管理任务的细粒度权限删除
◆share 共享zfs文件系统
◆unshared 取消共享zfs文件系统
◆rename 重命名 ZFS 快照
◆mount 挂载zfs文件系统
◆umount 卸载zfs文件系统
◆set 可以设置或修改数据集的属性
◆get 得到文件系统的一个专门属性
#p#
二 使用Web浏览器管理ZFS文件系统
1 基于Web浏览器的ZFS文件系统简介
前面介绍了使用命令管理ZFS文件系统,需要说明的是两个主要命令:zfs和zpool,每个大致300多个参数。对于初学者使用命令行有一些困难,所以在Solaris 10里我们在使用命令行进行ZFS的管理的同时,Solaris 10也为我们提供了一个WEB管理界面。利用此基于 Web 的 ZFS 管理工具可以执行某些管理任务,如设置参数、查看各种池和文件系统以及对它们进行更新。包括如下功能:
◆创建新的存储池。
◆向现有存储池添加容量。
◆将存储池移动(导出)到其他系统。
◆导入以前导出的存储池,使之可用于其他系统。
◆查看有关存储池的信息表。
◆创建文件系统。
◆创建卷。ZFS 中的卷标识代表块设备的数据集。
◆捕获文件系统或卷的快照。
◆将文件系统回滚到前一快照。
2 Java Web Console简介
Java Web Console 是一个Web 页,您可在其中查找在系统上安装和注册的、基于Web的Sun 系统管理应用程序。所有符合J2EE 的Web 应用程序都可用该Web 控制台进行注册,使经过验证和授权的用户可以使用该应用程序。注册是在安装过程中自动进行的,因此无需管理员介入。Java Web Console 包括以下两个管理命令:smcwebserver -此命令可启动和停止控制台的Web 服务器。smreg -此命令可注册应用程序和控制配置属性。从Java Web Console 的启动页启动应用程序步骤:
◆启动与JavaWeb Console 兼容的Web 浏览器,如Mozilla 或者Firefox。
◆在Web 浏览器的位置字段中键入URL。例如,如果知道管理服务器主机的IP,则URL 为https://ip:6789。通过此URL 将进入Web 控制台登录页面,将在这里进行验证和授权。接受服务器的证书,随后会显示该Web 控制台的登录页面。
◆对于服务器的证书只需接受一次,而无需在每次启动应用程序时都执行接受操作。
◆在验证成功之后,将显示启动页。
◆单击与要运行的应用程序相对应的链接。
说明:如果要在新窗口中运行应用程序,请单击相应的复选框。否则,该应用程序将在缺省窗口中运行,并取代启动页。如图2 。
图-2 Java Web Console管理页面
#p#
三使用Web浏览器管理ZFS文件系统实战
1 zfs的web管理页面布局
点击zfs管理链接进入zfs的web管理页面,如图 3 。
图 3 zfs的web管理页面
zfs的web管理页面右边的部分包括五大部分,十八个小项:
◆***使用
创建存储池
导入存储池
◆文件系统
创建文件系统
删除文件系统
将文件系统回滚到前一快照
◆卷
创建卷
删除卷
将卷回滚到前一快照
◆存储池
创建存储池
删除存储池
向存储池添加容量
导入存储池
导出存储池
替换存储池中的设备
◆快照
创建快照
删除快照
克隆文件系统快照
克隆卷快照
zfs的web管理页面左边的部分是控制面板包括两个部分,五个小项:
系统摘要/任务
◆存储池
◆文件系统
◆卷
◆快照
设备分层结构设备分层结构
#p#
2 存储池管理
ZFS 存储池是若干存储设备的集合,可由许多 ZFS 文件系统共享。例如,存储池可包含以下三个磁盘:/dev/dsk/c0t0d0、/dev/dsk/c0t1d0 和 /dev/dsk/c0t2d0。可以使用整个磁盘,而不是只使用磁盘的片来创建存储池。该存储池中的任何 ZFS 文件系统都可使用该池中任何磁盘上的任何存储空间。存储池中可包含任意数量的 ZFS 文件系统,直至达到该存储池中可用的存储空间的***容量。创建 ZFS 存储池后,可随时通过添加新设备来扩大该存储池。存储池中的文件系统会立即开始使用新的存储设备,而无需进行进一步配置。创建存储池包括五个步骤:
a. 命名存储池
命名存储池如图4。
图4 命名存储池
说明:有效的存储池名称必须以字母开头,其长度介于 1 到 256 个字符之间,并且可以包含以下字符:A-Z、a-z、0-9、.、_ 和 -。将保留某些名称(例如 mirror、raidz 和以 c 开头、后跟数字的名称),所以您不能使用这些名称。就冗余级别而言,选择“动态条带化(striping)”可以创建没有冗余的池。选择“镜像”或 "RAID-Z" 可以创建有冗余的池。
b.选择要包含的设备
选择要包含的设备如图5 。
图5 选择要包含的设备
c.检查所选的配置
检查名称以及为新存储池选择的设备如图6。
图6检查所选的配置
在创建存储池之前,如果要进行更改,请在“步骤”选项卡中单击前面的某个步骤,或单击“上一步”按钮在向导中向前导航。
d.预览要执行的命令
预览要执行的命令如图7。
图7预览要执行的命令
说明:通过此步骤,您可以查看更改 ZFS 配置时所使用的命令。这些命令将基于所选的选项将设备添加到请求的存储池。
单击“保存”按钮保存这些命令以供将来参考。这里命令是:#/usr/sbin/zpool create -f tank c2t2d0
e.查看命令结果
如果出现图8是成功建立存储池界面。
图8成功建立存储池界面
#p#
3 文件系统管理
创建文件系统包括四个步骤:
a.定义文件系统
命名新文件系统,然后选择父文件系统。可选择性地选择现有快照作为新文件系统的基础。如图9。
图9命名新文件系统
说明:有效的文件系统名称长度介于 1 到 256 个字符之间,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。此处还可以选择一个现有文件系统快照作为新文件系统的基础。如果要克隆现有快照,则新文件系统的存储池必须和包含要克隆的快照的存储池相同。新文件系统或克隆的内容最初和它所基于的现有文件系统快照相同。创建克隆几乎是瞬时的,并且最初不占用存储池的其他空间。下面为新文件系统指定挂载点如图10。
图10 新文件系统指定挂载点
说明:创建 ZFS 文件系统或快照后,会自动挂载该文件系统或快照。ZFS 通过为每个文件系统建立持久性的挂载点属性来管理文件系统挂载点,并始终在该位置上挂载文件系统。缺省情况下,会在 /<池名称>/<文件系统名称> 下挂载所有文件系统。缺省情况下也会启用以下选项:
◆校验和、压缩和存取时间
◆setuid—控制文件系统是否遵照 set-UID 位
◆exec—控制是否可从此文件系统中执行进程
◆devices—控制是否可在此文件系统中打开设备节点
此外,readonly 的缺省值为 off,readonly 控制是否可修改此数据集。
指定此文件系统的挂载点。包括几种:
◆无 - 不挂载此文件系统。
◆传统 - 只通过传统方法挂载此文件系统,如 /etc/vfstab 或 mount(1m) 命令。
◆继承 - 以父文件系统挂载点作为此文件系统挂载点的基础。
◆自定义挂载点 - 将覆盖缺省挂载点。
下面更改配额或预留空间如图11 。
图11 更改配额或预留空间
说明:配额设置文件系统的***容量。一旦达到该容量后,不管基础存储池的可用空间有多大,都无法再将数据写入文件系统。预留空间指定有多少存储池空间专用于此文件系统。***预留空间受存储池中的可用空间容量限制。
下面更改控制此文件系统如何工作的属性如图12 。
图12 更改控制此文件系统如何工作的属性
说明:更改控制此文件系统如何工作的属性。可从父文件系统继承每个属性,或为此文件系统明确设置这些属性。
属性分为两种类型:本机属性和用户定义的属性。本机属性用于导出内部统计信息或控制 ZFS 文件系统行为。此外,本机属性是可设置的或只读的。用户属性对 ZFS 文件系统行为没有影响,但可通过用户环境中有意义的方式来注释数据集。大多数可设置的属性也是可继承的。可继承属性是这样的属性:如果为父级设置了该属性,则该属性会向下传播给其所有后代。所有可继承属性都有一个关联源。源用于指明获取属性的方法。属性的源可具有以下值:
◆locallocal 源表示属性是使用 zfs set 命令对数据集进行显式设置的,如设置 ZFS 属性中所述。
◆inherited from dataset-name值为 inherited from dataset-name 表示属性是从指定的祖先继承的。
◆default值为 default 表示属性设置不是继承或本地设置的。如果没有祖先具有属性源 local,则会使用此源。
b. 检查所选的配置
检查所选的配置如图13
图13 检查所选的配置
说明:在创建文件系统之前,如果要进行更改,请在“步骤”选项卡上单击前面的某个步骤,或单击“上一步”按钮在向导中向前导航。
c.预览要执行的命令
预览要执行的命令如图14 。
图14 预览要执行的命令
说明:通过此步骤,您可以查看更改 ZFS 配置时所使用的命令。这些命令将基于所选的选项创建请求的文件系统。单击“保存”按钮保存这些命令以供将来参考。
d.查看命令结果
如果出现命令执行成功字样是成功建立文件系统的标志。
#p#
4 ZFS文件系统的实时监控
我们可以使用zfs list 和zpool list等命令对ZFS文件系统的实时监控。通过web浏览器方式也可以完成。
a 查看存储池
通过点击控制面板的存储池链接可以查看存储池情况如图15 。
图15 查看存储池
每个存储池的属性页都包含“常规”部分,其中会显示“池状态”。 表1 介绍了每个可能的状态值,
表1存储池状态
状态 | 描述 |
正常 | 存储池正常运行,未出现错误。 |
缺少带有副本的设备 | 一个或多个设备无法打开。存在足够的副本可供池在降级的状态下继续工作。 |
缺少不带副本的设备 | 一个或多个设备无法打开。没有足够的副本可供池继续工作。 |
带有副本的设备标签错误 | 由于缺少标签或标签无效而导致一个或多个设备无法使用。存在足够的副本可供池在降级的状态下继续工作。 |
不带副本的设备标签错误 | 由于缺少标签或标签无效而导致一个或多个设备无法使用。没有足够的副本可供池继续工作。 |
设备遇到错误 | 一个或多个设备发生了不可修复的错误。已尝试修复错误。应用程序未受影响。 |
设备脱机 | 管理员已将一个或多个设备转至脱机状态。存在足够的副本可供池在降级的状态下继续工作。 |
正在重新同步 | 当前一个或多个设备正在进行重新同步。在重新同步期间,ZFS 会检查确认即将过期的指定存储池中的所有数据,以验证数据是否正确执行校验和。ZFS 会自动修复重新同步期间发现的所有受损数据。该池将可能在降级的状态下继续工作。 |
b 查看文件系统
通过点击控制面板的文件系统池链接可以查看文件系统情况。
输出实际是zfs list 命令的html格式的显示。
此外通过点击控制面板的池可以查看卷使用情况。
点击控制面板的快照链接可以查看快照使用情况。
到此为止笔者介绍了管理Solaris 10 ZFS文件系统的方法。在下一篇里,笔者会以Opensolaris 为例介绍管理ZFS文件系统的不同方法,包括使用时间滑块和shell脚本。
【编辑推荐】