Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1275607
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-14 11:41:36


在安装了区域的Solaris 系统中使用ZFS
第8 章• ZFS 高级主题133
向非全局区域中添加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 仿真卷导出到区域中。请注意,即使卷不与物理设备对应,向区域中
添加原始卷仍然可能存在安全风险。具体来说,区域管理员可能会创建格式错误的文件系
统,这在尝试挂载时会使系统发出警告音。有关向区域中添加设备以及相关的安全风险的
更多信息,请参见第135 页中的“了解zoned 属性”。
有关向区域中添加设备的更多信息,请参见《System Administration Guide: Solaris
Containers-Resource Management and Solaris Zones》中的第二部分,“Zones”。
在区域中使用ZFS 存储池
不能在区域中创建或修改ZFS 存储池。委托的管理模型可将对全局区域内的物理存储设备
的控制以及对虚拟存储的控制集中到非全局区域。尽管可向区域中添加池级别数据集,但
区域内不允许使用用于修改该池的物理特征的任何命令,如创建、添加或删除设备。即使
使用zonecfg 命令的add device 子命令向区域中添加物理设备或是已使用了文件,zpool 命
令也不允许在该区域内创建任何池。
区域内的属性管理
一旦将数据集添加到区域,区域管理员便可控制特定的数据集属性。将数据集添加到区域
时,该数据集所有祖先都显示为只读数据集,而该数据集本身则与其所有子级一样是可写
的。例如,请参考以下配置:
在安装了区域的Solaris 系统中使用ZFS
134 Solaris ZFS 管理指南• 2006 年10 月
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 二进制命令、符号链接或可能对全局区
在安装了区域的Solaris 系统中使用ZFS
第8 章• ZFS 高级主题135
域的安全性造成不利影响的可疑内容。此外,不能在全局区域的上下文中解释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 备用根池
136 Solaris ZFS 管理指南• 2006 年10 月
创建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 备用根池
第8 章• ZFS 高级主题137
ZFS 权限配置文件
如果要在不使用超级用户(root) 帐户的情况下执行ZFS 管理任务,则可采用具有以下任一配
置文件的角色来执行ZFS 管理任务:
 ZFS 存储管理-可用于在ZFS 存储池内创建、销毁和处理设备
 ZFS 文件系统管理-可用于创建、销毁和修改ZFS 文件系统
有关创建或分配角色的更多信息,请参见《System Administration Guide: Security
Services》。
ZFS 权限配置文件
138 Solaris ZFS 管理指南• 2006 年10 月
ZFS 疑难解答和数据恢复
本章介绍如何确定ZFS 故障模式以及如何从相应故障模式中恢复。还提供了有关预防故障
的信息。
本章包含以下各节:
 第139 页中的“ZFS 故障模式”
 第140 页中的“检查ZFS 数据完整性”
 第142 页中的“确定ZFS 中的问题”
 第147 页中的“修复损坏的ZFS 配置”
 第147 页中的“修复缺少的设备”
 第149 页中的“修复损坏的设备”
 第154 页中的“修复损坏的数据”
 第157 页中的“修复无法引导的系统”
ZFS 故障模式
作为组合的文件系统和卷管理器,ZFS 可以呈现许多不同的故障模式。本章首先概述各种故
障模式,然后讨论如何在正运行的系统上确定各种故障。本章最后讨论如何修复问题。ZFS
可能会遇到以下三种基本类型的错误:
 缺少设备
 设备已损坏
 数据已损坏
请注意,单个池可能会遇到所有这三种错误,因此完整的修复过程依次查找和更正各个错
误。
ZFS 存储池中缺少设备
如果某设备已从系统中彻底删除,则ZFS 会检测到该设备无法打开,并将其置于FAULTED 状
态。这可能会导致整个池变得不可用,但也可能不会,具体取决于池的数据复制级别。如
9第9 章
139
果镜像设备或RAID-Z 设备中的一个磁盘被删除,仍可以继续访问池。如果删除了镜像的所
有组件,删除了RAID-Z 设备中的多个设备,或删除了单磁盘顶层设备,则池将变成
FAULTED。在重新连接设备之前,无法访问任何数据。
ZFS 存储池中的设备已损坏
术语“损坏”包含各种可能出现的错误。以下是错误示例:
 由于损坏的磁盘或控制器而导致的瞬态I/O 错误
 磁盘上的数据因宇宙射线而损坏
 导致数据传输至错误目标或从错误源位置传输的驱动程序错误
 只是另一个用户意外地覆写了物理设备的某些部分
在一些情况下,这些错误是瞬态的,如控制器出现问题时的随机I/O 错误。在另外一些情况
下,损坏是永久性的,如磁盘损坏。但是,若损坏是永久性的,则并不一定表明该错误很
可能会再次出现。例如,如果管理员意外覆写了磁盘的一部分,且未出现某种硬盘故障,
则不需要替换该设备。准确确定设备出现的错误不是一项轻松的任务,在稍后的一节中将
对此进行更详细的介绍。
ZFS 数据已损坏
一个或多个设备错误(指示缺少设备或设备已损坏)影响顶层虚拟设备时,将出现数据损
坏。例如,镜像的一半可能会遇到数千个绝不会导致数据损坏的设备错误。如果在镜像另
一面的完全相同位置中遇到错误,则会导致数据损坏。
数据损坏始终是永久性的,因此在修复期间需要特别注意。即使修复或替换基础设备,也
将永远丢失原始数据。这种情况通常要求从备份恢复数据。在遇到数据错误时会记录错
误,并可以通过常规磁盘清理对错误进行控制,如下一节所述。删除损坏的块后,下一遍
清理会识别出数据损坏已不再存在,并从系统中删除该错误的任何记录。
检查ZFS 数据完整性
对于ZFS,不存在与fsck 等效的实用程序。此实用程序一直以来用于两个目的:数据修复
和数据验证。
数据修复
对于传统的文件系统,写入数据的方法本身容易出现导致数据不一致的意外故障。由于传
统的文件系统不是事务性的,因此可能会出现未引用的块、错误的链接计数或其他不一致
的数据结构。添加日志记录确实解决了其中的一些问题,但是在无法回滚日志时可能会带
来其他问题。对于ZFS,这些问题都不存在。磁盘上存在不一致数据的唯一原因是出现硬盘
故障(在这种情况下,应该已复制池)或ZFS 软件中存在错误。
检查ZFS 数据完整性
140 Solaris ZFS 管理指南• 2006 年10 月
假定fsck 实用程序设计用于修复特定于单独文件系统的已知异常,为没有已知反常的文件
系统编写这样的实用程序就是不可能的。将来的经验可能证明某些数据损坏问题是足够常
见、足够简单的,以致于可以开发修复实用程序,但是使用复制的池始终可以避免这些问
题。
如果未复制池,则数据损坏造成无法访问某些或所有数据的可能性将始终存在。
数据验证
除了数据修复外,fsck 实用程序还验证磁盘上的数据是否没有问题。过去,此任务是通过
取消挂载文件系统再运行fsck 实用程序执行的,在该过程中可能会使系统进入单用户模
式。此情况导致的停机时间的长短与所检查文件系统的大小成比例。ZFS 提供了一种对所有
数据执行常规检查的机制,而不是要求显式实用程序执行必要的检查。此功能称为清理,
在内存和其他系统中经常将它用作一种在错误导致硬盘或软件故障之前检测和防止错误的
方法。
控制ZFS 数据清理
每当ZFS 遇到错误时(不管是在清理中还是按需访问文件时),都会在内部记录该错误,
以便您可以快速查看池中所有已知错误的概览信息。
显式ZFS 数据清理
检查数据完整性的最简单的方法是,对池中所有数据启动显式清理操作。此操作对池中的
所有数据遍历一次,并验证是否可以读取所有块。尽管任何I/O 的优先级一直低于常规操作
的优先级,但是清理以设备所允许的最快速度进行。虽然进行清理时文件系统应该保持可
用而且几乎都做出响应,但是此操作可能会对性能产生负面影响。要启动显式清理,请使
用zpool scrub 命令。例如:
# zpool scrub tank
可以在zpool status 输出中显示当前清理的状态。例如:
# zpool status -v tank
pool: tank
state: ONLINE
scrub: scrub completed with 0 errors on Tue Mar 7 15:27:36 2006
config:

 

以上文章转自于 : http://developers.sun.com.cn/

阅读(474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~