免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1190 | 回复: 0
打印 上一主题 下一主题

第 8 章  ZFS高级主题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-21 12:38 |只看该作者 |倒序浏览

第 8 章 ZFS 高级主题
本章介绍仿真卷、在安装了区域的 Solaris 系统中使用 ZFS、ZFS 备用根池以及 ZFS 权限配置文件。
本章包含以下各节:

仿真卷
仿真卷是表示块设备的数据集,其使用方式与任何块设备类似。ZFS 卷被标识为 /dev/zvol/{dsk,rdsk}/path 目录中的设备。
以下示例将创建 5 GB 的 ZFS 卷 tank/vol。
# zfs create -V 5gb tank/vol
创建卷时,会自动将预留空间设置为卷的初始大小。预留空间大小一直等于卷的大小,因此可防止出现意外行为。例如,如果卷大小减小,则可能导致数据受损。更改卷大小时请务必小心。
如果使用安装了区域的 Solaris 系统,则不能在非全局区域中创建或克隆 ZFS 卷。 在非全局区域中创建或克隆卷的任何尝试都将失败。有关在全局区域中使用 ZFS 卷的信息,请参见
向非全局区域中添加 ZFS 卷

作为交换设备或转储设备的仿真卷
要设置交换区域,请创建一个特定大小的 ZFS 卷,然后在该设备中启用交换。在 ZFS 文件系统中,不要交换到文件。不支持 ZFS 交换文件配置。
在以下示例中,会添加一个 5 GB 的 tank/vol 卷作为交换设备。
# swap -a /dev/zvol/dsk/tank/vol
# swap -l
swapfile                 dev  swaplo blocks   free
/dev/dsk/c0t0d0s1      32,33      16 1048688  1048688
/dev/zvol/dsk/tank/vol 254,1      16 10485744 10485744
不支持使用 ZFS 卷作为转储设备。请使用 dumpadm 命令设置转储设备。
在安装了区域的 Solaris 系统中使用 ZFS
可将 ZFS 数据集作为通用文件系统或委托数据集添加到区域中。
通过添加通用文件系统,非全局区域可与全局区域共享空间,但区域管理员不能在基础文件系统分层结构中控制属性或创建新文件系统。这与向区域中添加其他任何类型的文件系统相同,应该在主要目的只是为了共享公用空间时才这样做。
使用 ZFS,还可将数据集委托给非全局区域,从而授予区域管理员对数据集及其所有子级的完全控制。区域管理员可以在此数据集中创建和销毁文件系统,并可修改数据集的属性。区域管理员无法影响尚未添加到区域中的数据集,也不能超过对所引入区域的数据集所设置的任何顶层配额。
向非全局区域中添加 ZFS 文件系统
如果目标只是与全局区域共享空间,则可添加 ZFS 文件系统作为通用文件系统。添加到非全局区域的 ZFS 文件系统必须将其 mountpoint 属性设置为 legacy。
可以使用 zonecfg 命令的 add fs 子命令将 ZFS 文件系统添加到非全局区域中。例如:
在以下示例中,全局区域中的全局管理员会向非全局区域中添加一个 ZFS 文件系统。
# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=tank/zone/zion
zonecfg:zion:fs> set dir=/export/shared
zonecfg:zion:fs> end
此语法可向挂载在 /export/shared 中的区域 zion 中添加 ZFS 文件系统 tank/zone/zion。文件系统的 mountpoint 属性必须设置为 legacy,并且该文件系统不能已在其他位置挂载。区域管理员可在文件系统中创建和销毁文件。不能在其他位置重新挂载文件系统,区域管理员也不能更改该文件系统的属性,如 atime、readonly、compression 等。全局区域管理员负责设置和控制文件系统的属性。
有关 zonecfg 命令以及使用 zonecfg 配置资源类型的信息,请参见
《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”
中的第二部分,“Zones”。
将数据集委托给非全局区域
如果主要目标是将存储管理委托给区域,则 ZFS 支持通过使用 zonecfg 命令的 add dataset 子命令向非全局区域中添加数据集。
在以下示例中,全局区域中的全局管理员会将一个 ZFS 文件系统委托给非全局区域。
# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=tank/zone/zion
zonecfg:zion:dataset> end
与添加文件系统不同,此语法会使 ZFS 文件系统 tank/zone/zion 在区域 zion 中可见。区域管理员可以设置文件系统属性,也可以创建其子级。此外,区域管理员还可以拍摄快照、创建克隆或控制整个文件系统分层结构。
有关区域内所允许的操作的更多信息,请参见
区域内的属性管理

向非全局区域中添加 ZFS 卷
不能使用 zonecfg 命令的 add dataset 子命令向非全局区域中添加仿真卷。如果检测到要尝试添加仿真卷,则区域将无法引导。但是,可以使用 zonecfg 命令的 add device 子命令向区域中添加卷。
在以下示例中,全局区域中的全局管理员会向非全局区域添加一个 ZFS 仿真卷:
# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add device
zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol
zonecfg:zion:device> end
此语法可将 tank/vol 仿真卷导出到区域中。请注意,即使卷不与物理设备对应,向区域中添加原始卷仍然可能存在安全风险。具体来说,区域管理员可能会创建格式错误的文件系统,这在尝试挂载时会使系统发出警告音。有关向区域中添加设备以及相关的安全风险的更多信息,请参见
了解 zoned 属性

有关向区域中添加设备的更多信息,请参见
《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”

在区域中使用 ZFS 存储池
不能在区域中创建或修改 ZFS 存储池。委托的管理模型可将对全局区域内的物理存储设备的控制以及对虚拟存储的控制集中到非全局区域。尽管可向区域中添加池级别数据集,但区域内不允许使用用于修改该池的物理特征的任何命令,如创建、添加或删除设备。即使使用 zonecfg 命令的 add device 子命令向区域中添加物理设备或是已使用了文件,zpool 命令也不允许在该区域内创建任何池。
区域内的属性管理
一旦将数据集添加到区域,区域管理员便可控制特定的数据集属性。将数据集添加到区域时,该数据集所有祖先都显示为只读数据集,而该数据集本身则与其所有子级一样是可写的。例如,请参考以下配置:
global# zfs list -Ho name
tank
tank/home
tank/data
tank/data/matrix
tank/data/zion
tank/data/zion/home
如果将 tank/data/zion 添加到区域中,则每个数据集都将具有以下属性。
数据集
可见
可写
不变属性
tank


-
tank/home

-
-
tank/data


-
tank/data/matrix

-
-
tank/data/zion


sharenfs、zoned、quota、reservation
tank/data/zion/home


sharenfs、zoned
请注意,tank/zone/zion 的每个父级都会显示为只读,所有子级都可写,并且不属于父级分层结构的数据集完全不可见。由于非全局区域不能充当 NFS 服务器,因此区域管理员无法更改 sharenfs 属性。区域管理员也不能更改 zoned 属性,否则将产生下节介绍的安全风险。
可以更改其他任何属性,但添加的数据集本身除外,因为其中的 quota 和 reservation 属性不能更改。全局区域管理员借助此行为可以控制非全局区域所使用的所有数据集的空间占用情况。
此外,一旦将数据集添加到非全局区域中,全局区域管理员便无法更改 sharenfs 和 mountpoint 属性。
了解 zoned 属性
将数据集添加到非全局区域中时,必须对该数据集进行特殊标记,以便不在全局区域的上下文中解释特定属性。一旦将数据集添加到受区域管理员控制的非全局区域中,便不能再信任其内容。与任何文件系统一样,可能存在 setuid 二进制命令、符号链接或可能对全局区域的安全性造成不利影响的可疑内容。此外,不能在全局区域的上下文中解释 mountpoint 属性。否则,区域管理员可能会影响全局区域的名称空间。为解决后一个问题,ZFS 使用 zoned 属性来指示已在某一时刻将数据集委托给非全局区域。
zoned 属性是在首次引导包含 ZFS 数据集的区域时自动启用的布尔值。区域管理员将无需手动启用此属性。如果设置了 zoned 属性,则不能在全局区域中挂载或共享数据集,并且执行 zfs share -a 命令或 zfs mount -a 命令时将忽略该数据集。以下示例会将 tank/zone/zion 添加至区域中,但不能添加 tank/zone/global:
# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion
请注意 mountpoint 属性与当前挂载 tank/zone/zion 数据集的目录之间的差异。mountpoint 属性反映的是磁盘上存储的属性,而不是数据集当前在系统中的挂载位置。
从区域中删除数据集或销毁区域时,不会自动清除 zoned 属性。此行为是由与这些任务关联的固有安全风险引起的。由于不受信任的用户已对数据集及其子级具有完全访问权限,因此 mountpoint 属性可能会设置为错误值,或在文件系统中可能存在 setuid 二进制命令。
为了防止意外的安全风险,要通过任何方式重用数据集时必须由全局管理员手动清除 zoned 属性。将 zoned 属性设置为 off 之前,请确保数据集及其所有子级的 mountpoint 属性均已设置为合理值并且不存在 setuid 二进制命令,或禁用 setuid 属性。
确定没有任何安全漏洞后,即可使用 zfs set 或 zfs inherit 命令禁用 zoned 属性。如果在区域正在使用数据集时禁用 zoned 属性,则系统的行为方式可能无法预测。仅当确定非全局区域不再使用数据集时,才能更改该属性。
ZFS 备用根池
创建池时,该池将固定绑定到主机系统。主机系统一直掌握着池的状况信息,以便可以检测到池何时不可用。此状况信息虽然对于正常操作很有用,但在从备用介质引导或在可移除介质上创建池时则会成为障碍。为解决此问题,ZFS 提供了备用根池功能。系统重新引导之后备用根池不会保留,并且所有挂载点都会被修改以与该池的根相关。
创建 ZFS 备用根池
创建备用根池的最常见目的是为了与可移除介质结合使用。在这些情况下,用户通常需要一个单独的文件系统,并且希望在目标系统中选择的任意位置挂载该系统。使用 -R 选项创建备用根池时,根文件系统的挂载点将自动设置为 /,这与备用根本身等效。
在以下示例中,名为 morpheus 的池是通过将 /mnt 作为备用根路径来创建的:
# zpool create -R /mnt morpheus c0t0d0
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt/
请注意单个文件系统 morpheus,其挂载点是池 /mnt 的备用根。存储在磁盘上的挂载点是 /,/mnt 的全路径仅在备用根池的上下文中才会进行解释。然后,可在不同系统的任意备用根池下导出和导入此文件系统。
导入备用根池
也可以使用备用根来导入池。如果挂载点不是在当前根的上下文中而是在可以执行修复的某个临时目录下解释的,则可以使用此功能进行恢复。在挂载可移除介质时(如上所述),也可以使用此功能。
在以下示例中,名为 morpheus 的池是通过将 /mnt 作为备用根路径来导入的。本示例假定之前已导出了 morpheus。
# zpool import -R /mnt morpheus
# zpool list morpheus
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
morpheus               33.8G   68.0K   33.7G     0%  ONLINE     /mnt
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt/morpheus
ZFS 权限配置文件
如果要在不使用超级用户 (root) 帐户的情况下执行 ZFS 管理任务,则可采用具有以下任一配置文件的角色来执行 ZFS 管理任务:


  • ZFS 存储管理-可用于在 ZFS 存储池内创建、销毁和处理设备

  • ZFS 文件系统管理-可用于创建、销毁和修改 ZFS 文件系统

有关创建或分配角色的更多信息,请参见
《系统管理指南:安全性服务》



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26090/showart_325728.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP