文件系统chmod用法

chmod用法  时间:2021-04-05  阅读:()

文件号码E53918-022014年12月在OracleSolaris11.
2中管理ZFS文件系统版权所有2006,2014,Oracle和/或其附属公司.
保留所有权利.
本软件和相关文档是根据许可证协议提供的,该许可证协议中规定了关于使用和公开本软件和相关文档的各种限制,并受知识产权法的保护.
除非在许可证协议中明确许可或适用法律明确授权,否则不得以任何形式、任何方式使用、拷贝、复制、翻译、广播、修改、授权、传播、分发、展示、执行、发布或显示本软件和相关文档的任何部分.
除非法律要求实现互操作,否则严禁对本软件进行逆向工程设计、反汇编或反编译.
此文档所含信息可能随时被修改,恕不另行通知,我们不保证该信息没有错误.
如果贵方发现任何问题,请书面通知我们.
如果将本软件或相关文档交付给美国政府,或者交付给以美国政府名义获得许可证的任何机构,必须符合以下规定:U.
S.
GOVERNMENTENDUSERS:Oracleprograms,includinganyoperatingsystem,integratedsoftware,anyprogramsinstalledonthehardware,and/ordocumentation,deliveredtoU.
S.
Governmentendusersare"commercialcomputersoftware"pursuanttotheapplicableFederalAcquisitionRegulationandagency-specificsupplementalregulations.
Assuch,use,duplication,disclosure,modification,andadaptationoftheprograms,includinganyoperatingsystem,integratedsoftware,anyprogramsinstalledonthehardware,and/ordocumentation,shallbesubjecttolicensetermsandlicenserestrictionsapplicabletotheprograms.
NootherrightsaregrantedtotheU.
S.
Government.
本软件或硬件是为了在各种信息管理应用领域内的一般使用而开发的.
它不应被应用于任何存在危险或潜在危险的应用领域,也不是为此而开发的,其中包括可能会产生人身伤害的应用领域.
如果在危险应用领域内使用本软件或硬件,贵方应负责采取所有适当的防范措施,包括备份、冗余和其它确保安全使用本软件或硬件的措施.
对于因在危险应用领域内使用本软件或硬件所造成的一切损失或损害,OracleCorporation及其附属公司概不负责.
Oracle和Java是Oracle和/或其附属公司的注册商标.
其他名称可能是各自所有者的商标.
Intel和IntelXeon是IntelCorporation的商标或注册商标.
所有SPARC商标均是SPARCInternational,Inc的商标或注册商标,并应按照许可证的规定使用.
AMD、Opteron、AMD徽标以及AMDOpteron徽标是AdvancedMicroDevices的商标或注册商标.
UNIX是TheOpenGroup的注册商标.
本软件或硬件以及文档可能提供了访问第三方内容、产品和服务的方式或有关这些内容、产品和服务的信息.
对于第三方内容、产品和服务,OracleCorporation及其附属公司明确表示不承担任何种类的担保,亦不对其承担任何责任.
对于因访问或使用第三方内容、产品或服务所造成的任何损失、成本或损害,OracleCorporation及其附属公司概不负责.
3目录使用本文档111OracleSolarisZFS文件系统(介绍)13OracleSolaris新增的ZFS功能13什么是OracleSolarisZFS13ZFS池存储14事务性语义14校验和与自我修复数据14独一无二的可伸缩性15ZFS快照15简化管理15ZFS术语15ZFS组件命名要求17OracleSolarisZFS与传统文件系统的区别17ZFS文件系统粒度18ZFS磁盘空间记帐18挂载ZFS文件系统19传统卷管理20基于NFSv4的SolarisACL模型202OracleSolarisZFS入门21ZFS权限配置文件21ZFS硬件和软件要求及建议21创建基本ZFS文件系统22创建基本的ZFS存储池22如何确定ZFS存储池的存储要求23如何创建ZFS存储池23创建ZFS文件系统分层结构24如何确定ZFS文件系统分层结构24如何创建ZFS文件系统25目录4在OracleSolaris11.
2中管理ZFS文件系统2014年12月3管理OracleSolarisZFS存储池27ZFS存储池的组件27使用ZFS存储池中的磁盘27使用ZFS存储池中的分片29使用ZFS存储池中的文件30ZFS存储池的注意事项30ZFS存储池的复制功能31镜像存储池配置31RAID-Z存储池配置32ZFS混合存储池33冗余配置中的自我修复数据33存储池中的动态条带化33创建和销毁ZFS存储池33创建ZFS存储池34显示存储池虚拟设备信息39处理ZFS存储池创建错误40销毁ZFS存储池42管理ZFS存储池中的设备43向存储池中添加设备44附加和分离存储池设备48通过拆分镜像ZFS存储池创建新池50使存储池中的设备联机和脱机53清除存储池设备错误55替换存储池中的设备55在存储池中指定热备件57管理ZFS存储池属性62查询ZFS存储池的状态64显示有关ZFS存储池的信息65查看ZFS存储池的I/O统计信息69确定ZFS存储池的运行状况71迁移ZFS存储池76准备迁移ZFS存储池76导出ZFS存储池77确定要导入的可用存储池77从替换目录导入ZFS存储池79导入ZFS存储池79恢复已销毁的ZFS存储池83升级ZFS存储池85目录54管理ZFS根池组件87关于管理ZFS根池组件87确定ZFS根池要求88管理ZFS根池89安装ZFS根池89如何更新ZFS引导环境91如何挂载备用BE92如何配置镜像根池(SPARC或x86/VTOC)92如何配置镜像根池(x86/EFI(GPT)94如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)95如何替换ZFS根池中的磁盘(SPARC或x86/EFI(GPT)98如何在另一个根池中创建BE(SPARC或x86/EFI(GPT)99管理ZFS交换和转储设备101调整ZFS交换和转储设备的大小102ZFS转储设备故障排除103从ZFS根文件系统引导104从镜像ZFS根池中的备用磁盘引导104在基于SPARC的系统上从ZFS根文件系统引导105在基于x86的系统上从ZFS根文件系统引导107在ZFS根环境中进行引导以恢复系统1085管理OracleSolarisZFS文件系统113管理ZFS文件系统113创建、销毁和重命名ZFS文件系统114创建ZFS文件系统114销毁ZFS文件系统115重命名ZFS文件系统116介绍ZFS属性116ZFS只读本机属性124可设置的ZFS本机属性125ZFS用户属性130查询ZFS文件系统信息131列出基本ZFS信息131创建复杂的ZFS查询132管理ZFS属性133设置ZFS属性134继承ZFS属性134查询ZFS属性135挂载ZFS文件系统138目录6在OracleSolaris11.
2中管理ZFS文件系统2014年12月管理ZFS挂载点138挂载ZFS文件系统140使用临时挂载属性141取消挂载ZFS文件系统142共享和取消共享ZFS文件系统142传统的ZFS共享语法143新的ZFS共享语法144ZFS共享迁移/转换问题150排除ZFS文件系统共享问题151设置ZFS配额和预留空间152设置ZFS文件系统的配额153设置ZFS文件系统的预留空间156加密ZFS文件系统157更改加密ZFS文件系统的密钥159挂载加密的ZFS文件系统161升级加密的ZFS文件系统161ZFS压缩、重复数据删除和加密属性之间的交互162加密ZFS文件系统的示例162迁移ZFS文件系统164如何将文件系统迁移到ZFS文件系统165ZFS文件系统迁移故障排除166升级ZFS文件系统1666使用OracleSolarisZFS快照和克隆169ZFS快照概述169创建和销毁ZFS快照170显示和访问ZFS快照173回滚ZFS快照174确定ZFS快照的差异(zfsdiff)175ZFS克隆概述175创建ZFS克隆176销毁ZFS克隆176使用ZFS克隆替换ZFS文件系统177发送和接收ZFS数据177使用其他备份产品保存ZFS数据178识别ZFS快照流179发送ZFS快照180接收ZFS快照181监视ZFS发送流的进度182目录7向ZFS快照流应用不同的属性值183发送和接收复杂的ZFS快照流185远程复制ZFS数据1877使用ACL和属性保护OracleSolarisZFS文件189SolarisACL模型189ACL设置语法的说明190ACL继承193ACL属性194设置ZFS文件的ACL195以详细格式设置和显示ZFS文件的ACL197以详细格式对ZFS文件设置ACL继承202以缩写格式设置和显示ZFS文件的ACL207向ZFS文件应用特殊属性2128OracleSolarisZFS委托管理215ZFS委托管理概述215禁用ZFS委托权限216授予ZFS权限216授予ZFS权限(zfsallow)218删除ZFS委托权限(zfsunallow)219授予ZFS权限示例219显示ZFS授予的权限示例223删除ZFS授予的权限示例2259OracleSolarisZFS高级主题227ZFS卷227使用ZFS卷作为交换设备或转储设备228将ZFS卷用作iSCSILUN228在安装了区域的Solaris系统中使用ZFS229向非全局区域中添加ZFS文件系统230将数据集委托给非全局区域231向非全局区域中添加ZFS卷232在区域中使用ZFS存储池232在区域内管理ZFS属性232了解zoned属性233将区域复制到其他系统234通过备用根位置使用ZFS池235目录8在OracleSolaris11.
2中管理ZFS文件系统2014年12月使用备用根位置创建ZFS池235使用备用根位置导入池235使用临时名称导入池23610OracleSolarisZFS故障排除和池恢复237确定ZFS问题237解决一般的硬件问题238确定硬件和设备故障238ZFS错误消息的系统报告239确定ZFS存储池的问题239确定ZFS存储池中是否存在问题240查看ZFS存储池状态信息241解决ZFS存储设备问题244解决缺少设备或设备被移除的问题244更换或修复损坏的设备248更改池设备257解决ZFS存储池中的数据问题257解决ZFS空间问题257检查ZFS文件系统完整性259修复损坏的ZFS数据261确定数据损坏的类型262修复损坏的文件或目录263修复ZFS存储池范围内的损坏264修复损坏的ZFS配置266修复无法引导的系统26611建议的OracleSolarisZFS做法267建议的存储池做法267一般系统做法267ZFS存储池创建做法269针对性能的存储池做法272ZFS存储池维护和监视做法272建议的文件系统做法274根文件系统最佳做法274文件系统创建做法274用于监视ZFS文件系统的做法275AOracleSolarisZFS版本说明277ZFS版本概述277目录9ZFS池版本277ZFS文件系统版本278索引28110在OracleSolaris11.
2中管理ZFS文件系统2014年12月使用本文档11使用本文档概述-说明如何设置和管理ZFS文件系统.
目标读者-系统管理员.
必备知识-具备基本的OracleSolaris或UNIX系统管理经验和常规文件系统管理经验.
产品文档库有关本产品的最新信息和已知问题均包含在文档库中,网址为:http://www.
oracle.
com/pls/topic/lookupctx=solaris11.
获得Oracle支持Oracle客户可通过MyOracleSupport获得电子支持.
有关信息,请访问http://www.
oracle.
com/pls/topic/lookupctx=acc&id=info;如果您听力受损,请访问http://www.
oracle.
com/pls/topic/lookupctx=acc&id=trs.
反馈可以在http://www.
oracle.
com/goto/docfeedback上提供有关此文档的反馈.
12在OracleSolaris11.
2中管理ZFS文件系统2014年12月第1章OracleSolarisZFS文件系统(介绍)131第1章OracleSolarisZFS文件系统(介绍)本章概述了OracleSolarisZFS文件系统及其功能和优点.
本章还介绍了在本书所有其余部分中使用的一些基本术语.
本章包含以下各节:"什么是OracleSolarisZFS"[13]"ZFS术语"[15]"ZFS组件命名要求"[17]"OracleSolarisZFS与传统文件系统的区别"[17]OracleSolaris新增的ZFS功能当前的OracleSolaris发行版在ZFS文件系统中引入了以下ZFS功能.
使用临时池名称在共享存储或恢复场景中,您可以使用一个临时池名称创建或导入池.
有关详细信息,请参见"使用临时名称导入池"[236].
实时监控ZFS流传输进度.
有关详细信息,请参见"监视ZFS发送流的进度"[182].
支持统一归档,因此简化了配置根池恢复设置的过程.
有关更多信息,请参见《在OracleSolaris11.
2中使用统一归档文件进行系统恢复和克隆》.
什么是OracleSolarisZFSOracleSolarisZFS文件系统是一种从根本上改变文件系统管理方式的文件系统,并具有目前市面上的其他文件系统所没有的功能和优点.
ZFS强健、可伸缩,且易于管理.
什么是OracleSolarisZFS14在OracleSolaris11.
2中管理ZFS文件系统2014年12月ZFS池存储ZFS使用存储池的概念来管理物理存储.
以前,文件系统是在单个物理设备的基础上构造的.
为了利用多个设备和提供数据冗余性,引入了卷管理器的概念来提供单个设备的表示,以便无需修改文件系统即可利用多个设备.
此设计增加了复杂性,最终阻碍了特定文件系统的继续发展,因为这类文件系统无法控制虚拟卷数据的物理位置.
ZFS可完全避免使用卷管理.
ZFS将设备聚集到存储池中,而不是强制要求创建虚拟卷.
存储池描述了存储的物理特征(设备布局、数据冗余等),并充当可以从其创建文件系统的任意数据存储库.
文件系统不再受限于单个设备,允许它们与池中的所有文件系统共享磁盘空间.
您不再需要预先确定文件系统的大小,因为文件系统会在分配给存储池的磁盘空间内自动增长.
添加新存储器后,无需执行其他操作,池中的所有文件系统即可立即使用所增加的磁盘空间.
在许多方面,存储池与虚拟内存系统相似:将一个内存DIMM加入系统时,操作系统并不强迫您运行命令来配置内存并将其指定给个别进程.
系统中的所有进程都会自动使用所增加的内存.
事务性语义ZFS是事务性文件系统,这意味着文件系统状态在磁盘上始终是一致的.
传统文件系统可就地覆盖数据,这意味着如果系统断电(例如,在分配数据块到将其链接到目录中的时间段内断电),则会使文件系统处于不一致状态.
以前,此问题是通过使用fsck命令解决的.
此命令负责检查并验证文件系统状态,并尝试在操作过程中修复任何不一致性.
这种文件系统不一致问题曾给管理员造成巨大困扰,fsck命令并不保证能够解决所有可能的问题.
最近,文件系统引入了日志记录的概念.
日志记录过程在单独的日志中记录操作,在系统发生崩溃时,可以安全地重放该日志.
此过程会带来不必要的开销,因为需要两次写入数据,而这通常会导致一组新问题(如日志无法正确重放).
对于事务性文件系统,数据是使用写复制语义管理的.
数据永远不会被覆盖,并且任何操作序列会全部被提交或全部被忽略.
因此,文件系统绝对不会因意外断电或系统崩溃而被损坏.
尽管最近写入的数据片段可能丢失,但是文件系统本身将始终是一致的.
此外,只有在写入同步数据(使用O_DSYNC标志写入)后才返回,因此同步数据决不会丢失.
校验和与自我修复数据对于ZFS,所有数据和元数据都通过用户可选择的校验和算法进行验证.
提供校验和验证的传统文件系统出于卷管理层和传统文件系统设计的必要,会逐块执行此操作.
在传统设计中,某些故障可能导致数据不正确但没有校验和错误,如向错误位置写入完整的块等.
ZFS校验和的存储方式可确保检测到这些故障并可以正常地从其中进行恢复.
所有校验和验证与数据恢复都是在文件系统层执行的,并且对应用程序是透明的.
ZFS术语第1章OracleSolarisZFS文件系统(介绍)15此外,ZFS还会提供自我修复数据.
ZFS支持存储池具有各种级别的数据冗余性.
检测到坏的数据块时,ZFS会从另一个冗余副本中提取正确的数据,而且会用正确的数据替换错误的数据.
独一无二的可伸缩性ZFS文件系统的一个关键设计要素是可伸缩性.
该文件系统本身是128位的,所允许的存储空间是256quadrillionzettabyte(256x1015ZB).
所有元数据都是动态分配的,因此在首次创建时无需预先分配inode,否则就会限制文件系统的可伸缩性.
所有算法在编写时都考虑到了可伸缩性.
目录最多可以包含248(256万亿)项,并且对于文件系统数或文件系统中可以包含的文件数不存在限制.
ZFS快照快照是文件系统或卷的只读副本.
可以快速而轻松地创建快照.
最初,快照不会占用池中的任何附加磁盘空间.
活动数据集中的数据更改时,快照通过继续引用旧数据来占用磁盘空间.
因此,快照可防止将数据释放回池中.
简化管理最重要的是,ZFS提供了一种极度简化的管理模型.
通过使用分层次的文件系统布局、属性继承以及自动管理挂载点和NFS共享语义,ZFS可轻松创建和管理文件系统,而无需使用多个命令或编辑配置文件.
可以轻松设置配额或预留空间,启用或禁用压缩,或者通过单个命令管理许多文件系统的挂载点.
您就可以检查或替换设备,而无需学习另外的一套卷管理命令.
您可以发送和接收文件系统快照流.
ZFS通过分层结构管理文件系统,该分层结构允许对属性(如配额、预留空间、压缩和挂载点)进行这一简化管理.
在此模型中,文件系统是中央控制点.
文件系统本身的开销非常小(相当于创建一个新目录),因此鼓励您为每个用户、项目、工作区等创建一个文件系统.
通过此设计,可定义细分的管理点.
ZFS术语本节介绍了在本书中使用的基本术语:引导环境引导环境是可引导的OracleSolaris环境,由ZFS根文件系统和在其下挂载的其他文件系统(可选)组成.
同一时间只能有一个引导环境处于活动状态.
ZFS术语16在OracleSolaris11.
2中管理ZFS文件系统2014年12月校验和文件系统块中的数据的256位散列.
校验和功能包括简单快捷的fletcher4(缺省)到SHA256这样的加密强散列.
克隆其初始内容与快照内容相同的文件系统.
有关克隆的信息,请参见"ZFS克隆概述"[175].
数据集以下ZFS组件的通用名称:克隆、文件系统、快照和卷.
每个数据集由ZFS名称空间中的唯一名称标识.
数据集使用以下格式进行标识:pool/path[@snapshot]pool标识包含数据集的存储池的名称path数据集组件的斜杠分隔路径名snapshot用于标识数据集快照的可选组件有关数据集的更多信息,请参见第5章管理OracleSolarisZFS文件系统.
文件系统挂载在标准系统名称空间中且行为与其他文件系统相似的filesystem类型的ZFS数据集.
有关文件系统的更多信息,请参见第5章管理OracleSolarisZFS文件系统.
镜像在两个或多个磁盘上存储数据的相同副本的虚拟设备.
如果镜像中的任一磁盘出现故障,则该镜像中的其他任何磁盘可以提供相同的数据.
池设备的逻辑组,用于描述可用存储的布局和物理特征.
数据集的磁盘空间是从池中分配的.
有关存储池的更多信息,请参见第3章管理OracleSolarisZFS存储池.
RAID-Z在多个磁盘上存储数据和奇偶校验的虚拟设备.
有关RAID-Z的更多信息,请参见"RAID-Z存储池配置"[32].
重新同步将数据从一个设备复制到另一个设备的过程称为重新同步.
例如,如果替换了镜像设备或使其脱机,则最新镜像设备中的数据会复制到刚恢复的镜像设备.
此过程在传统的卷管理产品中称为镜像重新同步.
有关ZFS重新同步的更多信息,请参见"查看重新同步状态"[255].
快照文件系统或卷在给定时间点的只读副本.
ZFS组件命名要求第1章OracleSolarisZFS文件系统(介绍)17有关快照的更多信息,请参见"ZFS快照概述"[169].
虚拟设备池中的逻辑设备,可以是物理设备、文件或设备集合.
有关虚拟设备的更多信息,请参见"显示存储池虚拟设备信息"[39].
卷表示块设备的数据集.
例如,可以创建ZFS卷作为交换设备.
有关ZFS卷的更多信息,请参见"ZFS卷"[227].
ZFS组件命名要求每个ZFS组件(例如数据集和池)必须根据以下规则进行命名:每个组件只能包含字母数字字符以及以下四个特殊字符:下划线(_)连字符(-)冒号(:)句点(.
)池名称必须以字母开头,并且只能包含字母数字字符以及下划线(_)、短划线(-)和句点(.
).
请注意有关池名称的以下限制:不允许使用起始序列c[0-9].
名称log为保留名称.
不允许使用以mirror、raidz、raidz1、raidz2、raidz3或spare开头的名称,因为这些名称是保留名称.
数据集名称不得包含百分比符号(%).
数据集名称必须以字母数字字符开头.
数据集名称不得包含百分比符号(%).
此外,不允许使用空组件.
OracleSolarisZFS与传统文件系统的区别"ZFS文件系统粒度"[18]"ZFS磁盘空间记帐"[18]"挂载ZFS文件系统"[19]"传统卷管理"[20]"基于NFSv4的SolarisACL模型"[20]OracleSolarisZFS与传统文件系统的区别18在OracleSolaris11.
2中管理ZFS文件系统2014年12月ZFS文件系统粒度过去,文件系统局限于单个设备,因而其大小以设备的大小为限.
由于存在大小限制,因此创建和重新创建传统文件系统很耗时,有时候还很难.
传统的卷管理产品可帮助管理此过程.
由于ZFS文件系统不局限于特定设备,因此可以轻松、快捷地创建,其创建方法与目录的创建方法相似.
ZFS文件系统会在分配给其所驻留的存储池的磁盘空间中自动增大.
要管理许多用户子目录,可以为每个用户创建一个文件系统,而不是只创建一个文件系统(如/export/home).
通过应用可被分层结构中包含的后代文件系统继承的属性,可以轻松设置和管理许多文件系统.
有关如何创建文件系统分层结构的示例,请参见"创建ZFS文件系统分层结构"[24].
ZFS磁盘空间记帐ZFS建立在池存储概念的基础上.
与典型文件系统映射到物理存储器不同,池中的所有ZFS文件系统都共享该池中的可用存储器.
因此,即使文件系统处于非活动状态,实用程序(例如df)报告的可用磁盘空间也会发生变化,因为池中的其他文件系统会使用或释放磁盘空间.
注意,使用配额可以限制最大文件系统大小.
有关配额的信息,请参见"设置ZFS文件系统的配额"[153].
可以利用预留空间保证一个文件系统拥有指定大小的磁盘空间.
有关预留的信息,请参见"设置ZFS文件系统的预留空间"[156].
此模型与NFS模型非常相似,NFS模型基于同一文件系统(例如/home)挂载多个目录.
ZFS中的所有元数据都是动态分配的.
其他大部分文件系统都会预分配其大量元数据.
因此,创建文件系统时,此元数据需要直接占用空间.
此行为还意味着文件系统支持的文件总数是预先确定的.
由于ZFS根据需要分配其元数据,因此不需要初始空间成本,并且文件数只受可用磁盘空间的限制.
对于ZFS文件系统,对df-g命令输出的解释必须和其他文件系统不同.
报告的totalfiles只是根据池中可用的存储量得出的估计值.
ZFS是事务性文件系统.
大部分文件系统修改都捆绑到事务组中,并异步提交至磁盘.
这些修改在被提交到磁盘之前称为暂挂更改.
已用磁盘空间量、可用磁盘空间量以及文件或文件系统引用的磁盘空间量并不考虑暂挂更改.
通常,暂挂更改仅占用几秒钟的时间.
即使使用fsync(3c)或O_SYNC提交对磁盘的更改,也不一定能保证有关磁盘空间使用情况的信息会立即更新.
在UFS文件系统上,du命令报告文件中数据块的大小.
在ZFS文件系统上,du报告在磁盘上存储的文件的实际大小.
该大小包括元数据以及压缩.
此报告确实有助于解答"删OracleSolarisZFS与传统文件系统的区别第1章OracleSolarisZFS文件系统(介绍)19除此文件可获得多少多余空间"这一问题.
因此,即使压缩已关闭,您仍会在ZFS和UFS之间看到不同的结果.
对df命令与zfslist命令报告的空间占用进行比较时,请注意,df报告的是池大小而不仅仅是文件系统大小.
此外,df不了解后代文件系统或快照是否存在.
如果在文件系统上设置了任何ZFS属性(如压缩和配额),则协调由df报告的空间占用可能很难.
请考虑也可能影响所报告的空间占用的以下情况:对于大于recordsize的文件,文件的最后一个数据块通常只填充大约1/2.
当缺省recordsize设置为128KB时,每个文件大约浪费64KB,这可能影响很大.
集成RFE6812608可解决此情况.
通过启用压缩可解决此问题.
即使数据已压缩,最后一个数据块的未使用部分也将以零填充,且压缩非常好.
在RAIDZ-2池上,每个数据块至少要占用2个扇区(512字节块)来存储奇偶校验信息.
奇偶校验信息所占用的空间不会被报告,但是因为它可能是变化的,且在小数据块中所占的百分比更大,因此对空间报告可能有显著影响.
对于设置为512字节的recordsize,影响更为明显,其中每个512字节的逻辑数据块都占用1.
5KB(该空间的3倍).
不管存储什么数据,如果您最关注的是空间效率,则应该将recordsize保留为缺省值(128KB),并启用压缩(至lzjb的缺省值).
df命令不会识别已由重复数据删除操作剔除的文件数据.
空间不足行为文件系统的快照开销很小,并且很容易在ZFS中创建.
在大多数ZFS环境中,快照是常见现象.
有关ZFS快照的信息,请参见第6章使用OracleSolarisZFS快照和克隆.
尝试释放磁盘空间时,快照的存在会引起某种意外行为.
通常,获取适当的权限后,可从整个文件系统中删除一个文件,此操作会使文件系统有更多的可用磁盘空间.
但是,如果要删除的文件存在于文件系统的快照中,则删除该文件不会获得任何磁盘空间.
快照将继续引用该文件使用的块.
由于需要创建新版本的目录来反映名称空间的新状态,因此删除文件会占用更多的磁盘空间.
此行为意味着,尝试删除文件时可能收到意外的ENOSPC或EDQUOT错误.
挂载ZFS文件系统ZFS可降低复杂性并简化管理.
例如,使用传统文件系统时,每次添加新文件系统都必须编辑/etc/vfstab文件.
ZFS可根据文件系统的属性自动挂载和卸载文件系统,从而避免了上述需求.
无需管理/etc/vfstab文件中的ZFS项.
有关挂载和共享ZFS文件系统的更多信息,请参见"挂载ZFS文件系统"[138].
OracleSolarisZFS与传统文件系统的区别20在OracleSolaris11.
2中管理ZFS文件系统2014年12月传统卷管理如"ZFS池存储"[14]中所述,ZFS不需要单独的卷管理器.
ZFS对原始设备执行操作,因此可能会创建由逻辑卷(软件或硬件)构成的存储池.
由于ZFS在使用原始物理设备时可获得最佳工作状态,因此建议不使用此配置.
使用逻辑卷可能会牺牲性能和/或可靠性,因此应尽量避免.
基于NFSv4的SolarisACL模型SolarisOS的旧版本支持主要基于POSIXACL草案规范的ACL实现.
基于POSIX草案的ACL用来保护UFS文件.
基于NFSv4规范的新SolarisACL模型用来保护ZFS文件.
与旧模型相比,新SolarisACL模型的主要变化如下:该模型基于NFSv4规范,与NT样式的ACL类似.
此模型提供更为详尽的访问特权集合.
ACL分别使用chmod和ls命令(而非setfacl和getfacl命令)进行设置和显示.
提供了更丰富的继承语义,用于指定如何将访问特权从目录应用到子目录等.
有关对ZFS文件使用ACL的更多信息,请参见第7章使用ACL和属性保护OracleSolarisZFS文件.
第2章OracleSolarisZFS入门212第2章OracleSolarisZFS入门本章提供关于OracleSolarisZFS基本配置的逐步说明.
阅读完本章之后,您应基本了解ZFS命令的工作原理,并可以创建基本的池和文件系统.
本章并非综合概述,有关更多详细信息,请参阅后续章节.
本章包含以下各节:"ZFS权限配置文件"[21]"ZFS硬件和软件要求及建议"[21]"创建基本ZFS文件系统"[22]"创建基本的ZFS存储池"[22]"创建ZFS文件系统分层结构"[24]ZFS权限配置文件如果要在不使用超级用户(root)帐户的情况下执行ZFS管理任务,可承担具有以下任一配置文件的角色来执行ZFS管理任务:ZFS存储管理-提供了在ZFS存储池中创建、销毁和处理设备的特权ZFS文件系统管理-提供了创建、销毁和修改ZFS文件系统的特权有关创建或分配角色的更多信息,请参见《在OracleSolaris11.
2中确保用户和进程的安全》.
除了使用RBAC角色来管理ZFS文件系统之外,还可以考虑使用ZFS委托管理来分散ZFS管理任务.
有关更多信息,请参见第8章OracleSolarisZFS委托管理.
ZFS硬件和软件要求及建议尝试使用ZFS软件之前,请确保查看了以下硬件和软件要求及建议:使用运行有受支持的OracleSolaris发行版、基于SPARC或x86的系统.
创建基本ZFS文件系统22在OracleSolaris11.
2中管理ZFS文件系统2014年12月存储池所需的最小磁盘空间量为64MB.
最小磁盘空间为128MB.
为了获得良好的ZFS性能,请根据您的工作负荷来确定所需要的内存大小.
如果要创建镜像的池配置,应使用多个控制器.
创建基本ZFS文件系统ZFS管理在设计过程中考虑了简单性.
其设计目标之一是减少创建可用文件系统所需的命令数.
例如,创建新池的同时会创建一个新ZFS文件系统,并自动将其挂载.
以下示例说明如何通过一个命令同时创建名为tank的基本镜像存储池和名为tank的ZFS文件系统.
假定磁盘/dev/dsk/c1t0d0和/dev/dsk/c2t0d0全部都可使用.
#zpoolcreatetankmirrorc1t0d0c2t0d0有关冗余ZFS池配置的更多信息,请参见"ZFS存储池的复制功能"[31].
新ZFS文件系统tank可根据需要使用可用的磁盘空间,并会自动挂载在/tank中.
#mkfile100m/tank/foo#df-h/tankFilesystemsizeusedavailcapacityMountedontank80G100M80G1%/tank在池内,可能需要创建其他文件系统.
文件系统可提供管理点,用于管理同一池中不同的数据集.
以下示例说明如何在存储池tank中创建名为fs的文件系统.
#zfscreatetank/fs新ZFS文件系统tank/fs可根据需要使用可用的磁盘空间,并会自动挂载在/tank/fs.
#mkfile100m/tank/fs/foo#df-h/tank/fsFilesystemsizeusedavailcapacityMountedontank/fs80G100M80G1%/tank/fs通常,您需要创建并组织与您公司的需要相符的文件系统分层结构.
有关创建ZFS文件系统分层结构的信息,请参见"创建ZFS文件系统分层结构"[24].
创建基本的ZFS存储池上一示例说明了ZFS的简单性.
本章的其余部分将提供一个更复杂的示例,与您的环境中所遇到的情况相似.
第一个任务是确定存储要求并创建存储池.
该池描述了存储的物理特征,并且必须在创建任何文件系统之前创建.
如何确定ZFS存储池的存储要求第2章OracleSolarisZFS入门23如何确定ZFS存储池的存储要求1.
确定存储池可用的设备.
创建存储池之前,必须先确定用于存储数据的设备.
这些设备必须是大小至少为128MB的磁盘,并且不能由操作系统的其他部分使用.
这些设备可以是预先格式化的磁盘上的单独分片,也可以是ZFS格式化为单个大分片的整个磁盘.
在如何创建ZFS存储池[23]的存储示例中,假定磁盘/dev/dsk/c1t0d0和/dev/dsk/c2t0d0全部都可供使用.
有关磁盘及其使用和标记方法的更多信息,请参见"使用ZFS存储池中的磁盘"[27].
2.
选择数据复制.
ZFS支持多种类型的数据复制,这决定了池可以经受的硬件故障的类型.
ZFS支持非冗余(条带化)配置以及镜像和RAID-Z(RAID-5的变化形式).
如何创建ZFS存储池[23]中的存储示例使用了两个可用磁盘的基本镜像.
有关ZFS复制功能的更多信息,请参见"ZFS存储池的复制功能"[31].
如何创建ZFS存储池1.
成为root用户或承担具有适当ZFS权限配置文件的等效角色.
有关ZFS权限配置文件的更多信息,请参见"ZFS权限配置文件"[21].
2.
为存储池取名.
此名称用于在使用zpool和zfs命令时标识存储池.
选择您喜欢的任何池名称,但是必须符合"ZFS组件命名要求"[17]中的命名要求.
3.
创建池.
例如,以下命令创建一个名为tank的镜像池:#zpoolcreatetankmirrorc1t0d0c2t0d0如果一个或多个设备包含其他文件系统或正在使用中,则该命令不能创建池.
有关创建存储池的更多信息,请参见"创建ZFS存储池"[34].
有关如何确定设备使用情况的更多信息,请参见"检测使用中的设备"[40].
4.
查看结果.
使用zpoollist命令可以确定是否已成功创建池.
#zpoollistNAMESIZEALLOCFREECAPHEALTHALTROOT创建ZFS文件系统分层结构24在OracleSolaris11.
2中管理ZFS文件系统2014年12月tank80G137K80G0%ONLINE-有关查看池状态的更多信息,请参见"查询ZFS存储池的状态"[64].
创建ZFS文件系统分层结构创建用于存储数据的存储池之后,即可创建文件系统分层结构.
分层结构是用于组织信息的简单但功能强大的机制.
使用过文件系统的用户对分层结构也都很熟悉.
使用ZFS可将文件系统组织为分层结构,其中每个文件系统仅有一个父级.
分层结构的根始终是池名称.
ZFS通过支持属性继承来利用此分层结构,以便可在整个文件系统树中快速轻松地设置公用属性.
如何确定ZFS文件系统分层结构1.
选择文件系统粒度.
ZFS文件系统是管理的中心点.
它们是轻量型的,很容易创建.
适用的模型是为每个用户或项目建立一个文件系统,因为此模型允许按用户或按项目控制属性、快照和备份.
HowtoCreateZFSFileSystems中创建了两个ZFS文件系统:jeff和如何创建ZFS文件系统[25].
有关管理文件系统的更多信息,请参见第5章管理OracleSolarisZFS文件系统.
2.
对相似的文件系统进行分组.
使用ZFS可将文件系统组织为分层结构,以便可对相似的文件系统进行分组.
此模型提供了一个用于控制属性和管理文件系统的管理中心点.
应使用一个公用名称来创建相似的文件系统.
在如何创建ZFS文件系统[25]的示例中,两个文件系统都放置在名为home的文件系统下.
3.
选择文件系统属性.
大多数文件系统特征都是通过属性进行控制.
这些属性可以控制多种行为,包括文件系统的挂载位置、共享方式、是否使用压缩以及是否有任何生效的配额.
在如何创建ZFS文件系统[25]的示例中,所有起始目录都挂载在/export/zfs/user中,都使用NFS来共享并且都已启用压缩.
此外,还对用户jeff强制实施了10GB的配额.
有关属性的更多信息,请参见"介绍ZFS属性"[116].
如何创建ZFS文件系统第2章OracleSolarisZFS入门25如何创建ZFS文件系统1.
成为root用户或承担具有适当ZFS权限配置文件的等效角色.
有关ZFS权限配置文件的更多信息,请参见"ZFS权限配置文件"[21].
2.
创建所需的分层结构.
在本示例中,创建了一个可充当各文件系统的容器的文件系统.
#zfscreatetank/home3.
设置继承的属性.
建立文件系统分层结构之后,设置需在所有用户之间共享的任何属性:#zfssetmountpoint=/export/zfstank/home#zfssetshare.
nfs=ontank/home#zfssetcompression=ontank/home#zfsgetcompressiontank/homeNAMEPROPERTYVALUESOURCEtank/homecompressiononlocal可在创建文件系统时设置文件系统属性.
例如:#zfscreate-omountpoint=/export/zfs-oshare.
nfs=on-ocompression=ontank/home有关属性和属性继承的更多信息,请参见"介绍ZFS属性"[116].
然后,在池tank中的home文件系统下对各文件系统进行分组.
4.
创建各文件系统.
文件系统可能已创建,并可能已在home级别更改了属性.
所有属性均可在使用文件系统的过程中动态进行更改.
#zfscreatetank/home/jeff#zfscreatetank/home/bill这些文件系统从其父级继承属性值,因此会自动挂载在/export/zfs/user中并且通过NFS共享.
您无需编辑/etc/vfstab或/etc/dfs/dfstab文件.
有关创建文件系统的更多信息,请参见"创建ZFS文件系统"[114].
有关挂载和共享文件系统的更多信息,请参见"挂载ZFS文件系统"[138].
5.
设置文件系统特定的属性.
在本例中,为用户jeff分配了一个10GB的配额.
此属性会对该用户可以使用的空间量施加限制,而不考虑池中的可用空间大小.
#zfssetquota=10Gtank/home/jeff6.
查看结果.
如何创建ZFS文件系统26在OracleSolaris11.
2中管理ZFS文件系统2014年12月使用zfslist命令查看可用的文件系统信息:#zfslistNAMEUSEDAVAILREFERMOUNTPOINTtank92.
0K67.
0G9.
5K/tanktank/home24.
0K67.
0G8K/export/zfstank/home/bill8K67.
0G8K/export/zfs/billtank/home/jeff8K10.
0G8K/export/zfs/jeff请注意,用户jeff仅有10GB的可用空间,而用户bill则可使用整个池(67GB).
有关查看文件系统状态的更多信息,请参见"查询ZFS文件系统信息"[131].
有关磁盘空间的使用和计算方法的更多信息,请参见"ZFS磁盘空间记帐"[18].
第3章管理OracleSolarisZFS存储池273第3章管理OracleSolarisZFS存储池本章介绍如何创建和管理OracleSolarisZFS中的存储池.
本章包含以下各节:"ZFS存储池的组件"[27]"ZFS存储池的复制功能"[31]"创建和销毁ZFS存储池"[33]"管理ZFS存储池中的设备"[43]"管理ZFS存储池属性"[62]"查询ZFS存储池的状态"[64]"迁移ZFS存储池"[76]"升级ZFS存储池"[85]ZFS存储池的组件以下各节提供有关以下存储池组件的详细信息:"使用ZFS存储池中的磁盘"[27]"使用ZFS存储池中的分片"[29]"使用ZFS存储池中的文件"[30]使用ZFS存储池中的磁盘存储池的最基本元素是物理存储器.
物理存储器可以是大小至少为128MB的任何块设备.
通常,此设备是/dev/dsk目录中对系统可见的一个硬盘驱动器.
存储设备可以是整个磁盘(c1t0d0)或单个分片(c0t0d0s7).
建议的操作模式是使用整个磁盘,在这种情况下,无需对磁盘进行特殊格式化.
ZFS可格式化使用EFI标签的磁盘以包含单个大分片.
以此方式使用磁盘时,format命令显示的分区表与以下信息类似:ZFS存储池的组件28在OracleSolaris11.
2中管理ZFS文件系统2014年12月Currentpartitiontable(original):Totaldisksectorsavailable:143358287+16384(reservedsectors)PartTagFlagFirstSectorSizeLastSector0usrwm25668.
36GB1433583201unassignedwm0002unassignedwm0003unassignedwm0004unassignedwm0005unassignedwm0006unassignedwm0008reservedwm1433583218.
00MB143374704大多数情况下,安装OracleSolaris11.
1时会为基于x86的系统上的根池磁盘加上EFI(GPT)标签,具体内容类似于以下信息:Currentpartitiontable(original):Totaldisksectorsavailable:27246525+16384(reservedsectors)PartTagFlagFirstSectorSizeLastSector0BIOS_bootwm256256.
00MB5245431usrwm52454412.
74GB272465582unassignedwm0003unassignedwm0004unassignedwm0005unassignedwm0006unassignedwm0008reservedwm272465598.
00MB27262942在以上输出中,分区0(BIOSboot)包含必需的GPT引导信息.
与分区8类似,该分区无需管理,因此不应该修改.
根文件系统包含在分区1中.
具有GPT感知固件的SPARC系统加上了EFI(GPT)磁盘标签.
例如:Currentpartitiontable(original):Totaldisksectorsavailable:143358320+16384(reservedsectors)PartTagFlagFirstSectorSizeLastSector0usrwm25668.
36GB1433583201unassignedwm0002unassignedwm0003unassignedwm0004unassignedwm0005unassignedwm0006unassignedwm0008reservedwm1433583218.
00MB143374704在ZFS存储池中使用整个的磁盘时,请检查以下注意事项:使用整个磁盘时,通常使用/dev/dsk/cNtNdN命名约定为该磁盘命名.
一些第三方驱动程序使用不同的命名约定,或者将磁盘放置在除/dev/dsk目录以外的位置中.
要使用这些磁盘,必须手动标记磁盘并为ZFS提供分片.
ZFS存储池的组件第3章管理OracleSolarisZFS存储池29在基于x86的系统上,磁盘必须具有有效的Solarisfdisk分区.
有关创建或更改Solarisfdisk分区的更多信息,请参见《在OracleSolaris11.
2中管理设备》中的"为ZFS文件系统设置磁盘".
创建包含整个磁盘的存储池时,ZFS会应用EFI标签.
有关EFI标签的更多信息,请参见《在OracleSolaris11.
2中管理设备》中的"EFI(GPT)磁盘标签".
大多数情况下,在具有GPT感知固件的基于SPARC的系统和基于x86的系统上,OracleSolaris安装程序会为根池磁盘应用EFI(GPT)标签.
有关详细信息,请参见"确定ZFS根池要求"[88].
要恢复根池,请考虑使用archiveadm命令创建根池归档文件.
拆分根池可能造成错误,因为这需要其他手动步骤,如设置一个新的引导设备,可能要更新/etc/vfstab文件,以及重置现有的转储设备.
有关创建根池归档文件的更多信息,请参见《在OracleSolaris11.
2中使用统一归档文件进行系统恢复和克隆》.
可以通过以下方式指定磁盘:使用/dev/dsk/c1t0d0这样的完整路径,或表示/dev/dsk目录中设备名的简写名称,例如c1t0d0.
例如,以下是有效的磁盘名称:c1t0d0/dev/dsk/c1t0d0/dev/foo/disk使用ZFS存储池中的分片当创建包含一个磁盘分片的存储池时,可以为磁盘加上传统SolarisVTOC(SMI)标签,但不建议对一个池使用多个磁盘分片,因为管理磁盘分片将更加困难.
在基于SPARC的系统上,72GB的磁盘在分片0上有68GB的可用空间,如下列format输出所示.
#format.
.
.
Specifydisk(enteritsnumber):4selectingc1t1d0partition>pCurrentpartitiontable(original):Totaldiskcylindersavailable:14087+2(reservedcylinders)PartTagFlagCylindersSizeBlocks0rootwm0-1408668.
35GB(14087/0/0)1433493121unassignedwm00(0/0/0)02backupwm0-1408668.
35GB(14087/0/0)1433493123unassignedwm00(0/0/0)04unassignedwm00(0/0/0)05unassignedwm00(0/0/0)0ZFS存储池的组件30在OracleSolaris11.
2中管理ZFS文件系统2014年12月6unassignedwm00(0/0/0)07unassignedwm00(0/0/0)0在基于x86C的系统上,72GB的磁盘在分片0上有68GB的可用磁盘空间,如下列format输出所示.
分片8包含少量引导信息.
分片8不需要管理,并且无法对其进行更改.
#format.
.
.
selectingc1t0d0partition>pCurrentpartitiontable(original):Totaldiskcylindersavailable:49779+2(reservedcylinders)PartTagFlagCylindersSizeBlocks0rootwm1-4977868.
36GB(49778/0/0)1433606401unassignedwu00(0/0/0)02backupwm0-4977868.
36GB(49779/0/0)1433635203unassignedwu00(0/0/0)04unassignedwu00(0/0/0)05unassignedwu00(0/0/0)06unassignedwu00(0/0/0)07unassignedwu00(0/0/0)08bootwu0-01.
41MB(1/0/0)28809unassignedwu00(0/0/0)0基于x86的系统上还存在一个fdisk分区.
fdisk分区由/dev/dsk/cN[tN]dNpN设备名来表示,并充当磁盘可用分片的容器.
请勿对ZFS存储池组件使用cN[tN]dNpN设备,因为该配置既未经过测试,也不受支持.
使用ZFS存储池中的文件ZFS还允许将文件用作存储池中的虚拟设备.
此功能主要用于测试和启用简单的实验,而不是用于生产.
如果创建了由UFS文件系统中的文件支持的ZFS池,即会隐式依赖于UFS来保证正确性和同步语义.
如果创建的ZFS池基于在其他ZFS池中创建的文件或卷,则系统可能死锁或崩溃.
但是,如果首次试用ZFS,或者在没有足够的物理设备时尝试更复杂的配置,则文件会非常有用.
所有文件必须以完整路径的形式指定,并且大小至少为64MB.
ZFS存储池的注意事项创建和管理ZFS存储池时,请注意以下事项.
ZFS存储池的复制功能第3章管理OracleSolarisZFS存储池31创建ZFS存储池的最简单方法是使用整个物理磁盘.
在从磁盘分片、硬件RAID阵列中的LUN或基于软件的卷管理器所提供的卷中生成池时,无论从管理、可靠性还是性能的角度而言,ZFS配置都变得越来越复杂.
以下注意事项可能有助于确定如何用其他硬件或软件存储解决方案来配置ZFS:如果在硬件RAID阵列中的LUN上构建ZFS配置,则需要了解ZFS冗余功能与该阵列所提供的冗余功能之间的关系.
有些配置可能会提供足够的冗余和性能,而其他配置可能不会提供足够的冗余和性能.
可以使用由基于软件的卷管理器提供的卷为ZFS构造逻辑设备.
但是,建议不要使用这些配置.
尽管ZFS可在这类设备上正常运行,但结果可能是实际性能低于最佳性能.
有关存储池建议和使用带有硬件RAID的ZFS时的其他信息,请参见第11章建议的OracleSolarisZFS做法.
有关使用池设备的注意事项的更多信息,请参见"更改池设备"[257].
ZFS存储池的复制功能ZFS在镜像和RAID-Z配置中提供了数据冗余以及自我修复属性.
"镜像存储池配置"[31]"RAID-Z存储池配置"[32]"冗余配置中的自我修复数据"[33]"存储池中的动态条带化"[33]"ZFS混合存储池"[33]镜像存储池配置镜像存储池配置至少需要两个磁盘,而且磁盘最好位于不同的控制器上.
可以在一个镜像配置中使用许多磁盘.
此外,还可以在每个池中创建多个镜像.
从概念上讲,基本镜像配置与以下内容类似:mirrorc1t0d0c2t0d0从概念上讲,更复杂的镜像配置与以下内容类似:mirrorc1t0d0c2t0d0c3t0d0mirrorc4t0d0c5t0d0c6t0d0有关创建镜像存储池的信息,请参见"创建镜像存储池"[34].
ZFS存储池的复制功能32在OracleSolaris11.
2中管理ZFS文件系统2014年12月RAID-Z存储池配置除镜像存储池配置外,ZFS还提供具有单/双/三奇偶校验容错性的RAID-Z配置.
单奇偶校验RAID-Z(raidz或raidz1)与RAID-5类似.
双奇偶校验RAID-Z(raidz2)与RAID-6类似.
有关RAIDZ-3(raidz3)的更多信息,请参见以下博客:http://blogs.
oracle.
com/ahl/entry/triple_parity_raid_z所有与RAID-5类似的传统算法(例如RAID-4、RAID-6、RDP和EVEN-ODD)都可能存在称为"RAID-5写入漏洞"的问题.
如果仅写入了RAID-5条带的一部分,并且在所有块成功写入磁盘之前断电,则奇偶校验将与数据不同步,因此永远无用,除非后续的完全条带化写操作将其覆盖.
在RAID-Z中,ZFS使用可变宽度的RAID条带,以便所有写操作都是完全条带化写操作.
这是唯一可行的设计,因为ZFS通过以下方式将文件系统和设备管理集成在一起:文件系统的元数据包含有关底层数据冗余模型的足够信息以处理可变宽度的RAID条带.
RAID-Z是世界上针对RAID-5写入漏洞的第一个仅使用软件的解决方案.
一个RAID-Z配置包含N个大小为X的磁盘,其中有P个奇偶校验磁盘,该配置可以存放大约(N-P)*X字节的数据,并且只有在P个设备出现故障时才会危及数据完整性.
单奇偶校验RAID-Z配置至少需要两个磁盘,双奇偶校验RAID-Z配置至少需要三个磁盘,以此类推.
例如,如果一个单奇偶校验RAID-Z配置中有三个磁盘,则奇偶校验数据占用的磁盘空间与其中一个磁盘的空间相等.
除此之外,创建RAID-Z配置无需任何其他特殊硬件.
从概念上讲,包含三个磁盘的RAID-Z配置与以下内容类似:raidzc1t0d0c2t0d0c3t0d0从概念上讲,更复杂的RAID-Z配置与以下内容类似:raidzc1t0d0c2t0d0c3t0d0c4t0d0c5t0d0c6t0d0c7t0d0raidzc8t0d0c9t0d0c10t0d0c11t0d0c12t0d0c13t0d0c14t0d0如果创建具有许多磁盘的RAID-Z配置,请考虑将这些磁盘分为多个组.
例如,具有14个磁盘的RAID-Z配置最好拆分为两个7磁盘组.
若RAID-Z配置包含的分组中的磁盘数目为一位数(1-9),则该配置的性能应该更好.
有关创建RAID-Z存储池的信息,请参见"创建RAID-Z存储池"[35].
有关基于性能和磁盘空间注意事项在镜像配置或RAID-Z配置之间进行选择的更多信息,请参见以下博客:http://blogs.
oracle.
com/roch/entry/when_to_and_not_to有关RAID-Z存储池建议的其他信息,请参见第11章建议的OracleSolarisZFS做法.
创建和销毁ZFS存储池第3章管理OracleSolarisZFS存储池33ZFS混合存储池OracleSunStorage7000产品系列所提供的ZFS混合存储池是一种组合了DRAM、SSD和HDD的特殊存储池,可以提高性能、增加容量并降低能耗.
通过此产品的管理界面,您可以选择存储池的ZFS冗余配置,并轻松管理其他配置选项.
有关此产品的更多信息,请参见《SunStorageUnifiedStorageSystem管理指南》.
冗余配置中的自我修复数据ZFS在镜像配置或RAID-Z配置中提供了自我修复数据.
检测到坏的数据块时,ZFS不但从另一个冗余副本中提取正确的数据,而且会用正确的副本替换错误的数据.
存储池中的动态条带化ZFS以条带形式将数据动态分布在所有顶层虚拟设备上.
由于在写入时确定放置数据的位置,因此在分配时不会创建固定宽度的条带.
向池中添加新虚拟设备时,ZFS会将数据逐渐分配给新设备,以便维护性能和磁盘空间分配策略.
每个虚拟设备也可以是包含其他磁盘设备或文件的镜像或RAID-Z设备.
使用此配置,可以灵活地控制池的故障特征.
例如,可以通过4个磁盘创建以下配置:使用动态条带化的四个磁盘一个四向RAID-Z配置使用动态条带化的两个双向镜像虽然ZFS支持一个池包含不同类型的虚拟设备,但应避免这种做法.
例如,可以创建一个包含一个双向镜像和一个三向RAID-Z配置的池.
但是,容错能力几乎与最差的虚拟设备(在本示例中为RAID-Z)相同.
最佳做法是使用相同类型的顶层虚拟设备,并且每个设备的冗余级别相同.
创建和销毁ZFS存储池以下各节介绍创建和销毁ZFS存储池的不同情况:"创建ZFS存储池"[34]"显示存储池虚拟设备信息"[39]"处理ZFS存储池创建错误"[40]创建和销毁ZFS存储池34在OracleSolaris11.
2中管理ZFS文件系统2014年12月"销毁ZFS存储池"[42]创建和销毁池非常快捷方便.
但是,执行这些操作务必谨慎.
虽然进行了检查,以防止在新的池中使用现已使用的设备,但是ZFS无法始终知道设备何时已在使用中.
存储池销毁容易创建难.
请谨慎使用zpooldestroy.
这个简单的命令会有严重后果.
创建ZFS存储池要创建存储池,请使用zpoolcreate命令.
此命令采用池名称和任意数目的虚拟设备作为参数.
池名称必须符合"ZFS组件命名要求"[17]中的命名要求.
创建基本存储池以下命令创建了一个名为tank的新池,该池由磁盘c1t0d0和c1t1d0组成:#zpoolcreatetankc1t0d0c1t1d0代表整个磁盘的设备名称可在/dev/dsk目录中找到,并通过ZFS恰当地标记为包含单个大分片.
数据通过这两个磁盘以动态方式进行条带化.
创建镜像存储池要创建镜像池,请使用mirror关键字,后跟将组成镜像的任意数目的存储设备.
可以通过在命令行中重复使用mirror关键字指定多个镜像.
以下命令创建了一个包含两个双向镜像的池:#zpoolcreatetankmirrorc1d0c2d0mirrorc3d0c4d0第二个mirror关键字指明将指定一个新的顶层虚拟设备.
数据在这两个镜像中以动态方式进行条带化,并会相应地在各个磁盘上创建冗余数据.
有关建议的镜像配置的更多信息,请参见第11章建议的OracleSolarisZFS做法.
目前,ZFS镜像配置中支持以下操作:向现有镜像配置中添加用于其他顶层虚拟设备(vdev)的另一组磁盘.
有关更多信息,请参见"向存储池中添加设备"[44].
向现有镜像配置中附加其他磁盘.
或者,向非复制配置中附加其他磁盘,以创建镜像配置.
有关更多信息,请参见"附加和分离存储池设备"[48].
只要替换磁盘的大小大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘.
有关更多信息,请参见"替换存储池中的设备"[55].
只要剩余设备可为配置提供足够冗余,便可分离镜像配置中的磁盘.
有关更多信息,请参见"附加和分离存储池设备"[48].
创建和销毁ZFS存储池第3章管理OracleSolarisZFS存储池35通过分离其中一个磁盘来拆分镜像配置,以创建新的相同池.
有关更多信息,请参见"通过拆分镜像ZFS存储池创建新池"[50].
不能直接从镜像存储池中移除非备用设备、非日志设备或非缓存设备.
创建ZFS根池请注意以下根池配置要求:在OracleSolaris中,在基于x86的系统和具有GPT感知固件的受支持SPARC系统上用于根池的磁盘会在安装时加上EFI(GPT)标签,在没有GPT感知固件的基于SPARC的系统上用于根池的磁盘会在安装时加上SMI(VTOC)标签.
安装程序会尽可能地应用EFI(GPT)标签,如果需要在安装后重新创建ZFS根池,则可以使用以下命令来应用EFI(GPT)磁盘标签和正确的引导信息:#zpoolcreate-Brpool2c1t0d0根池必须作为镜像配置或单磁盘配置创建.
不能使用zpooladd命令添加其他磁盘以创建多个镜像顶层虚拟设备,但可以使用zpoolattach命令扩展镜像虚拟设备.
不支持RAID-Z或条带化配置.
根池不能有单独的日志设备.
如果您尝试使用不受支持的根池配置,将会看到类似如下的消息:ERROR:ZFSpooldoesnotsupportbootenvironments#zpooladd-frpoollogc0t6d0s0cannotaddto'rpool':rootpoolcannothavemultiplevdevsorseparatelogs有关安装和引导ZFS根文件系统的更多信息,请参见第4章管理ZFS根池组件.
创建RAID-Z存储池创建单奇偶校验RAID-Z池与创建镜像池基本相同,不同之处是使用raidz或raidz1关键字而不是mirror.
以下示例说明如何创建一个包含单个RAID-Z设备的池,该设备由5个磁盘组成:#zpoolcreatetankraidzc1t0d0c2t0d0c3t0d0c4t0d0/dev/dsk/c5t0d0本例说明可以通过设备的缩写名称或全名指定磁盘.
/dev/dsk/c5t0d0和c5t0d0指代同一个磁盘.
创建池时,通过使用raidz2或raidz3关键字,您可以创建双奇偶校验或三奇偶校验RAID-Z配置.
例如:#zpoolcreatetankraidz2c1t0d0c2t0d0c3t0d0c4t0d0c5t0d0#zpoolstatus-vtankpool:tank创建和销毁ZFS存储池36在OracleSolaris11.
2中管理ZFS文件系统2014年12月state:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000raidz2-0ONLINE000c1t0d0ONLINE000c2t0d0ONLINE000c3t0d0ONLINE000c4t0d0ONLINE000c5t0d0ONLINE000errors:Noknowndataerrors#zpoolcreatetankraidz3c0t0d0c1t0d0c2t0d0c3t0d0c4t0d0c5t0d0c6t0d0c7t0d0c8t0d0#zpoolstatus-vtankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000raidz3-0ONLINE000c0t0d0ONLINE000c1t0d0ONLINE000c2t0d0ONLINE000c3t0d0ONLINE000c4t0d0ONLINE000c5t0d0ONLINE000c6t0d0ONLINE000c7t0d0ONLINE000c8t0d0ONLINE000errors:Noknowndataerrors目前,ZFSRAID-Z配置中支持以下操作:向现有RAID-Z配置中添加用于其他顶层虚拟设备的另一组磁盘.
有关更多信息,请参见"向存储池中添加设备"[44].
只要RAID-Z磁盘的大小大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘.
有关更多信息,请参见"替换存储池中的设备"[55].
目前,RAID-Z配置中不支持以下操作:向现有RAID-Z配置中附加其他磁盘.
从RAID-Z配置中分离磁盘(分离由备用磁盘替换的磁盘或需要分离备用磁盘时除外).
不能直接从RAID-Z配置中移除非日志或缓存设备.
对于此功能,已经申请了RFE(请求提高).
有关RAID-Z配置的更多信息,请参见"RAID-Z存储池配置"[32].
创建和销毁ZFS存储池第3章管理OracleSolarisZFS存储池37创建使用日志设备的ZFS存储池为了满足对同步事务的POSIX要求,提供了ZFS意图日志(ZFSintentlog,ZIL).
例如,数据库通常要求其事务在从系统调用中返回时应该在稳定的存储设备上.
NFS和其他应用程序也可以使用fsync()来确保数据的稳定性.
缺省情况下,从主池中的块分配ZIL.
但是,通过使用单独的意图日志设备(如使用NVRAM或专用磁盘)可能会获得更佳的性能.
确定设置ZFS日志设备是否适合您的环境时,请注意以下几点:ZFS意图日志的日志设备与数据库日志文件无关.
通过实施单独的日志设备获得的任何性能改进均取决于设备类型、池的硬件配置,以及应用程序工作负荷.
有关初步性能信息,请参见以下博客:http://blogs.
oracle.
com/perrin/entry/slog_blog_or_blogging_on可以取消复制或取消镜像日志设备,但日志设备不支持RAID-Z.
如果未镜像单独的日志设备,且包含日志的设备出现故障,则存储日志块将恢复至存储池.
可以将日志设备作为较大存储池的一部分进行添加、替换、移除、附加、分离,以及导入和导出.
可以将日志设备附加到现有日志设备,以创建镜像日志设备.
此操作等同于在未镜像的存储池中附加设备.
日志设备的最小大小与池中每个设备的最小大小(64MB)相同.
可能存储在日志设备中的相关的数据量相对较小.
提交日志事务(系统调用)时将释放日志块.
日志设备的最大大小应大约为物理内存大小的1/2,因为这是可存储的最大潜在相关的数据量.
例如,如果系统的物理内存为16GB,请考虑8GB的最大日志设备大小.
创建存储池时或创建存储池以后,您可以设置ZFS日志设备.
以下示例显示如何创建使用镜像日志设备的镜像存储池:#zpoolcreatedatapmirrorc0t5000C500335F95E3d0c0t5000C500335F907Fd0\mirrorc0t5000C500335BD117d0c0t5000C500335DC60Fd0\logmirrorc0t5000C500335E106Bd0c0t5000C500335FC3E7d0#zpoolstatusdatappool:datapstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMdatapONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000创建和销毁ZFS存储池38在OracleSolaris11.
2中管理ZFS文件系统2014年12月c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000logsmirror-2ONLINE000c0t5000C500335E106Bd0ONLINE000c0t5000C500335FC3E7d0ONLINE000errors:Noknowndataerrors有关从日志设备故障中进行恢复的信息,请参见例10-2"更换出现故障的日志设备".
创建使用高速缓存设备的ZFS存储池高速缓存设备在主内存和磁盘之间提供了一个进行高速缓存的附加层.
使用高速缓存设备,可以最大程度地提高大多数静态内容的随机读取工作的性能.
您可以创建一个使用高速缓存设备来缓存存储池数据的存储池.
例如:#zpoolcreatetankmirrorc2t0d0c2t1d0c2t3d0cachec2t5d0c2t8d0#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c2t0d0ONLINE000c2t1d0ONLINE000c2t3d0ONLINE000cachec2t5d0ONLINE000c2t8d0ONLINE000errors:Noknowndataerrors添加高速缓存设备之后,这些设备中将逐渐填充来自主内存的内容.
填充设备可能需要一个小时以上的时间,具体取决于高速缓存设备的大小.
可以通过按以下方式使用zpooliostat命令来监视容量和读取操作:#zpooliostat-vpool5创建池后,可以在池中添加高速缓存设备或从池中删除高速缓存设备.
确定是否创建使用高速缓存设备的ZFS存储池时,请注意以下几点:使用高速缓存设备,可以最大程度地提高大多数静态内容的随机读取工作的性能.
可以使用zpooliostat命令监视容量和读取操作.
创建池时,可以添加一个或多个高速缓存设备.
也可以在创建池后添加或删除高速缓存设备.
有关更多信息,请参见例3-4"添加和删除高速缓存设备".
创建和销毁ZFS存储池第3章管理OracleSolarisZFS存储池39高速缓存设备不能镜像或成为RAID-Z配置的一部分.
如果高速缓存设备发生读取错误,则会向原始存储池设备(它可能是镜像配置或RAID-Z配置的一部分)重新发出读取I/O.
高速缓存设备的内容是易失性的,与其他系统高速缓存类似.
创建存储池的注意事项创建和管理ZFS存储池时,请注意以下事项.
请勿对属于现有存储池一部分的磁盘重新分区或重新设置标签.
如果尝试对根池磁盘重新分区或重新设置标签,可能需要重新安装OS.
创建存储池时,请勿包含来自其他存储池的组件(如文件或卷).
这种配置不受支持,且会发生死锁.
使用单个分片或单个磁盘创建的池没有冗余,会面临丢失数据的风险.
使用多个分片创建的池如果没有冗余,也会面临丢失数据的风险.
使用磁盘中多个分片创建的池比使用整个磁盘创建的池难以管理.
创建时未设置ZFS冗余(RAID-Z或镜像)的池只能报告数据不一致性,无法修复数据不一致性.
虽然创建池时设置ZFS冗余有助于减少因硬件故障而导致的停机时间,但是这样的池仍不可避免地会受硬件故障、电源故障或电缆断开的影响.
请确保定期备份您的数据.
对非企业级硬件上的池数据定期执行备份很重要.
池不能在系统之间共享.
ZFS不是群集文件系统.
显示存储池虚拟设备信息每个存储池都包含一个或多个虚拟设备.
虚拟设备是存储池的内部表示形式,用于描述物理存储器的布局以及存储池的故障特征.
因此,虚拟设备表示用于创建存储池的磁盘设备或文件.
一个池可以在配置的顶层具有任意数目的虚拟设备,称为顶层vdev.
如果顶层虚拟设备包含两个或更多物理设备,配置将以镜像或RAID-Z虚拟设备的形式提供数据冗余.
这些虚拟设备由磁盘、磁盘分片或文件构成.
备件是一种特殊虚拟设备,用于跟踪一个池的可用热备件.
以下示例说明如何创建一个包含两个顶层虚拟设备(各虚拟设备是由两个磁盘组成的镜像)的池:#zpoolcreatetankmirrorc1d0c2d0mirrorc3d0c4d0以下示例说明如何创建包含一个顶层虚拟设备(由4个磁盘组成)的池.
#zpoolcreatemypoolraidz2c1d0c2d0c3d0c4d0可以使用zpooladd命令将另一个顶层虚拟设备添加到此池中.
例如:创建和销毁ZFS存储池40在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zpooladdmypoolraidz2c2d1c3d1c4d1c5d1非冗余池中使用的磁盘、磁盘分片或文件可用作顶层虚拟设备.
存储池通常由多个顶层虚拟设备构成.
ZFS将在池内的所有顶层虚拟设备中以动态方式对数据进行条带化.
可使用zpoolstatus命令显示ZFS存储池中包含的虚拟设备和物理设备.
例如:#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE000mirror-1ONLINE000c0t2d0ONLINE000c1t2d0ONLINE000mirror-2ONLINE000c0t3d0ONLINE000c1t3d0ONLINE000errors:Noknowndataerrors处理ZFS存储池创建错误出现池创建错误可以有许多原因.
其中一些原因是显而易见的(如指定的设备不存在),而其他原因则不太明显.
检测使用中的设备格式化设备之前,ZFS会首先确定ZFS或操作系统的某个其他部分是否正在使用磁盘.
如果磁盘正在使用,则可能会显示类似以下的错误:#zpoolcreatetankc1t0d0c1t1d0invalidvdevspecificationuse'-f'tooverridethefollowingerrors:/dev/dsk/c1t0d0s0iscurrentlymountedon/.
Pleaseseeumount(1M).
/dev/dsk/c1t0d0s1iscurrentlymountedonswap.
Pleaseseeswap(1M).
/dev/dsk/c1t1d0s0ispartofactiveZFSpoolzeepool.
Pleaseseezpool(1M).
通过使用-f选项可以覆盖部分错误,但是无法覆盖大部分错误.
以下情况无法使用-f选项覆盖,您必须手动更正:挂载的文件系统磁盘或其中一分片包含当前挂载的文件系统.
要更正此错误,请使用umount命令.
创建和销毁ZFS存储池第3章管理OracleSolarisZFS存储池41/etc/vfstab中的文件系统磁盘包含/etc/vfstab文件中列出的文件系统,但当前未挂载该文件系统.
要更正此错误,请删除或注释掉/etc/vfstab文件中的相应行.
专用转储设备正在将磁盘用作系统的专用转储设备.
要更正此错误,请使用dumpadm命令.
ZFS池的一部分磁盘或文件是活动ZFS存储池的一部分.
要更正此错误,请使用zpooldestroy命令来销毁其他池(如果不再需要).
或者,使用zpooldetach命令将磁盘与其他池分离.
您只能将磁盘从镜像存储池中分离.
以下使用情况检查用作帮助性警告,并可以使用-f选项进行覆盖以创建池:包含文件系统磁盘包含已知的文件系统,尽管该系统未挂载并且看起来未被使用.
卷的一部分磁盘是SolarisVolumeManager卷的一部分.
导出的ZFS池的一部分磁盘是已导出的或者从系统中手动删除的存储池的一部分.
如果是后一种情况,则会将池的状态报告为可能处于活动状态,因为磁盘可能是也可能不是由其他系统使用的网络连接驱动器.
覆盖可能处于活动状态的池时请务必谨慎.
以下示例说明如何使用-f选项:#zpoolcreatetankc1t0d0invalidvdevspecificationuse'-f'tooverridethefollowingerrors:/dev/dsk/c1t0d0s0containsaufsfilesystem.
#zpoolcreate-ftankc1t0d0理想情况是更正错误,而不是使用-f选项覆盖错误.
复制级别不匹配建议不要创建包含不同复制级别的虚拟设备的池.
zpool命令可尝试防止意外创建冗余级别不匹配的池.
如果您尝试创建使用此配置的池,将会看到类似如下的错误:#zpoolcreatetankc1t0d0mirrorc2t0d0c3t0d0invalidvdevspecificationuse'-f'tooverridethefollowingerrors:mismatchedreplicationlevel:bothdiskandmirrorvdevsarepresent#zpoolcreatetankmirrorc1t0d0c2t0d0mirrorc3t0d0c4t0d0c5t0d0invalidvdevspecificationuse'-f'tooverridethefollowingerrors:mismatchedreplicationlevel:2-waymirrorand3-waymirrorvdevsarepresent创建和销毁ZFS存储池42在OracleSolaris11.
2中管理ZFS文件系统2014年12月可以使用-f选项覆盖这些错误,但应避免这种做法.
此命令还会发出警告,指明正使用大小不同的设备创建镜像池或RAID-Z池.
虽然允许这种配置,但冗余结果的不匹配程度会导致较大设备上出现未使用磁盘空间.
要求使用-f选项覆盖警告.
在预运行模式下创建存储池尝试创建池可能会以多种方式意外失败,格式化磁盘是一种潜在有害的操作.
因此,zpoolcreate命令提供了一个额外选项-n,它模拟创建池,但不真正写入设备.
此预运行选项执行设备使用中检查和复制级别验证,并报告该过程中出现的任何错误.
如果未找到错误,则会显示类似以下的输出:#zpoolcreate-ntankmirrorc1t0d0c1t1d0wouldcreate'tank'withthefollowinglayout:tankmirrorc1t0d0c1t1d0如果不实际创建池,则无法检测到某些错误.
最常见的示例是在同一配置中两次指定同一设备.
不真正写入数据将无法可靠地检测此错误,因此zpoolcreate-n命令可以报告操作成功,但不会创建池.
存储池的缺省挂载点创建池时,顶层文件系统的缺省挂载点是/pool-name.
此目录必须不存在或者为空.
如果目录不存在,则会自动创建该目录.
如果该目录为空,则根文件系统会挂载在现有目录的顶层.
要使用其他缺省挂载点创建池,请在-zpoolcreate命令中使用m选项.
例如:#zpoolcreatehomec1t0d0defaultmountpoint'/home'existsandisnotemptyuse'-m'optiontoprovideadifferentdefault#zpoolcreate-m/export/zfshomec1t0d0此命令会创建新池home和挂载点为/export/zfs的home文件系统.
有关挂载点的更多信息,请参见"管理ZFS挂载点"[138].
销毁ZFS存储池池是通过使用zpooldestroy命令进行销毁的.
此命令会销毁池,即使池中包含挂载的数据集也是如此.
管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池43#zpooldestroytank注意-销毁池时请务必小心.
请确保确实要销毁池,并始终保留数据副本.
如果意外销毁了不该销毁的池,则可以尝试恢复该池.
有关更多信息,请参见"恢复已销毁的ZFS存储池"[83].
如果使用zpooldestroy命令销毁池,该池仍可用于导入,如"恢复已销毁的ZFS存储池"[83]中所述.
这意味着属于该池的磁盘上的机密数据可能仍可用.
如果要将已销毁池的磁盘上的数据销毁,必须对已销毁池中的每个磁盘使用类似于format实用程序的analyze->purge选项的功能.
使文件系统数据保密的另一种方法是创建加密的ZFS文件系统.
采用加密文件系统的池被销毁后,即使恢复了已销毁的池,在没有加密密钥的情况下也无法访问其中的数据.
有关更多信息,请参见"加密ZFS文件系统"[157].
销毁包含不可用设备的池销毁池这一操作要求将数据写入磁盘,以指示池不再有效.
此状态信息可防止执行导入操作时这些设备作为潜在的池显示出来.
在一个或多个设备不可用的情况下,仍可以销毁池.
但是,必需的状态信息将不会写入这些不可用的设备.
经过适当修复后,当您创建新池时,这些设备被报告为潜在活动设备.
当您搜索池以便导入时,这些设备显示为有效设备.
如果池中包含足够多的UNAVAIL设备,以致于池本身也变为UNAVAIL状态(这意味着顶层虚拟设备变为UNAVAIL),则此命令将输出一条警告,并且在不使用-f选项的情况下无法完成操作.
此选项是必需的,因为无法打开池,以致无法知道数据是否存储在池中.
例如:#zpooldestroytankcannotdestroy'tank':poolisfaulteduse'-f'toforcedestructionanyway#zpooldestroy-ftank有关池和设备的运行状况的更多信息,请参见"确定ZFS存储池的运行状况"[71].
有关导入池的更多信息,请参见"导入ZFS存储池"[79].
管理ZFS存储池中的设备"ZFS存储池的组件"[27]中介绍了有关设备的大多数基本信息.
创建池后,即可执行几项任务来管理池中的物理设备.
"向存储池中添加设备"[44]"附加和分离存储池设备"[48]"通过拆分镜像ZFS存储池创建新池"[50]"使存储池中的设备联机和脱机"[53]管理ZFS存储池中的设备44在OracleSolaris11.
2中管理ZFS文件系统2014年12月"清除存储池设备错误"[55]"替换存储池中的设备"[55]"在存储池中指定热备件"[57]向存储池中添加设备通过添加新的顶层虚拟设备,可以向池中动态添加磁盘空间.
此磁盘空间立即可供池中的所有数据集使用.
要向池中添加新虚拟设备,请使用zpooladd命令.
例如:#zpooladdzeepoolmirrorc2t1d0c2t2d0用于指定虚拟设备的格式与zpoolcreate命令中使用的虚拟设备格式相同.
将对设备进行检查,确定是否正在使用这些设备,此命令在不使用-f选项的情况下无法更改冗余级别.
此命令还支持-n选项,以便可以执行预运行.
例如:#zpooladd-nzeepoolmirrorc3t1d0c3t2d0wouldupdate'zeepool'tothefollowingconfiguration:zeepoolmirrorc1t0d0c1t1d0mirrorc2t1d0c2t2d0mirrorc3t1d0c3t2d0此命令语法会将镜像设备c3t1d0和c3t2d0添加到zeepool池的现有配置中.
有关如何执行虚拟设备验证的更多信息,请参见"检测使用中的设备"[40].
例3-1向镜像ZFS配置中添加磁盘在以下示例中,向现有的镜像ZFS配置添加了另一个镜像.
#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE000mirror-1ONLINE000管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池45c0t2d0ONLINE000c1t2d0ONLINE000errors:Noknowndataerrors#zpooladdtankmirrorc0t3d0c1t3d0#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE000mirror-1ONLINE000c0t2d0ONLINE000c1t2d0ONLINE000mirror-2ONLINE000c0t3d0ONLINE000c1t3d0ONLINE000errors:Noknowndataerrors例3-2向RAID-Z配置中添加磁盘可按类似方式向RAID-Z配置中添加其他磁盘.
以下示例说明如何将包含一个RAID-Z设备(含3个磁盘)的存储池转换为包含两个RAID-Z设备(各含3个磁盘)的存储池.
#zpoolstatusrzpoolpool:rzpoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMrzpoolONLINE000raidz1-0ONLINE000c1t2d0ONLINE000c1t3d0ONLINE000c1t4d0ONLINE000errors:Noknowndataerrors#zpooladdrzpoolraidzc2t2d0c2t3d0c2t4d0#zpoolstatusrzpoolpool:rzpoolstate:ONLINEscrub:nonerequestedconfig:管理ZFS存储池中的设备46在OracleSolaris11.
2中管理ZFS文件系统2014年12月NAMESTATEREADWRITECKSUMrzpoolONLINE000raidz1-0ONLINE000c1t2d0ONLINE000c1t3d0ONLINE000c1t4d0ONLINE000raidz1-1ONLINE000c2t2d0ONLINE000c2t3d0ONLINE000c2t4d0ONLINE000errors:Noknowndataerrors例3-3添加和删除镜像日志设备以下示例说明如何向镜像存储池中添加镜像日志设备.
#zpoolstatusnewpoolpool:newpoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMnewpoolONLINE000mirror-0ONLINE000c0t4d0ONLINE000c0t5d0ONLINE000errors:Noknowndataerrors#zpooladdnewpoollogmirrorc0t6d0c0t7d0#zpoolstatusnewpoolpool:newpoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMnewpoolONLINE000mirror-0ONLINE000c0t4d0ONLINE000c0t5d0ONLINE000logsmirror-1ONLINE000c0t6d0ONLINE000c0t7d0ONLINE000errors:Noknowndataerrors可以将日志设备附加到现有日志设备,以创建镜像日志设备.
此操作等同于在未镜像的存储池中附加设备.
管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池47您可以使用zpoolremove命令移除日志设备.
通过指定mirror-1参数,可以删除上例中的镜像日志设备.
例如:#zpoolremovenewpoolmirror-1#zpoolstatusnewpoolpool:newpoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMnewpoolONLINEWRITECKSUMmirror-0ONLINE000c0t4d0ONLINE000c0t5d0ONLINE000errors:Noknowndataerrors如果池配置仅包含一个日志设备,应通过指定设备名称的方式移除该日志设备.
例如:#zpoolstatuspoolpool:poolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMpoolONLINE000raidz1-0ONLINE000c0t8d0ONLINE000c0t9d0ONLINE000logsc0t10d0ONLINE000errors:Noknowndataerrors#zpoolremovepoolc0t10d0例3-4添加和删除高速缓存设备可以向ZFS存储池中添加高速缓存设备,不再需要时可以删除.
可使用zpooladd命令添加高速缓存设备.
例如:#zpooladdtankcachec2t5d0c2t8d0#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUM管理ZFS存储池中的设备48在OracleSolaris11.
2中管理ZFS文件系统2014年12月tankONLINE000mirror-0ONLINE000c2t0d0ONLINE000c2t1d0ONLINE000c2t3d0ONLINE000cachec2t5d0ONLINE000c2t8d0ONLINE000errors:Noknowndataerrors高速缓存设备不能镜像或成为RAID-Z配置的一部分.
可使用zpoolremove命令删除高速缓存设备.
例如:#zpoolremovetankc2t5d0c2t8d0#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c2t0d0ONLINE000c2t1d0ONLINE000c2t3d0ONLINE000errors:Noknowndataerrors目前,zpoolremove命令仅支持删除热备件、日志设备和高速缓存设备.
可以使用zpooldetach命令删除属于主镜像池配置的设备.
非冗余设备和RAID-Z设备无法从池中删除.
有关在ZFS存储池中使用高速缓存设备的更多信息,请参见"创建使用高速缓存设备的ZFS存储池"[38].
附加和分离存储池设备除了zpooladd命令外,还可以使用zpoolattach命令将新设备添加到现有镜像设备或非镜像设备中.
如果要附加磁盘以创建镜像根池,请参见如何配置镜像根池(SPARC或x86/VTOC)[92].
如果要替换ZFS根池中的磁盘,请参见如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)[95].
管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池49例3-5将双向镜像存储池转换为三向镜像存储池在本示例中,zeepool是现有的双向镜像,通过将新设备c2t1d0附加到现有设备c1t1d0可将其转换为三向镜像.
#zpoolstatuszeepoolpool:zeepoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE000errors:Noknowndataerrors#zpoolattachzeepoolc1t1d0c2t1d0#zpoolstatuszeepoolpool:zeepoolstate:ONLINEscrub:resilvercompletedafter0h0mwith0errorsonFriJan812:59:202010config:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE000c2t1d0ONLINE000592Kresilverederrors:Noknowndataerrors如果现有设备是三向镜像的一部分,则附加新设备将创建四向镜像,依此类推.
在任一情况下,新设备都会立即开始重新同步.
例3-6将非冗余ZFS存储池转换为镜像ZFS存储池此外,还可以通过使用zpoolattach命令将非冗余存储池转换为冗余存储池.
例如:#zpoolcreatetankc0t1d0#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000c0t1d0ONLINE000errors:Noknowndataerrors#zpoolattachtankc0t1d0c1t1d0管理ZFS存储池中的设备50在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zpoolstatustankpool:tankstate:ONLINEscrub:resilvercompletedafter0h0mwith0errorsonFriJan814:28:232010config:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c0t1d0ONLINE000c1t1d0ONLINE00073.
5Kresilverederrors:Noknowndataerrors可以使用zpooldetach命令从镜像存储池中分离设备.
例如:#zpooldetachzeepoolc2t1d0然而,如果不存在数据的其他有效副本,此操作将失败.
例如:#zpooldetachnewpoolc1t2d0cannotdetachc1t2d0:onlyapplicabletomirrorandreplacingvdevs通过拆分镜像ZFS存储池创建新池通过使用zpoolsplit命令,可以将镜像ZFS存储池快速克隆为备份池.
可以使用zpoolsplit命令从镜像ZFS存储池中分离一个或多个磁盘,以使用分离的磁盘创建新池.
新池的内容与原镜像ZFS存储池完全相同.
注-有关使用zpoolsplit命令拆分ZFS池的更多过程,请在MyOracleSupport(https://support.
oracle.
com)登录您的帐户,查看"HowtoUse'zpoolsplit'toSplitanrpool(DocID1637715.
1)"(如何使用"zpoolsplit"拆分rpool(文档ID1637715.
1)).
缺省情况下,对镜像池执行zpoolsplit操作将分离最后一个磁盘以用于新创建的池.
拆分操作完成后,导入新池.
例如:#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池51c1t0d0ONLINE000c1t2d0ONLINE000errors:Noknowndataerrors#zpoolsplittanktank2#zpoolimporttank2#zpoolstatustanktank2pool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000c1t0d0ONLINE000errors:Noknowndataerrorspool:tank2state:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtank2ONLINE000c1t2d0ONLINE000errors:Noknowndataerrors通过在zpoolsplit命令中指定,您可以标识哪个磁盘应用于新创建的池.
例如:#zpoolsplittanktank2c1t0d0发生实际的拆分操作之前,内存中的数据被刷新到镜像磁盘.
数据刷新后,将磁盘从池中分离,并将其指定给一个新池GUID.
将生成新池GUID,以便能在拆分该池的系统上导入该池.
如果要拆分的池具有非缺省的文件系统挂载点,并且已在同一系统上创建了新池,必须使用zpoolsplit-R选项标识新池的备用根目录,使现有挂载点不会发生冲突.
例如:#zpoolsplit-R/tank2tanktank2如果不使用zpoolsplit-R选项,当您试图使用-R选项导入新池时,挂载点会发生冲突.
如果在不同的系统上创建新池,则没必要指定备用根目录,除非发生挂载点冲突.
使用zpoolsplit功能之前,请检查以下几点:对于RAID-Z配置或者由多个磁盘组成的非冗余池,此功能不可用.
尝试zpoolsplit操作之前,数据和应用程序操作应停顿.
如果重新同步正在进行中,则无法拆分池.
拆分由两到三个磁盘组成的镜像池是最佳的,其中原池中的最后一个磁盘将用于新创建的池.
然后,可以使用zpoolattach命令重新创建原镜像存储池,或者将新创建管理ZFS存储池中的设备52在OracleSolaris11.
2中管理ZFS文件系统2014年12月的池转换为镜像存储池.
目前无法通过一个zpoolsplit操作从现有镜像池创建新镜像池,因为新(拆分的)池是非冗余的.
如果现有池是一个三向池,则在拆分操作之后,新池将包含一个磁盘.
如果现有池是一个由两个磁盘组成的双向池,则结果是由两个磁盘组成的两个非冗余池.
您必须再附加两个磁盘,以将非冗余池转换为镜像池.
在拆分操作期间,保持数据冗余性的一个好方法是拆分由三个磁盘组成的镜像存储池,这样在拆分操作之后,原池由两个镜像磁盘组成.
在拆分镜像池之前,请确认硬件配置正确无误.
有关确认硬件高速缓存刷新设置的相关信息,请参见"一般系统做法"[267].
例3-7拆分镜像ZFS存储池在以下示例中,对名为mothership的镜像存储池(包含三个磁盘)进行拆分.
分割产生了两个池,即,镜像池mothership(包含两个磁盘)和新池luna(包含一个磁盘).
每个池的内容完全相同.
可以将池luna导入另一个系统中以进行备份.
备份完成后,可以将池luna销毁,并将其磁盘重新附加到mothership.
然后,可以重复执行这一过程.
#zpoolstatusmothershippool:mothershipstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMmothershipONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335F907Fd0ONLINE000errors:Noknowndataerrors#zpoolsplitmothershipluna#zpoolimportluna#zpoolstatusmothershiplunapool:lunastate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMlunaONLINE000c0t5000C500335F907Fd0ONLINE000errors:Noknowndataerrorspool:mothershipstate:ONLINEscan:nonerequested管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池53config:NAMESTATEREADWRITECKSUMmothershipONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335BD117d0ONLINE000errors:Noknowndataerrors使存储池中的设备联机和脱机使用ZFS可使单个设备脱机或联机.
硬件不可靠或无法正常工作时(假定该情况只是暂时的),ZFS会继续对设备读写数据.
如果该情况不是暂时的,您可以指示ZFS通过使设备脱机来忽略该设备.
ZFS不会向脱机设备发送任何请求.
注-设备无需脱机即可进行替换.
使设备脱机可以使用zpooloffline命令使设备脱机.
如果设备是磁盘,则可以使用路径或短名称指定设备.
例如:#zpoolofflinetankc0t5000C500335F95E3d0使设备脱机时,请注意以下几点:不能将池脱机到变为UNAVAIL的程度.
例如,不能使raidz1配置中的两个设备脱机,也不能使顶层虚拟设备脱机.
#zpoolofflinetankc0t5000C500335F95E3d0cannotofflinec0t5000C500335F95E3d0:novalidreplicas缺省情况下,OFFLINE状态是持久性的.
重新引导系统时,设备会一直处于脱机状态.
要暂时使设备脱机,请使用zpooloffline-t选项.
例如:#zpooloffline-ttankc1t0d0重新引导系统时,此设备会自动恢复到ONLINE状态.
当设备脱机时,它不会从存储池中分离出来.
如果尝试使用其他池中的脱机设备,那么即使在销毁原始池之后,也会显示类似于以下内容的消息:deviceispartofexportedorpotentiallyactiveZFSpool.
Pleaseseezpool(1M)管理ZFS存储池中的设备54在OracleSolaris11.
2中管理ZFS文件系统2014年12月如果要在销毁原始存储池之后使用其他存储池中的脱机设备,请先使该设备恢复联机,然后销毁原始存储池.
要在保留原存储池的同时使用其他存储池中的设备,还有一种方法是用另一个类似的设备替换原存储池中的现有设备.
有关替换设备的信息,请参见"替换存储池中的设备"[55].
查询池的状态时,已脱机的设备以OFFLINE状态显示.
有关查询池的状态的信息,请参见"查询ZFS存储池的状态"[64].
有关设备运行状况的更多信息,请参见"确定ZFS存储池的运行状况"[71].
使设备联机使设备脱机后,可以使用zpoolonline命令使其恢复联机.
例如:#zpoolonlinetankc0t5000C500335F95E3d0使设备联机时,已写入池中的任何数据都将与最新可用的设备重新同步.
请注意,不能通过使设备联机来替换磁盘.
如果使设备脱机,然后替换该设备并尝试使其联机,则设备将一直处于UNAVAIL状态.
如果尝试使UNAVAIL设备联机,则会显示类似于以下内容的消息:#zpoolonlinetankc0t5000C500335DC60Fd0warning:device'c0t5000C500335DC60Fd0'onlined,butremainsinfaultedstateuse'zpoolclear'torestoreafaulteddevice您还可能会看到故障磁盘消息显示在控制台上,或者写入/var/adm/messages文件中.
例如:SUNW-MSG-ID:ZFS-8000-LR,TYPE:Fault,VER:1,SEVERITY:MajorEVENT-TIME:WedJun2011:35:26MDT2012PLATFORM:ORCL,SPARC-T3-4,CSN:1120BDRCCD,HOSTNAME:tardisSOURCE:zfs-diagnosis,REV:1.
0EVENT-ID:fb6699c8-6bfb-eefa-88bb-81479182e3b7DESC:ZFSdevice'id1,sd@n5000c500335dc60f/a'inpool'pond'failedtoopen.
AUTO-RESPONSE:Anattemptwillbemadetoactivateahotspareifavailable.
IMPACT:Faulttoleranceofthepoolmaybecompromised.
REC-ACTION:Use'fmadmfaulty'toprovideamoredetailedviewofthisevent.
Run'zpoolstatus-lx'formoreinformation.
Pleaserefertotheassociatedreferencedocumentathttp://support.
oracle.
com/msg/ZFS-8000-LRforthelatestserviceproceduresandpoliciesregardingthisdiagnosis.
有关更换故障设备的更多信息,请参见"解决缺少设备或设备被移除的问题"[244].
您可以使用zpoolonline-e命令扩展LUN.
缺省情况下,添加至池中的LUN不会扩展到其完整大小,除非启用了autoexpand池属性.
使用zpoolonline-e命令可以自动扩展LUN,即使LUN已经联机或者LUN目前脱机.
例如:管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池55#zpoolonline-etankc0t5000C500335F95E3d0清除存储池设备错误如果设备发生了在zpoolstatus输出中列出错误的故障,并因而脱机,您可以使用zpoolclear命令清除错误计数.
如果池中的设备失去连接,然后连接恢复,您也需要清除这些错误.
如果不指定任何参数,则此命令将清除池中的所有设备错误.
例如:#zpoolcleartank如果指定了一个或多个设备,此命令仅清除与指定设备关联的错误.
例如:#zpoolcleartankc0t5000C500335F95E3d0有关清除zpool错误的更多信息,请参见"清除瞬态或持久性设备错误"[249].
替换存储池中的设备可以使用zpoolreplace命令替换存储池中的设备.
如果使用冗余池中同一位置的另一设备以物理方式替换某一设备,则可能只需标识被替换的设备.
在某些硬件上,ZFS会认为该设备是同一位置的不同磁盘.
例如,要移除出现故障的磁盘(c1t1d0)并在同一位置替换该磁盘,请使用以下语法:#zpoolreplacetankc1t1d0如果要使用位于不同物理位置的磁盘替换存储池中的设备,必须同时指定两个设备.
例如:#zpoolreplacetankc1t1d0c1t2d0如果要替换ZFS根池中的磁盘,请参见如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)[95].
下面是替换磁盘的基本步骤:1.
使用zpooloffline命令使磁盘脱机(如有必要).
2.
移除要替换的磁盘.
3.
插入替换磁盘.
4.
查看format输出,确定替换磁盘是否可见.
管理ZFS存储池中的设备56在OracleSolaris11.
2中管理ZFS文件系统2014年12月另外,检查设备ID是否已更改.
如果替换磁盘具有WWN,则故障磁盘的设备ID已更改.
5.
使ZFS分辨出磁盘已替换.
例如:#zpoolreplacetankc1t1d0如果替换磁盘具有不同的设备ID,如以上所示,请包含该新的设备ID.
#zpoolreplacetankc0t5000C500335FC3E7d0c0t5000C500335BA8C3d06.
如有必要,使用zpoolonline命令使磁盘联机.
7.
让FMA知道设备已被替换.
在fmadmfaulty输出的Affects:部分中找到zfs://pool=name/vdev=guid字符串,并将该字符串作为参数提供给fmadmrepaired命令.
#fmadmfaulty#fmadmrepairedzfs://pool=name/vdev=guid在具有SATA磁盘的某些系统上,必须先取消配置磁盘才能使其脱机.
如果在该系统的同一插槽位置替换磁盘,则可以仅执行zpoolreplace命令,如本节的第一个示例所示.
有关替换SATA磁盘的示例,请参见例10-1"替换ZFS存储池中的SATA磁盘".
替换ZFS存储池中的设备时,请注意以下几点:如果将池属性autoreplace设置为on,则会自动对在先前属于该池的设备的同一物理位置处找到的任何新设备进行格式化和替换.
启用此属性时,无需使用zpoolreplace命令.
此功能可能并不是在所有硬件类型上都可用.
如果在系统运行期间设备或热备件被物理移除,则会提供存储池状态REMOVED.
热备用设备(如果有)会替换移除的设备.
如果设备被移除后又重新插入,该设备将联机.
如果重新插入设备时热备件处于激活状态,则热备件将在联机操作完成时被移除.
在移除或插入设备时自动检测依赖于硬件,而且并非在所有平台上都受支持.
例如,USB设备会在插入时自动进行配置.
但是,您可能必须使用cfgadm-cconfigure命令来配置SATA驱动器.
系统会定期检查热备件,以确保它们处于联机状态并可供使用.
替换设备的大小必须等于或大于镜像或RAID-Z配置中最小磁盘的大小.
将大小大于要替换设备的替换设备添加到池中后,它不会自动扩展到完整大小.
池属性autoexpand的值决定当磁盘添加到池中时,是否将替换LUN扩展到其完整大小.
缺省情况下,autoexpand属性禁用.
您可以在将较大的LUN添加到池中之前或之后,启用此属性以扩展LUN大小.
在以下示例中,两个72-GB磁盘替换镜像池中的两个16-GB磁盘.
确保第一个设备完全重新同步,然后再尝试替换第二个设备.
磁盘替换后,启用autoexpand属性以扩展到完整的磁盘大小.
#zpoolcreatepoolmirrorc1t16d0c1t17d0管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池57#zpoolstatuspool:poolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMpoolONLINE000mirrorONLINE000c1t16d0ONLINE000c1t17d0ONLINE000zpoollistpoolNAMESIZEALLOCFREECAPHEALTHALTROOTpool16.
8G76.
5K16.
7G0%ONLINE-#zpoolreplacepoolc1t16d0c1t1d0#zpoolreplacepoolc1t17d0c1t2d0#zpoollistpoolNAMESIZEALLOCFREECAPHEALTHALTROOTpool16.
8G88.
5K16.
7G0%ONLINE-#zpoolsetautoexpand=onpool#zpoollistpoolNAMESIZEALLOCFREECAPHEALTHALTROOTpool68.
2G117K68.
2G0%ONLINE-替换较大池中的多个磁盘需要较长时间,这是因为需要将数据重新同步到新磁盘.
此外,还可以考虑在两次磁盘替换操作之间运行zpoolscrub命令,以确保可供替换的设备可以正常运行,并且正确写入数据.
如果已使用热备件自动替换了故障磁盘,则您可能需要在替换故障磁盘后分离该热备件.
可以使用zpooldetach命令从镜像池或RAID-Z池中分离备件.
有关分离热备件的信息,请参见"在存储池中激活和取消激活热备件"[59].
有关替换设备的更多信息,请参见"解决缺少设备或设备被移除的问题"[244]和"更换或修复损坏的设备"[248].
在存储池中指定热备件借助热备件功能,您可以确定哪些磁盘可用来替换存储池中已发生故障或失败的磁盘.
指定一个设备作为热备件,意味着在池中该设备不是活动设备,但是如果池中的某一活动设备发生故障,热备件将自动替换该故障设备.
可通过以下方式将设备指定为热备件:使用zpoolcreate命令创建池时.
使用zpooladd命令创建池之后.
管理ZFS存储池中的设备58在OracleSolaris11.
2中管理ZFS文件系统2014年12月以下示例说明创建池时如何将某些设备指定为热备件:#zpoolcreatezeepoolmirrorc0t5000C500335F95E3d0c0t5000C500335F907Fd0mirrorc0t5000C500335BD117d0c0t5000C500335DC60Fd0sparec0t5000C500335E106Bd0c0t5000C500335FC3E7d0#zpoolstatuszeepoolpool:zeepoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000sparesc0t5000C500335E106Bd0AVAILc0t5000C500335FC3E7d0AVAILerrors:Noknowndataerrors以下示例说明创建池之后如何通过向池中添加设备来指定热备件:#zpooladdzeepoolsparec0t5000C500335E106Bd0c0t5000C500335FC3E7d0#zpoolstatuszeepoolpool:zeepoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000sparesc0t5000C500335E106Bd0AVAILc0t5000C500335FC3E7d0AVAILerrors:Noknowndataerrors可使用zpoolremove命令从存储池中删除热备件.
例如:#zpoolremovezeepoolc0t5000C500335FC3E7d0#zpoolstatuszeepoolpool:zeepoolstate:ONLINE管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池59scan:nonerequestedconfig:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000sparesc0t5000C500335E106Bd0AVAILerrors:Noknowndataerrors如果存储池当前正在使用热备件,则不能将其删除.
使用ZFS热备件时,请注意以下几点:目前,zpoolremove命令只能用来删除热备件、高速缓存设备和日志设备.
要添加磁盘作为热备件,热备件的大小必须等于或大于池中最大磁盘的大小.
允许向池中添加更小的磁盘作为备件.
但是,当自动激活或使用zpoolreplace命令激活较小的备用磁盘时,操作将失败,并显示类似以下内容的错误:cannotreplacedisk3withdisk4:deviceistoosmall不能跨系统共享备件.
不能配置多个系统共享一个备件,即使这些系统能够访问该磁盘也是如此.
如果将磁盘配置为在多个池之间共享,则只能有一个系统控制这些池.
请记住,如果在同一系统上的两个数据池之间共享了一个备件,则必须协调该备件在两个池之间的使用情况.
例如,池B正在使用该备件,而池A已导出.
池B可能在池A导出的情况下无意中使用了该备件.
当池A导入时,由于两个池都使用了同一个磁盘,可能会发生数据损坏.
即使磁盘对多个池来讲是共享备件,也可能会存在导致池问题的情况,因此,请注意此类极端情况.
不要在根池和数据池之间共享备件.
在存储池中激活和取消激活热备件可通过以下方式激活热备件:手动替换-通过zpoolreplace命令用热备件替换存储池中的故障设备.
自动替换-检测到故障后,FMA代理将检查池中是否有任何可用的热备件.
如果有,将使用可用备件替换故障设备.
如果当前正在使用的热备件发生故障,FMA代理将分离该备件,从而取消替换.
然后,代理将尝试用另一个热备件(如果有)替换该设备.
目前,由于ZFS诊断引擎仅在设备从系统中消失时才会产生故障信息,因此此功能受到限制.
管理ZFS存储池中的设备60在OracleSolaris11.
2中管理ZFS文件系统2014年12月如果将故障设备物理替换为活动备件,则可以使用zpooldetach命令分离该备件,从而重新激活原设备.
如果将autoreplace池属性设置为on,则在插入新设备并完成联机操作后,该备件会自动分离并回到备件池.
如果热备件可用,将自动替换UNAVAIL设备.
例如:#zpoolstatus-xpool:zeepoolstate:DEGRADEDstatus:Oneormoredevicesareunavailableinresponsetopersistenterrors.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Determineifthedeviceneedstobereplaced,andcleartheerrorsusing'zpoolclear'or'fmadmrepaired',orreplacethedevicewith'zpoolreplace'.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:resilvered3.
15Gin0h0mwith0errorsonThuJun2116:46:192012config:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1DEGRADED000c0t5000C500335BD117d0ONLINE000spare-1DEGRADED44900c0t5000C500335DC60Fd0UNAVAIL000c0t5000C500335E106Bd0ONLINE000sparesc0t5000C500335E106Bd0INUSEerrors:Noknowndataerrors目前,取消激活热备件的方法有以下几种:从存储池中删除热备件.
物理替换有故障的磁盘后,分离热备件.
请参见例3-8"替换故障磁盘后分离热备件".
临时或永久性地换入另一热备件.
请参见例3-9"分离故障磁盘并使用热备件".
例3-8替换故障磁盘后分离热备件在本示例中,物理替换了故障磁盘(c0t5000C500335DC60Fd0)并使用zpoolreplace命令通知ZFS.
#zpoolreplacezeepoolc0t5000C500335DC60Fd0#zpoolstatuszeepoolpool:zeepoolstate:ONLINE管理ZFS存储池中的设备第3章管理OracleSolarisZFS存储池61scan:resilvered3.
15Gin0h0mwith0errorsonThuJun2116:53:432012config:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000sparesc0t5000C500335E106Bd0AVAIL如有必要,您可以使用zpooldetach命令使热备件回到备件池.
例如:#zpooldetachzeepoolc0t5000C500335E106Bd0例3-9分离故障磁盘并使用热备件如果您想临时或永久性地换入当前正在替换故障磁盘的热备件以替换磁盘,请分离原(故障)磁盘.
故障磁盘完成替换后,可以将其再添加到存储池用作备件.
例如:#zpoolstatuszeepoolpool:zeepoolstate:DEGRADEDstatus:Oneormoredevicesareunavailableinresponsetopersistenterrors.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Determineifthedeviceneedstobereplaced,andcleartheerrorsusing'zpoolclear'or'fmadmrepaired',orreplacethedevicewith'zpoolreplace'.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:scrubinprogresssinceThuJun2117:01:4920121.
07Gscannedoutof6.
29Gat220M/s,0h0mtogo0repaired,17.
05%doneconfig:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1DEGRADED000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0UNAVAIL000sparesc0t5000C500335E106Bd0AVAILerrors:Noknowndataerrors#zpooldetachzeepoolc0t5000C500335DC60Fd0#zpoolstatuszeepoolpool:zeepoolstate:ONLINE管理ZFS存储池属性62在OracleSolaris11.
2中管理ZFS文件系统2014年12月scan:resilvered3.
15Gin0h0mwith0errorsonThuJun2117:02:352012config:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1DEGRADED000c0t5000C500335BD117d0ONLINE000c0t5000C500335E106Bd0ONLINE000errors:Noknowndataerrors(Originalfaileddiskc0t5000C500335DC60Fd0isphysicallyreplaced)#zpooladdzeepoolsparec0t5000C500335DC60Fd0#zpoolstatuszeepoolpool:zeepoolstate:ONLINEscan:resilvered3.
15Gin0h0mwith0errorsonThuJun2117:02:352012config:NAMESTATEREADWRITECKSUMzeepoolONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1DEGRADED000c0t5000C500335BD117d0ONLINE000c0t5000C500335E106Bd0ONLINE000sparesc0t5000C500335DC60Fd0AVAILerrors:Noknowndataerrors在替换磁盘并分离备件后,通知FMA磁盘已修复.
#fmadmfaulty#fmadmrepairedzfs://pool=name/vdev=guid管理ZFS存储池属性您可以使用zpoolget命令来显示池属性信息.
例如:#zpoolgetallzeepoolNAMEPROPERTYVALUESOURCEzeepoolallocated6.
29G-zeepoolaltroot-defaultzeepoolautoexpandoffdefaultzeepoolautoreplaceoffdefaultzeepoolbootfs-defaultzeepoolcachefile-default管理ZFS存储池属性第3章管理OracleSolarisZFS存储池63zeepoolcapacity1%-zeepooldedupditto0defaultzeepooldedupratio1.
00x-zeepooldelegationondefaultzeepoolfailmodewaitdefaultzeepoolfree550G-zeepoolguid7543986419840620672-zeepoolhealthONLINE-zeepoollistsharesoffdefaultzeepoollistsnapshotsoffdefaultzeepoolreadonlyoff-zeepoolsize556G-zeepoolversion34default可以使用zpoolset命令设置存储池属性.
例如:#zpoolsetautoreplace=onzeepool#zpoolgetautoreplacezeepoolNAMEPROPERTYVALUESOURCEzeepoolautoreplaceonlocal如果尝试在100%全满的池上设置池属性,则会显示类似于以下内容的消息:#zpoolsetautoreplace=ontankcannotsetpropertyfor'tank':outofspace有关预防池空间容量问题的信息,请参见第11章建议的OracleSolarisZFS做法.
表3-1ZFS池属性说明属性名称类型缺省值说明allocated字符串N/A只读值,表示池中物理分配的存储空间量.
altroot字符串off标识备用根目录.
如果进行了设置,则该目录会被前置到池中的任何挂载点.
在检查未知池(如果无法信任其中的挂载点)时,或在典型路径无效的备用引导环境中,可以使用此属性.
autoreplace布尔型off控制设备的自动替换.
如果设置为off,则必须使用zpoolreplace命令启动设备替换.
如果设置为on,则会自动对在先前属于池的设备所在物理位置处找到的任何新设备进行格式化和替换.
该属性缩写为replace.
bootfs布尔型N/A标识根池的缺省可引导文件系统.
此属性通常由安装程序进行设置.
cachefile字符串N/A控制缓存池配置信息的位置.
系统引导时会自动导入高速缓存中的所有池.
但是,安装和群集环境可能需要将此信息高速缓存到不同的位置,以便不会自动导入池.
可设置此属性以将池配置信息高速缓存于不同位置.
以后可以使用zpoolimport-c命令导入此信息.
大多数ZFS配置不使用此属性.
capacity数字N/A只读值,表示已用池空间的百分比.
此属性的缩写为cap.
dedupditto字符串N/A设置一个阈值,如果已进行重复数据删除的块的引用计数超过了该阈值,则将自动存储该块的另一个重复副本.
查询ZFS存储池的状态64在OracleSolaris11.
2中管理ZFS文件系统2014年12月属性名称类型缺省值说明dedupratio字符串N/A池实现的重复数据删除比(只读),表示为一个乘数.
delegation布尔型on控制是否可以向非特权用户授予为某个文件系统定义的访问权限.
有关更多信息,请参见第8章OracleSolarisZFS委托管理.
failmode字符串wait控制发生灾难性池故障时的系统行为.
这种情况通常是由于失去与底层存储设备的连接或池中所有设备出现故障而导致的.
这种事件的行为由下列值之一决定:wait-阻止所有对池的I/O请求,直到设备连接恢复且使用zpoolclear命令清除错误为止.
这种状态下,对池的I/O操作被阻止,但读操作可能会成功.
在设备问题得到解决之前,池一直处于wait状态.
continue-对任何新的写入I/O请求返回EIO错误,但允许对其余任何运行状况良好的设备执行读取操作.
任何未提交到磁盘的写入请求都会被阻止.
重新连接或替换设备后,必须使用zpoolclear命令清除错误.
panic–向控制台打印一则消息并产生系统故障转储.
free字符串N/A只读值,表示池中未分配的块数.
guid字符串N/A只读属性,表示池的唯一标识符.
health字符串N/A只读属性,表示池的当前运行状况(例如ONLINE、DEGRADED、SUSPENDED、REMOVED或UNAVAIL).
listshares字符串off控制使用zfslist命令是否可显示此池中的共享信息.
缺省值为off(关闭).
listsnapshots字符串off控制使用zfslist命令是否可显示与此池有关的快照信息.
如果禁用了此属性,可以通过zfslist-tsnapshot命令显示快照信息.
readonly布尔型off指示某个池是否可以修改.
仅当池已在只读模式下导入时才启用此属性.
如果已启用,则在以读写模式重新导入池之前,任何仅存在于意图日志中的同步数据将不可访问.
size数字N/A只读属性,表示存储池总大小.
version数字N/A表示池的当前盘上版本.
尽管在为了实现向后兼容性而需要一个特定版本时可以使用此属性,但首选的池更新方法是使用zpoolupgrade命令.
可以将此属性设置为1与zpoolupgrade-v命令所报告的当前版本之间的任何数值.
查询ZFS存储池的状态zpoollist命令提供了多种方法来请求有关池状态的信息.
可用信息通常分为以下三个类别:基本使用情况信息、I/O统计信息和运行状况.
本节介绍了所有这三种类型的存储池信息.
"显示有关ZFS存储池的信息"[65]"查看ZFS存储池的I/O统计信息"[69]"确定ZFS存储池的运行状况"[71]查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池65显示有关ZFS存储池的信息可以使用zpoollist命令显示有关池的基本信息.
显示有关所有存储池或某个特定池的信息不带任何参数时,zpoollist命令显示有关系统上所有池的下列信息.
#zpoollistNAMESIZEALLOCFREECAPHEALTHALTROOTtank80.
0G22.
3G47.
7G28%ONLINE-dozer1.
2T384G816G32%ONLINE-此命令输出显示以下信息:NAME池的名称.
SIZE池的总大小,等于所有顶层虚拟设备大小的总和.
ALLOC分配给所有数据集和内部元数据的物理空间量.
请注意,此数量与在文件系统级别报告的磁盘空间量不同.
有关确定可用文件系统空间的更多信息,请参见"ZFS磁盘空间记帐"[18].
FREE池中未分配的空间量.
CAP(CAPACITY)已用磁盘空间量,以总磁盘空间的百分比表示.
HEALTH池的当前运行状况.
有关池运行状况的更多信息,请参见"确定ZFS存储池的运行状况"[71].
ALTROOT池的备用根(如有).
有关备用根池的更多信息,请参见"通过备用根位置使用ZFS池"[235].
通过指定池名称,您还可以为特定池收集统计信息.
例如:#zpoollisttankNAMESIZEALLOCFREECAPHEALTHALTROOTtank80.
0G22.
3G47.
7G28%ONLINE-可以使用zpoollist的时间间隔和计数选项收集一定时期内的统计信息.
此外,使用-T选项可以显示时间戳.
例如:#zpoollist-Td32查询ZFS存储池的状态66在OracleSolaris11.
2中管理ZFS文件系统2014年12月TueNov210:36:11MDT2010NAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTpool33.
8G83.
5K33.
7G0%1.
00xONLINE-rpool33.
8G12.
2G21.
5G36%1.
00xONLINE-TueNov210:36:14MDT2010pool33.
8G83.
5K33.
7G0%1.
00xONLINE-rpool33.
8G12.
2G21.
5G36%1.
00xONLINE-按物理位置显示池设备可以使用zpoolstatus-l选项显示有关池设备的物理位置的信息.
当需要以物理方式移除或替换磁盘时,查看物理位置信息很有帮助.
此外,可以使用fmadmadd-alias命令来引入磁盘别名,磁盘别名可帮助您识别磁盘在您的环境中的物理位置.
例如:#fmadmadd-aliasSUN-Storage-J4400.
1002QCQ015Lab10Rack5.
.
.
#zpoolstatus-ltankpool:tankstate:ONLINEscan:scrubrepaired0in0h0mwith0errorsonFriAug316:00:352012config:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_02/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_20/diskONLINE000mirror-1ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_22/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_14/diskONLINE000mirror-2ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_10/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_16/diskONLINE000mirror-3ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_01/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_21/diskONLINE000mirror-4ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_23/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_15/diskONLINE000mirror-5ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_09/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_04/diskONLINE000mirror-6ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_08/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_05/diskONLINE000mirror-7ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_07/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_11/diskONLINE000mirror-8ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_06/diskONLINE000查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池67/dev/chassis/Lab10Rack5.
.
.
/DISK_19/diskONLINE000mirror-9ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_00/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_13/diskONLINE000mirror-10ONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_03/diskONLINE000/dev/chassis/Lab10Rack5.
.
.
/DISK_18/diskONLINE000spares/dev/chassis/Lab10Rack5.
.
.
/DISK_17/diskAVAIL/dev/chassis/Lab10Rack5.
.
.
/DISK_12/diskAVAILerrors:Noknowndataerrors显示特定的存储池统计信息可以使用-o选项请求特定的统计信息.
使用此选项可以生成定制报告或快速列出相关信息.
例如,要仅列出每个池的名称和大小,可使用以下语法:#zpoollist-oname,sizeNAMESIZEtank80.
0Gdozer1.
2T列名称与"显示有关所有存储池或某个特定池的信息"[65]中列出的属性相对应.
使用脚本处理ZFS存储池输出zpoollist命令的缺省输出目的在于提高可读性,因此不能轻易用作shell脚本的一部分.
为了便于在程序中使用该命令,可以使用-H选项以便不显示列标题,并使用制表符而不是空格分隔字段.
例如,要请求系统中所有池的名称列表,可以使用以下语法:#zpoollist-Honametankdozer以下是另一个示例:#zpoollist-H-oname,sizetank80.
0Gdozer1.
2T显示ZFS存储池命令历史记录ZFS会自动记录成功修改池状态信息的zfs和zpool命令.
使用zpoolhistory命令可显示此信息.
查询ZFS存储池的状态68在OracleSolaris11.
2中管理ZFS文件系统2014年12月例如,以下语法显示了根池的命令输出:#zpoolhistoryHistoryfor'rpool':2012-04-06.
14:02:55zpoolcreate-frpoolc3t0d0s02012-04-06.
14:02:56zfscreate-p-omountpoint=/exportrpool/export2012-04-06.
14:02:58zfssetmountpoint=/exportrpool/export2012-04-06.
14:02:58zfscreate-prpool/export/home2012-04-06.
14:03:03zfscreate-p-V2048mrpool/swap2012-04-06.
14:03:08zfssetprimarycache=metadatarpool/swap2012-04-06.
14:03:09zfscreate-p-V4094mrpool/dump2012-04-06.
14:26:47zpoolsetbootfs=rpool/ROOT/s11u1rpool2012-04-06.
14:31:15zfssetprimarycache=metadatarpool/swap2012-04-06.
14:31:46zfscreate-ocanmount=noauto-omountpoint=/var/sharerpool/VARSHARE2012-04-06.
15:22:33zfssetprimarycache=metadatarpool/swap2012-04-06.
16:42:48zfssetprimarycache=metadatarpool/swap2012-04-09.
16:17:24zfssnapshot-rrpool/ROOT@yesterday2012-04-09.
16:17:54zfssnapshot-rrpool/ROOT@now您可以使用有关系统的类似输出来确定对错误状况进行故障排除时所执行的确切ZFS命令.
历史记录日志有如下特点:不能禁用日志.
日志持久保存在磁盘上,这意味着系统重新引导后,将保存日志.
日志作为环形缓冲区来实现.
最小大小为128KB.
最大大小为32MB.
对于较小的池,日志最大大小的上限设置为池大小的1%,而池大小是在创建池时确定的.
日志无需任何管理,这意味着不需要调整日志大小或更改日志位置.
要确定特定存储池的命令历史记录,请使用类似以下内容的语法:#zpoolhistorytank2012-01-25.
16:35:32zpoolcreate-ftankmirrorc3t1d0c3t2d0sparec3t3d02012-02-17.
13:04:10zfscreatetank/test2012-02-17.
13:05:01zfssnapshot-rtank/test@snap1可使用-l选项显示长格式(包括用户名、主机名和执行操作的区域).
例如:#zpoolhistory-ltankHistoryfor'tank':2012-01-25.
16:35:32zpoolcreate-ftankmirrorc3t1d0c3t2d0sparec3t3d0[userrootontardis:global]2012-02-17.
13:04:10zfscreatetank/test[userrootontardis:global]2012-02-17.
13:05:01zfssnapshot-rtank/test@snap1[userrootontardis:global]可使用-i选项显示可用于诊断目的的内部事件信息.
例如:#zpoolhistory-itankHistoryfor'tank':查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池692012-01-25.
16:35:32zpoolcreate-ftankmirrorc3t1d0c3t2d0sparec3t3d02012-01-25.
16:35:32[internalpoolcreatetxg:5]poolspa33;zfsspa33;zpl5;utstardis5.
1111.
1sun4v2012-02-17.
13:04:10zfscreatetank/test2012-02-17.
13:04:10[internalpropertysettxg:66094]$share2=2dataset=342012-02-17.
13:04:31[internalsnapshottxg:66095]dataset=562012-02-17.
13:05:01zfssnapshot-rtank/test@snap12012-02-17.
13:08:00[internaluserholdtxg:66102]temp=1.
.
.
查看ZFS存储池的I/O统计信息要请求池或特定虚拟设备的I/O统计信息,请使用zpooliostat命令.
与iostat命令类似,此命令也可以显示所有I/O活动的静态快照,以及每个指定时间间隔的更新统计信息.
可以报告以下统计信息:alloccapacity当前存储在池或设备中的数据量.
由于具体的内部实现的原因,此数量与可供实际文件系统使用的磁盘空间量有少量差异.
有关池空间与数据集空间之间的差异的更多信息,请参见"ZFS磁盘空间记帐"[18].
freecapacity池或设备中的可用磁盘空间量.
与used统计信息一样,该空间量与可供数据集使用的磁盘空间量也有少量差异.
readoperations发送到池或设备的读取I/O操作数,包括元数据请求.
writeoperations发送到池或设备的写入I/O操作数.
readbandwidth所有读取操作(包括元数据)的带宽,以每秒单位数表示.
writebandwidth所有写入操作的带宽,以每秒单位数表示.
列出池范围的I/O统计信息如果不使用任何选项,则zpooliostat命令会显示自引导以来系统中所有池的累积统计信息.
例如:#zpooliostatcapacityoperationsbandwidthpoolallocfreereadwritereadwriterpool6.
05G61.
9G00786107tank31.
3G36.
7G41296K86.
1K查询ZFS存储池的状态70在OracleSolaris11.
2中管理ZFS文件系统2014年12月由于这些统计信息是自引导以来累积的,因此,如果池相对空闲,则带宽可能显示为较低.
通过指定时间间隔,可以请求查看更准确的当前带宽使用情况.
例如:#zpooliostattank2capacityoperationsbandwidthpoolallocfreereadwritereadwritetank18.
5G49.
5G0187023.
3Mtank18.
5G49.
5G0464057.
7Mtank18.
5G49.
5G0457056.
6Mtank18.
8G49.
2G0435051.
3M在以上示例中,此命令每隔两秒显示一次池tank的使用情况统计信息,直到按Ctrl-C组合键为止.
或者,可以再指定一个count参数,该参数可使命令在重复执行指定的次数之后终止.
例如,zpooliostat23每隔两秒列显一次摘要信息,重复三次,共六秒.
如果仅有一个池,则会在连续的行上显示统计信息.
如果存在多个池,则用附加虚线分隔每次重复,以提供直观的分隔效果.
列出虚拟设备I/O统计信息除了池范围的I/O统计信息外,zpooliostat命令还可以显示虚拟设备的I/O统计信息.
此命令可用于识别异常缓慢的设备,或者观察ZFS生成的I/O的分布情况.
要请求完整的虚拟设备布局以及所有I/O统计信息,请使用zpooliostat-v命令.
例如:#zpooliostat-vcapacityoperationsbandwidthpoolallocfreereadwritereadwriterpool6.
05G61.
9G00785107mirror6.
05G61.
9G00785107c1t0d0s0--00578109c1t1d0s0--00595109tank36.
5G31.
5G41295K146Kmirror36.
5G31.
5G126458.
13M4.
01Mc1t2d0--03100K386Kc1t3d0--03104K386K查看虚拟设备的I/O统计信息时,必须注意以下两点:首先,磁盘空间使用情况统计信息仅适用于顶层虚拟设备.
在镜像和RAID-Z虚拟设备中分配磁盘空间的方法是特定于实现的,不能简单地表示为一个数字.
其次,这些数字可能不会完全按期望的那样累加.
具体来说,通过RAID-Z设备和通过镜像设备进行的操作不是完全均等的.
这种差异在创建池之后即特别明显,因为在查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池71创建池的过程中直接对磁盘执行了大量I/O,但在镜像级别并没有考虑这些I/O.
随着时间推移,这些数值会逐渐变得相等.
不过,损坏的、无响应的或脱机设备也会影响这种对称性.
检查虚拟设备统计信息时,可以使用相同的一组选项(时间间隔和计次).
还可以显示有关池的虚拟设备的物理位置信息.
例如:#zpooliostat-lvcapacityoperationsbandwidthpoolallocfreereadwritereadwriteexport2.
39T2.
14T132742.
7K300Kmirror490G438G258.
53K60.
3K/dev/chassis/lab10rack15/SCSI_Device__2/disk--104.
47K60.
3K/dev/chassis/lab10rack15/SCSI_Device__3/disk--104.
45K60.
3Kmirror490G438G258.
62K59.
9K/dev/chassis/lab10rack15/SCSI_Device__4/disk--104.
52K59.
9K/dev/chassis/lab10rack15/SCSI_Device__5/disk--104.
48K59.
9Kmirror490G438G258.
60K60.
2K/dev/chassis/lab10rack15/SCSI_Device__6/disk--104.
50K60.
2K/dev/chassis/lab10rack15/SCSI_Device__7/disk--104.
49K60.
2Kmirror490G438G258.
47K60.
1K/dev/chassis/lab10rack15/SCSI_Device__8/disk--104.
42K60.
1K/dev/chassis/lab10rack15/SCSI_Device__9/disk--104.
43K60.
1K.
.
.
确定ZFS存储池的运行状况ZFS提供了一种检查池和设备运行状况的集成方法.
池的运行状况是根据其所有设备的状态确定的.
使用zpoolstatus命令可以显示此状态信息.
此外,池和设备的潜在故障由fmd报告,显示在系统控制台上,并记录于/var/adm/messages文件中.
本节介绍如何确定池和设备的运行状况.
本章不介绍如何修复运行不良的池或从其恢复.
有关故障排除和数据恢复的更多信息,请参见第10章OracleSolarisZFS故障排除和池恢复.
池的运行状况通过以下四种状态之一来描述:DEGRADED池有一个或多个设备发生故障,但由于使用了冗余配置,数据仍然可用.
ONLINE池中的所有设备都正常运行.
查询ZFS存储池的状态72在OracleSolaris11.
2中管理ZFS文件系统2014年12月SUSPENDED池正在等待恢复设备连接.
在设备问题得到解决之前,SUSPENDED池一直处于wait状态.
UNAVAIL池的元数据遭到损坏,或者有一个或多个设备不可用,并且没有足够的副本支持其继续运行.
每个池设备都可以处于以下状态之一:DEGRADED虚拟设备出现过故障,但仍能工作.
此状态在镜像或RAID-Z设备缺少一个或多个组成设备时最为常见.
池的容错能力可能会受到损害,因为另一个设备中的后续故障可能无法恢复.
OFFLINE管理员已将设备显式脱机.
ONLINE设备或虚拟设备处于正常工作状态.
尽管仍然可能会出现一些瞬态错误,但是设备在其他方面处于正常工作状态.
REMOVED系统正在运行时已物理移除了该设备.
设备移除检测依赖于硬件,而且并非在所有平台上都受支持.
UNAVAIL无法打开设备或虚拟设备.
在某些情况下,包含UNAVAIL设备的池会以DEGRADED模式显示.
如果顶层虚拟设备的状态为UNAVAIL,则无法访问池中的任何设备.
池的运行状况是根据其所有顶层虚拟设备的运行状况确定的.
如果所有虚拟设备状态都为ONLINE,则池的状态也为ONLINE.
如果任何一个虚拟设备状态为DEGRADED或UNAVAIL,则池的状态也为DEGRADED.
如果顶层虚拟设备的状态为UNAVAIL或OFFLINE,则池的状态也为UNAVAIL或SUSPENDED.
如果池处于UNAVAIL或SUSPENDED状态,则完全无法访问该池.
附加或修复必需的设备后,才能恢复数据.
处于DEGRADED状态的池会继续运行,但是,如果池处于联机状态,则可能无法实现相同级别的数据冗余或数据吞吐量.
zpoolstatus命令还提供有关重新同步和清理操作的详细信息.
重新同步进度报告.
例如:scan:resilverinprogresssinceWedJun2014:19:3820127.
43Gscanned7.
43Gresilveredat26.
8M/s,10.
35%done,0h30mtogo清理进度报告.
例如:scan:scrubinprogresssinceWedJun2014:56:522012529Mscannedoutof71.
8Gat48.
1M/s,0h25mtogo0repaired,0.
72%done重新同步完成消息.
例如:查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池73scan:resilvered71.
8Gin0h14mwith0errorsonWedJun2014:33:422012清理完成消息.
例如:scan:scrubrepaired0in0h11mwith0errorsonWedJun2015:08:232012取消正在进行的清理消息.
例如:scan:scrubcanceledonWedJun2016:04:402012清理和重新同步完成消息在系统重新引导后仍存在基本的存储池运行状况使用zpoolstatus命令可以快速查看池运行状态,如下所示:#zpoolstatus-xallpoolsarehealthy通过在命令语法中指定池名称,可以检查特定池.
如下节所述,应检查不处于ONLINE状态的所有池是否存在潜在的问题.
详细运行状况使用-v选项可以请求更详细的运行状况汇总信息.
例如:#zpoolstatus-vpondpool:pondstate:DEGRADEDstatus:Oneormoredevicesareunavailableinresponsetopersistenterrors.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Determineifthedeviceneedstobereplaced,andcleartheerrorsusing'zpoolclear'or'fmadmrepaired',orreplacethedevicewith'zpoolreplace'.
scan:scrubrepaired0in0h0mwith0errorsonWedJun2015:38:082012config:NAMESTATEREADWRITECKSUMpondDEGRADED000mirror-0DEGRADED000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0UNAVAIL000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000devicedetails:c0t5000C500335F907Fd0UNAVAILcannotopen查询ZFS存储池的状态74在OracleSolaris11.
2中管理ZFS文件系统2014年12月status:ZFSdetectederrorsonthisdevice.
Thedevicewasmissing.
see:http://support.
oracle.
com/msg/ZFS-8000-LRforrecoveryerrors:Noknowndataerrors此输出显示了池处于其当前状态的原因的完整说明,其中包括问题的易读说明,以及指向知识文章的链接(用于了解更多信息).
每篇知识文章都提供了有关从当前问题恢复的最佳方法的最新信息.
使用详细的配置信息,您可以确定哪个设备损坏以及如何修复池.
在以上示例中,UNAVAIL设备应该被替换.
如有必要,替换该设备后,请使用zpoolonline命令使设备联机.
例如:#zpoolonlinepondc0t5000C500335F907Fd0warning:device'c0t5000C500335DC60Fd0'onlined,butremainsindegradedstate#zpoolstatus-xallpoolsarehealthy以上输出表明该设备一直处于降级状态,直到完成任何重新同步操作为止.
如果启用了autoreplace属性,则您可能不必使被替换的设备联机.
如果池包含脱机设备,则命令输出将标识有问题的池.
例如:#zpoolstatus-xpool:pondstate:DEGRADEDstatus:Oneormoredeviceshasbeentakenofflinebytheadministrator.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Onlinethedeviceusing'zpoolonline'orreplacethedevicewith'zpoolreplace'.
config:NAMESTATEREADWRITECKSUMpondDEGRADED000mirror-0DEGRADED000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0OFFLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000errors:NoknowndataerrorsREAD和WRITE列提供了在设备上出现的I/O错误的计数,而CKSUM列则提供了在设备上出现的无法更正的校验和错误的计数.
这两种错误计数指示可能的设备故障,并且需要执行更正操作.
如果针对顶层虚拟设备报告了非零错误,则表明部分数据可能无法访问.
errors:字段标识任何已知的数据错误.
查询ZFS存储池的状态第3章管理OracleSolarisZFS存储池75在以上示例输出中,脱机设备不会导致数据错误.
有关诊断和修复UNAVAIL池和数据的更多信息,请参见第10章OracleSolarisZFS故障排除和池恢复.
收集ZFS存储池状态信息可以使用zpoolstatus的时间间隔和计数选项收集一定时期内的统计信息.
此外,使用-T选项可以显示时间戳.
例如:#zpoolstatus-Td32WedJun2016:10:09MDT2012pool:pondstate:ONLINEscan:resilvered9.
50Kin0h0mwith0errorsonWedJun2016:07:342012config:NAMESTATEREADWRITECKSUMpondONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000errors:Noknowndataerrorspool:rpoolstate:ONLINEscan:scrubrepaired0in0h11mwith0errorsonWedJun2015:08:232012config:NAMESTATEREADWRITECKSUMrpoolONLINE000mirror-0ONLINE000c0t5000C500335BA8C3d0s0ONLINE000c0t5000C500335FC3E7d0s0ONLINE000errors:NoknowndataerrorsWedJun2016:10:12MDT2012pool:pondstate:ONLINEscan:resilvered9.
50Kin0h0mwith0errorsonWedJun2016:07:342012config:NAMESTATEREADWRITECKSUMpondONLINE000mirror-0ONLINE000c0t5000C500335F95E3d0ONLINE000c0t5000C500335F907Fd0ONLINE000迁移ZFS存储池76在OracleSolaris11.
2中管理ZFS文件系统2014年12月mirror-1ONLINE000c0t5000C500335BD117d0ONLINE000c0t5000C500335DC60Fd0ONLINE000errors:Noknowndataerrorspool:rpoolstate:ONLINEscan:scrubrepaired0in0h11mwith0errorsonWedJun2015:08:232012config:NAMESTATEREADWRITECKSUMrpoolONLINE000mirror-0ONLINE000c0t5000C500335BA8C3d0s0ONLINE000c0t5000C500335FC3E7d0s0ONLINE000errors:Noknowndataerrors迁移ZFS存储池有时,可能需要在系统之间移动存储池.
为此,必须将存储设备与原始系统断开,然后将其重新连接到目标系统.
可以通过以下方法完成此任务:以物理方式重新为设备布线,或者使用多端口设备(如SAN中的设备).
使用ZFS可将池从一个系统中导出,然后将其导入目标系统,即使这些系统采用不同的字节存储顺序(endianness).
有关在不同存储池(可能驻留在不同的系统中)之间复制或迁移文件系统的信息,请参见"发送和接收ZFS数据"[177].
"准备迁移ZFS存储池"[76]"导出ZFS存储池"[77]"确定要导入的可用存储池"[77]"从替换目录导入ZFS存储池"[79]"导入ZFS存储池"[79]"恢复已销毁的ZFS存储池"[83]准备迁移ZFS存储池应显式导出存储池,以表明可随时将其迁移.
此操作会将任何未写入的数据刷新到磁盘,将数据写入磁盘以表明导出已完成,并从系统中删除有关池的所有信息.
如果不显式导出池,而是改为手动删除磁盘,则仍可以在其他系统中导入生成的池.
但是,可能会丢失最后几秒的数据事务,并且由于设备不再存在,该池在原始系统中可能会显示为处于UNAVAIL状态.
缺省情况下,目标系统无法导入未显式导出的池.
为防止意外导入包含仍在其他系统中使用的网络连接存储器的活动池,此条件是必要的.
迁移ZFS存储池第3章管理OracleSolarisZFS存储池77导出ZFS存储池要导出池,请使用zpoolexport命令.
例如:#zpoolexporttank此命令将尝试取消挂载池中任何已挂载的文件系统,然后再继续执行.
如果无法取消挂载任何文件系统,则可以使用-f选项强制取消挂载这些文件系统.
例如:#zpoolexporttankcannotunmount'/export/home/eric':Devicebusy#zpoolexport-ftank执行此命令后,池tank在系统中即不再可见.
如果在导出时设备不可用,则无法将设备标识为正常导出.
如果之后将某个这样的设备附加到不包含任何工作设备的系统中,则该设备的状态会显示为可能处于活动状态.
如果池中使用ZFS卷,则即使使用-f选项也无法导出池.
要导出带有ZFS卷的池,首先确保该卷的所有使用者不再处于活动状态.
有关ZFS卷的更多信息,请参见"ZFS卷"[227].
确定要导入的可用存储池从系统中删除池后(通过显式导出或通过强制删除设备),可以将设备附加到目标系统.
ZFS可以处理仅有其中一些设备可用的情况,但池迁移成功与否取决于设备的整体运行状况.
此外,没有必要使用相同的设备名称附加设备.
ZFS可检测任何移动的或重命名的设备,并相应地调整配置.
要搜索可用的池,请运行不带任何选项的zpoolimport命令.
例如:#zpoolimportpool:tankid:11809215114195894163state:ONLINEaction:Thepoolcanbeimportedusingitsnameornumericidentifier.
config:tankONLINEmirror-0ONLINEc1t0d0ONLINEc1t1d0ONLINE在本例中,池tank可用于在目标系统上导入.
每个池都由一个名称以及唯一的数字标识符标识.
如果有多个同名池可用于导入,则可以使用数字标识符对其进行区分.
与zpoolstatus命令输出类似,zpoolimport输出也会包括一个知识文章链接,其中包含有关阻止导入池这一问题的修复过程的最新信息.
在此示例中,用户可以强制导入迁移ZFS存储池78在OracleSolaris11.
2中管理ZFS文件系统2014年12月池.
但是,如果导入当前正由其他系统通过存储网络使用的池,则可能导致数据损坏和出现紧急情况,因为这两个系统都尝试写入同一存储器.
如果池中的某些设备不可用,但是存在足够的冗余数据可确保池可用,则池会显示DEGRADED状态.
例如:#zpoolimportpool:tankid:4715259469716913940state:DEGRADEDstatus:Oneormoredevicesareunavailable.
action:Thepoolcanbeimporteddespitemissingordamageddevices.
Thefaulttoleranceofthepoolmaybecompromisedifimported.
config:tankDEGRADEDmirror-0DEGRADEDc0t5000C500335E106Bd0ONLINEc0t5000C500335FC3E7d0UNAVAILcannotopendevicedetails:c0t5000C500335FC3E7d0UNAVAILcannotopenstatus:ZFSdetectederrorsonthisdevice.
Thedevicewasmissing.
在本示例中,第一个磁盘已损坏或缺失,但仍可以导入池,这是因为仍可以访问镜像数据.
如果存在过多的不可用设备,则无法导入池.
在本示例中,RAID-Z虚拟设备中缺少两个磁盘,这意味着没有足够的可用冗余数据来重新构建池.
在某些情况下,没有足够的设备就无法确定完整的配置.
在这种情况下,虽然ZFS会尽可能多地报告有关该情况的信息,但是ZFS无法确定池中包含的其他设备.
例如:#zpoolimportpool:mothershipid:3702878663042245922state:UNAVAILstatus:Oneormoredevicesareunavailable.
action:Thepoolcannotbeimportedduetounavailabledevicesordata.
config:mothershipUNAVAILinsufficientreplicasraidz1-0UNAVAILinsufficientreplicasc8t0d0UNAVAILcannotopenc8t1d0UNAVAILcannotopenc8t2d0ONLINEc8t3d0ONLINEdevicedetails:c8t0d0UNAVAILcannotopenstatus:ZFSdetectederrorsonthisdevice.
Thedevicewasmissing.
迁移ZFS存储池第3章管理OracleSolarisZFS存储池79c8t1d0UNAVAILcannotopenstatus:ZFSdetectederrorsonthisdevice.
Thedevicewasmissing.
从替换目录导入ZFS存储池缺省情况下,zpoolimport命令仅在/dev/dsk目录中搜索设备.
如果设备存在于其他目录中,或者使用的是文件支持的池,则必须使用-d选项搜索其他目录.
例如:#zpoolcreatedozermirror/file/a/file/b#zpoolexportdozer#zpoolimport-d/filepool:dozerid:7318163511366751416state:ONLINEaction:Thepoolcanbeimportedusingitsnameornumericidentifier.
config:dozerONLINEmirror-0ONLINE/file/aONLINE/file/bONLINE#zpoolimport-d/filedozer如果设备存在于多个目录中,则可以指定多个-d选项.
导入ZFS存储池确定要导入的池后,即可通过将该池的名称或者其数字标识符指定为zpoolimport命令的参数来将其导入.
例如:#zpoolimporttank如果多个可用池具有相同名称,则必须使用数字标识符指定要导入的池.
例如:#zpoolimportpool:dozerid:2704475622193776801state:ONLINEaction:Thepoolcanbeimportedusingitsnameornumericidentifier.
config:dozerONLINEc1t9d0ONLINEpool:dozerid:6223921996155991199迁移ZFS存储池80在OracleSolaris11.
2中管理ZFS文件系统2014年12月state:ONLINEaction:Thepoolcanbeimportedusingitsnameornumericidentifier.
config:dozerONLINEc1t8d0ONLINE#zpoolimportdozercannotimport'dozer':morethanonematchingpoolimportbynumericIDinstead#zpoolimport6223921996155991199如果池名称与现有池名称冲突,则可以采用其他名称导入该池.
例如:#zpoolimportdozerzeepool此命令使用新名称zeepool导入已导出的池dozer.
新的池名称是持久性的.
注-不能直接重命名池.
只能在导出和导入池时更改池的名称.
如果池未正常导出,则ZFS需要使用-f标志,以防止用户意外导入仍在其他系统中使用的池.
例如:#zpoolimportdozercannotimport'dozer':poolmaybeinuseonanothersystemuse'-f'toimportanyway#zpoolimport-fdozer注-请勿尝试将一个系统上处于活动状态的池导入到另一个系统.
ZFS不是本机簇、分布式或平行文件系统,不能从多个不同主机进行并发访问.
通过使用-R选项还可以在备用根下导入池.
有关备用根池的更多信息,请参见"通过备用根位置使用ZFS池"[235].
导入缺少日志设备的池缺省情况下,无法导入缺少日志设备的池.
但是,可以使用zpoolimport-m命令强制导入缺少日志设备的池.
例如:#zpoolimportdozerpool:dozerid:16216589278751424645state:UNAVAILstatus:Oneormoredevicesaremissingfromthesystem.
action:Thepoolcannotbeimported.
Attachthemissingdevicesandtryagain.
see:http://support.
oracle.
com/msg/ZFS-8000-6Xconfig:迁移ZFS存储池第3章管理OracleSolarisZFS存储池81dozerUNAVAILmissingdevicemirror-0ONLINEc8t0d0ONLINEc8t1d0ONLINEdevicedetails:missing-1UNAVAILcorrupteddatastatus:ZFSdetectederrorsonthisdevice.
Thedevicehasbadlabelordiskcontents.
Additionaldevicesareknowntobepartofthispool,thoughtheirexactconfigurationcannotbedetermined.
导入缺少日志设备的池.
例如:#zpoolimport-mdozer#zpoolstatusdozerpool:dozerstate:DEGRADEDstatus:Oneormoredevicesareunavailableinresponsetopersistenterrors.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Determineifthedeviceneedstobereplaced,andcleartheerrorsusing'zpoolclear'or'fmadmrepaired',orreplacethedevicewith'zpoolreplace'.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:nonerequestedconfig:NAMESTATEREADWRITECKSUMdozerDEGRADED000mirror-0ONLINE000c8t0d0ONLINE000c8t1d0ONLINE000logs2189413556875979854UNAVAIL000errors:Noknowndataerrors在附加了缺少的日志设备后,运行zpoolclear命令清除池错误.
缺少镜像日志设备时,也可以尝试进行类似的恢复:例如:#zpoolimportdozerThedevicesbelowaremissing,use'-m'toimportthepoolanyway:mirror-1[log]c3t3d0c3t4d0cannotimport'dozer':oneormoredevicesiscurrentlyunavailable#zpoolimport-mdozer#zpoolstatusdozer迁移ZFS存储池82在OracleSolaris11.
2中管理ZFS文件系统2014年12月pool:dozerstate:DEGRADEDstatus:Oneormoredevicescouldnotbeopened.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Attachthemissingdeviceandonlineitusing'zpoolonline'.
see:https://support.
oracle.
com/epmos/faces/KmHome_adf.
ctrl-state=10oxbvnj5n_4&_afrLoop=1145647522713scan:scrubrepaired0in0h0mwith0errorsonFriOct1516:51:392010config:NAMESTATEREADWRITECKSUMdozerDEGRADED000mirror-0ONLINE000c3t1d0ONLINE000c3t2d0ONLINE000logsmirror-1UNAVAIL000insufficientreplicas13514061426445294202UNAVAIL000wasc3t3d016839344638582008929UNAVAIL000wasc3t4d0在附加了缺少的日志设备后,运行zpoolclear命令清除池错误.
在只读模式下导入池可以在只读模式下导入池.
如果池受损严重而无法访问,此功能也许能使您恢复池中的数据.
例如:#zpoolimport-oreadonly=ontank#zpoolscrubtankcannotscrubtank:poolisread-only在只读模式下导入池时,须符合以下条件:所有文件系统和卷均以只读模式挂载.
池的事务处理功能被禁用.
这也意味着,意图日志(intentlog)中任何暂停的同步写入操作只有在读写模式下导入池后才启动.
只读导入期间,将忽略对池属性的设置尝试.
通过导出再导入池的方法,可以将只读池设置回读写模式.
例如:#zpoolexporttank#zpoolimporttank#zpoolscrubtank通过特定的设备路径导入池在本示例中,以下命令通过标识池dpool的其中一个特定设备/dev/dsk/c2t3d0来导入该池.
迁移ZFS存储池第3章管理OracleSolarisZFS存储池83#zpoolimport-d/dev/dsk/c2t3d0s0dpool#zpoolstatusdpoolpool:dpoolstate:ONLINEscan:resilvered952Kin0h0mwith0errorsonFriJun2916:22:062012config:NAMESTATEREADWRITECKSUMdpoolONLINE000mirror-0ONLINE000c2t3d0ONLINE000c2t1d0ONLINE000即使该池由整个磁盘组成,该命令也必须包括特定设备的分片标识符.
恢复已销毁的ZFS存储池可以使用zpoolimport-D命令恢复已销毁的存储池.
例如:#zpooldestroytank#zpoolimport-Dpool:tankid:5154272182900538157state:ONLINE(DESTROYED)action:Thepoolcanbeimportedusingitsnameornumericidentifier.
config:tankONLINEmirror-0ONLINEc1t0d0ONLINEc1t1d0ONLINE在此zpoolimport输出中,根据以下状态信息,可以确定池tank为已销毁的池:state:ONLINE(DESTROYED)要恢复已销毁的池,请再次执行zpoolimport-D命令,并指定要恢复的池.
例如:#zpoolimport-Dtank#zpoolstatustankpool:tankstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINEmirror-0ONLINEc1t0d0ONLINEc1t1d0ONLINE迁移ZFS存储池84在OracleSolaris11.
2中管理ZFS文件系统2014年12月errors:Noknowndataerrors即使已销毁的池中的某个设备不可用,您仍可以通过加入-f选项来恢复已销毁的池.
在此情况下,请导入已降级的池,然后尝试修复设备故障.
例如:#zpooldestroydozer#zpoolimport-Dpool:dozerid:4107023015970708695state:DEGRADED(DESTROYED)status:Oneormoredevicesareunavailable.
action:Thepoolcanbeimporteddespitemissingordamageddevices.
Thefaulttoleranceofthepoolmaybecompromisedifimported.
config:dozerDEGRADEDraidz2-0DEGRADEDc8t0d0ONLINEc8t1d0ONLINEc8t2d0ONLINEc8t3d0UNAVAILcannotopenc8t4d0ONLINEdevicedetails:c8t3d0UNAVAILcannotopenstatus:ZFSdetectederrorsonthisdevice.
Thedevicewasmissing.
#zpoolimport-Dfdozer#zpoolstatus-xpool:dozerstate:DEGRADEDstatus:Oneormoredevicesareunavailableinresponsetopersistenterrors.
Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.
action:Determineifthedeviceneedstobereplaced,andcleartheerrorsusing'zpoolclear'or'fmadmrepaired',orreplacethedevicewith'zpoolreplace'.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:nonerequestedconfig:NAMESTATEREADWRITECKSUMdozerDEGRADED000raidz2-0DEGRADED000c8t0d0ONLINE000c8t1d0ONLINE000c8t2d0ONLINE0004881130428504041127UNAVAIL000c8t4d0ONLINE000errors:Noknowndataerrors#zpoolonlinedozerc8t4d0#zpoolstatus-x升级ZFS存储池第3章管理OracleSolarisZFS存储池85allpoolsarehealthy升级ZFS存储池如果您拥有来自先前Solaris发行版的ZFS存储池,则可使用zpoolupgrade命令升级这些池,以利用当前发行版中的池功能.
此外,zpoolstatus命令会在池运行旧版本时通知您.
例如:#zpoolstatuspool:tankstate:ONLINEstatus:Thepoolisformattedusinganolderon-diskformat.
Thepoolcanstillbeused,butsomefeaturesareunavailable.
action:Upgradethepoolusing'zpoolupgrade'.
Oncethisisdone,thepoolwillnolongerbeaccessibleonoldersoftwareversions.
scrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMtankONLINE000mirror-0ONLINE000c1t0d0ONLINE000c1t1d0ONLINE000errors:Noknowndataerrors可以使用以下语法来确定有关特殊版本和支持的发行版的其他信息:#zpoolupgrade-vThissystemiscurrentlyrunningZFSpoolversion33.
Thefollowingversionsaresupported:VERDESCRIPTION1InitialZFSversion2Dittoblocks(replicatedmetadata)3HotsparesanddoubleparityRAID-Z4zpoolhistory5Compressionusingthegzipalgorithm6bootfspoolproperty7Separateintentlogdevices8Delegatedadministration9refquotaandrefreservationproperties10Cachedevices11Improvedscrubperformance12Snapshotproperties13snapusedproperty14passthrough-xaclinherit15user/groupspaceaccounting16stmfpropertysupport17Triple-parityRAID-Z升级ZFS存储池86在OracleSolaris11.
2中管理ZFS文件系统2014年12月18Snapshotuserholds19Logdeviceremoval20Compressionusingzle(zero-lengthencoding)21Deduplication22Receivedproperties23SlimZIL24Systemattributes25Improvedscrubstats26Improvedsnapshotdeletionperformance27Improvedsnapshotcreationperformance28Multiplevdevreplacements29RAID-Z/mirrorhybridallocator30Encryption31Improved'zfslist'performance32OneMBblocksize33Improvedsharesupport34SharingwithinheritanceFormoreinformationonaparticularversion,includingsupportedreleases,seetheZFSAdministrationGuide.
然后,可通过运行zpoolupgrade命令来升级所有池.
例如:#zpoolupgrade-a注-如果将池升级到更高的ZFS版本,则在运行较早ZFS版本的系统中将无法访问该池.
第4章管理ZFS根池组件874第4章管理ZFS根池组件本章描述如何管理OracleSolarisZFS根池组件,如附加根池镜像、克隆ZFS引导环境以及调整交换和转储设备的大小.
本章包含以下各节:"关于管理ZFS根池组件"[87]"确定ZFS根池要求"[88]"管理ZFS根池"[89]"管理ZFS交换和转储设备"[101]"从ZFS根文件系统引导"[104]有关根池恢复的信息,请参见《在OracleSolaris11.
2中使用统一归档文件进行系统恢复和克隆》.
有关任何最新问题,请参见OracleSolaris11.
2发行说明.
关于管理ZFS根池组件从OracleSolaris11发行版起,ZFS成为缺省根文件系统.
安装OracleSolaris发行版时请查看以下注意事项:安装-您可以通过以下方式安装ZFS根文件系统并从中进行引导:LiveCD(仅限x86)-在单个磁盘上安装ZFS根池.
在安装期间可以根据您的环境使用fdisk分区菜单对磁盘分区.
文本安装(SPARC和x86)-在单个磁盘上从介质或通过网络安装ZFS根池.
在安装期间可以根据您的环境使用fdisk分区菜单对磁盘分区.
自动化安装程序(AutomatedInstaller,AI)(SPARC和x86)-自动安装ZFS根池.
可以使用AI清单确定用于ZFS根池的磁盘和磁盘分区.
交换和转储设备-上述所有安装方法会自动在ZFS根池的ZFS卷中创建交换和转储设备.
有关管理ZFS交换和转储设备的更多信息,请参见"管理ZFS交换和转储设备"[101].
镜像根池配置-您可以在自动安装期间配置镜像根池.
有关在安装后配置镜像根池的更多信息,请参见如何配置镜像根池(SPARC或x86/VTOC)[92].
关于管理ZFS根池组件88在OracleSolaris11.
2中管理ZFS文件系统2014年12月根池空间管理-安装系统后,请考虑对ZFS根文件系统设置配额,以防止根文件系统被填满.
当前,并未保留一定的ZFS根池空间作为整个文件系统的安全网.
例如,如果有68GB的磁盘空间用于根池,请考虑对ZFS根文件系统(rpool/ROOT/solaris)设置67GB的配额,从而留出1GB的剩余文件系统空间.
有关设置配额的信息,请参见"设置ZFS文件系统的配额"[153].
根池迁移或恢复-考虑使用OracleSolaris归档实用程序为灾难恢复或迁移创建根池恢复归档文件.
有关更多信息,请参阅《在OracleSolaris11.
2中使用统一归档文件进行系统恢复和克隆》和archiveadm(1M)手册页.
确定ZFS根池要求请阅读下面介绍ZFS根池空间和配置要求的各节.
ZFS根池空间要求安装系统时,交换卷和转储卷的大小取决于物理内存量.
可引导的ZFS根文件系统的最小池空间量取决于物理内存量、可用的磁盘空间以及要创建的引导环境(bootenvironment,BE)的数量.
请查看以下ZFS存储池空间要求:有关不同安装方法的内存要求的说明,请参见《《OracleSolaris11.
2发行说明》》.
建议至少使用7-13GB的磁盘空间.
空间的使用情况如下所述:交换区域和转储设备-Solaris安装程序创建的交换和转储卷的缺省大小因系统上的内存量和其他变量而异.
转储设备大小约为物理内存大小的一半或更大,具体取决于系统所进行的活动.
安装期间或安装后,可以将交换卷和转储卷的大小调整为所选择的大小,只要新的大小可支持系统运行.
有关更多信息,请参见"调整ZFS交换和转储设备的大小"[102].
引导环境(bootenvironment,BE)-ZFSBE大约为4-6GB.
从另一个ZFSBE克隆的每个ZFSBE不需要额外的磁盘空间.
请注意,当BE更新时,BE大小将增大(具体取决于更新).
同一根池中的所有ZFSBE都使用相同的交换和转储设备.
OracleSolarisOS组件-根文件系统中作为OS映像的一部分的所有子目录(除/var之外)必须都位于根文件系统中.
此外,除了交换和转储设备之外,所有其他SolarisOS组件必须驻留在根池.
ZFS根池配置要求请查看以下ZFS存储池配置要求:管理ZFS根池第4章管理ZFS根池组件89大多数情况下,在具有GPT感知固件的基于SPARC的系统或基于x86的系统上,要用作根池的磁盘可以具有EFI(GPT)标签.
或者,在不具有GPT感知固件的SPARC系统上应用SMI(VTOC)标签.
有关EFI(GPT)标签的信息,请参见"使用ZFS存储池中的磁盘"[27].
如果存在SMI(VTOC)标签磁盘,则池必须存在于某个磁盘分片上或若干被镜像的磁盘分片上.
或者,如果根池磁盘带有EFI(GPT)标签,则池可以存在于整个磁盘上或若干个镜像的整个磁盘上.
如果在beadm操作期间尝试使用不支持的池配置,将会显示类似于以下内容的消息:ERROR:ZFSpoolnamedoesnotsupportbootenvironments有关支持的ZFS根池配置的详细说明,请参见"创建ZFS根池"[35].
在基于x86的系统上,磁盘必须包含Solarisfdisk分区.
fdisk分区是安装基于x86的系统时自动创建的.
有关Solarisfdisk分区的更多信息,请参见《在OracleSolaris11.
2中管理设备》中的"使用fdisk选项".
在自动安装过程中,可以在根池上设置池属性或文件系统属性.
根池不支持gzip压缩算法.
通过初始安装创建了根池后,请勿对根池重命名.
重命名根池可能会导致系统无法引导.
请勿将精简置备的VMware设备用作根池设备.
管理ZFS根池以下各节提供了关于安装和更新ZFS根池以及配置镜像根池的信息.
安装ZFS根池查看以下安装方法确定如何安装ZFS根池:LiveCD安装方法在一个磁盘上安装缺省ZFS根池.
AI安装程序提供了一定的灵活性:可以在缺省引导磁盘上安装ZFS根池,也可以在标识的目标磁盘上安装ZFS根池.
您可以指定逻辑设备(如c1t0d0)或物理设备路径.
此外,可以使用MPxIO标识符或设备ID来表示要用于安装的设备.
使用自动化安装(automatedinstallation,AI)方法时,可以创建AI清单来标识用于ZFS根池的磁盘或镜像磁盘.
例如,此缺省清单代码段中的以下关键字在两个磁盘上安装镜像根池:管理ZFS根池90在OracleSolaris11.
2中管理ZFS文件系统2014年12月在上述语法中,在根池上启用了listsnaps池属性.
安装后,可查看ZFS存储池和文件系统信息,具体内容会因安装类型和定制选项而有所不同.
例如:#zpoolstatusrpoolpool:rpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMrpoolONLINE000mirror-0ONLINE000c8t0d0ONLINE000c8t1d0ONLINE000#zfslistNAMEUSEDAVAILREFERMOUNTPOINTrpool11.
8G55.
1G4.
58M/rpoolrpool/ROOT3.
57G55.
1G31Klegacyrpool/ROOT/solaris3.
57G55.
1G3.
40G/rpool/ROOT/solaris/var165M55.
1G163M/varrpool/VARSHARE42.
5K55.
1G42.
5K/var/sharerpool/dump6.
19G55.
3G6.
00G-rpool/export63K55.
1G32K/exportrpool/export/home31K55.
1G31K/export/homerpool/swap2.
06G55.
2G2.
00G-查看ZFSBE信息.
例如:如何更新ZFS引导环境第4章管理ZFS根池组件91#beadmlistBEActiveMountpointSpacePolicyCreatedsolarisNR/3.
75Gstatic2012-07-2012:10在上面的输出中,Active字段指示BE当前是否处于活动状态.
N表示当前处于活动状态;R表示重新引导时处于活动状态;NR表示在当前以及重新引导时均处于活动状态.
如何更新ZFS引导环境缺省ZFS引导环境(bootenvironment,BE)的缺省名称为solaris.
可以使用beadmlist命令来标识BE.
例如:#beadmlistBEActiveMountpointSpacePolicyCreatedsolarisNR/3.
82Gstatic2012-07-1913:44在上面的输出中,NR表示BE当前处于活动状态,且在重新引导时也将是活动BE.
可以使用pkgupdate命令来更新ZFS引导环境.
如果使用pkgupdate命令更新ZFSBE,将自动创建并激活一个新BE(除非对现有BE所作的更新极少).
1.
更新ZFSBE.
#pkgupdateDOWNLOADPKGSFILESXFER(MB)Completed707/70710529/10529194.
9/194.
9.
.
.
将自动创建并激活一个新BEsolaris-1.
还可以在更新流程之外创建并激活备份BE.
#beadmcreatesolaris-1#beadmactivatesolaris-12.
重新引导系统来完成BE激活.
然后确认BE状态.
#init6.
.
.
#beadmlistBEActiveMountpointSpacePolicyCreated如何挂载备用BE92在OracleSolaris11.
2中管理ZFS文件系统2014年12月solaris--46.
95Mstatic2012-07-2010:25solaris-1NR/3.
82Gstatic2012-07-1914:453.
如果在引导新的BE时出现错误,请激活并引导回以前的BE.
#beadmactivatesolaris#init6如何挂载备用BE为实现恢复,可能需要从其他BE复制或访问文件.
1.
成为管理员.
2.
挂载备用BE.
#beadmmountsolaris-1/mnt3.
访问该BE.
#ls/mntbinexportmediapkgrpooltmpboothomemineplatformsbinusrdevimportmntprocscdevardevicesjavanetprojectshareddoekernelnfs4resrcetcliboptrootsystem4.
在使用完备用BE后将其卸载.
#beadmumountsolaris-1如何配置镜像根池(SPARC或x86/VTOC)如果在自动安装期间未配置镜像根池,在安装之后也可以轻松地配置镜像根池.
有关替换根池中磁盘的信息,请参见如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)[95].
1.
显示当前根池的状态.
#zpoolstatusrpoolpool:rpoolstate:ONLINEscrub:nonerequestedconfig:如何配置镜像根池(SPARC或x86/VTOC)第4章管理ZFS根池组件93NAMESTATEREADWRITECKSUMrpoolONLINE000c2t0d0s0ONLINE000errors:Noknowndataerrors2.
如有必要,准备另一个要附加到根池的磁盘.
SPARC:确认该磁盘具有SMI(VTOC)磁盘标签和分片0.
如果您需要重新设置磁盘标签,并创建分片0,请参见《在OracleSolaris11.
2中管理设备》中的"如何替换ZFS根池(VTOC)".
x86:确认该磁盘具有fdisk分区、SMI磁盘标签和分片0.
如果您需要对磁盘重新分区,并创建分片0,请参见《在OracleSolaris11.
2中管理设备》中的"修改分片或分区".
3.
附加另一个磁盘,以配置镜像根池.
#zpoolattachrpoolc2t0d0s0c2t1d0s0Makesuretowaituntilresilverisdonebeforerebooting.
正确的磁盘标签和引导块将被自动应用.
4.
查看根池状态,确认重新同步已完成.
#zpoolstatusrpool#zpoolstatusrpoolpool:rpoolstate:DEGRADEDstatus:Oneormoredevicesiscurrentlybeingresilvered.
Thepoolwillcontinuetofunctioninadegradedstate.
action:Waitfortheresilvertocomplete.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:resilverinprogresssinceFriJul2013:39:532012938Mscanned938Mresilveredat46.
9M/s,7.
86%done,0h3mtogoconfig:NAMESTATEREADWRITECKSUMrpoolDEGRADED000mirror-0DEGRADED000c2t0d0s0ONLINE000c2t1d0s0DEGRADED000(resilvering)在上面的输出中,重新同步过程未完成.
当您看到类似如下的消息时,说明重新同步已完成.
resilvered11.
6Gin0h5mwith0errorsonFriJul2013:57:2520125.
如果要附加较大的磁盘,请设置池的autoexpand属性,以扩展池的大小.
确定当前的rpool池大小:#zpoollistrpool如何配置镜像根池(x86/EFI(GPT))94在OracleSolaris11.
2中管理ZFS文件系统2014年12月NAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool29.
8G152K29.
7G0%1.
00xONLINE-#zpoolsetautoexpand=onrpool查看扩展后的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool279G146K279G0%1.
00xONLINE-6.
验证您是否可以从新磁盘成功引导.
如何配置镜像根池(x86/EFI(GPT))在大多数情况下,在基于x86的系统上OracleSolaris11.
1发行版缺省安装EFI(GPT)标签.
如果在自动安装期间未配置镜像根池,在安装之后也可以轻松地配置镜像根池.
有关替换根池中磁盘的信息,请参见如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)[95].
1.
显示当前根池的状态.
#zpoolstatusrpoolpool:rpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMrpoolONLINE000c2t0d0ONLINE000errors:Noknowndataerrors2.
附加另一个磁盘,以配置镜像根池.
#zpoolattachrpoolc2t0d0c2t1d0Makesuretowaituntilresilverisdonebeforerebooting.
正确的磁盘标签和引导块将被自动应用.
如果在根池磁盘上有定制的分区,则可能需要使用类似于以下的语法:#zpoolattachrpoolc2t0d0s0c2t1d03.
查看根池状态,确认重新同步已完成.
#zpoolstatusrpool如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)第4章管理ZFS根池组件95pool:rpoolstate:DEGRADEDstatus:Oneormoredevicesiscurrentlybeingresilvered.
Thepoolwillcontinuetofunctioninadegradedstate.
action:Waitfortheresilvertocomplete.
Run'zpoolstatus-v'toseedevicespecificdetails.
scan:resilverinprogresssinceFriJul2013:52:052012809Mscanned776Mresilveredat44.
9M/s,6.
82%done,0h4mtogoconfig:NAMESTATEREADWRITECKSUMrpoolDEGRADED000mirror-0DEGRADED000c8t0d0ONLINE000c8t1d0DEGRADED000(resilvering)errors:Noknowndataerrors在上面的输出中,重新同步过程未完成.
当您看到类似如下的消息时,说明重新同步已完成.
resilvered11.
6Gin0h5mwith0errorsonFriJul2013:57:2520124.
如果要附加较大的磁盘,请设置池的autoexpand属性,以扩展池的大小.
确定当前的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool29.
8G152K29.
7G0%1.
00xONLINE-#zpoolsetautoexpand=onrpool查看扩展后的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool279G146K279G0%1.
00xONLINE-5.
验证您是否可以从新磁盘成功引导.
如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)由于以下原因,您可能需要替换根池中的磁盘:根池太小,您想使用较大的磁盘替换它根池磁盘发生故障.
在非冗余池中,如果磁盘发生故障导致系统无法引导,则需要在替换根池磁盘前从备用介质(如CD或网络)进行引导.
如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)96在OracleSolaris11.
2中管理ZFS文件系统2014年12月如果使用zpoolreplace命令替换根池磁盘中的磁盘,需要手动应用引导块.
在镜像根池配置下,可以尝试替换磁盘,而不一定要从备用介质引导.
可以使用zpoolreplace命令替换故障磁盘,如果有额外的磁盘,则可使用zpoolattach命令.
有关附加额外磁盘和分离根池磁盘的示例,请参见以下步骤.
具有SATA磁盘的系统要求您在尝试通过zpoolreplace操作替换故障磁盘之前使磁盘脱机并取消其配置.
例如:#zpoolofflinerpoolc1t0d0s0#cfgadm-cunconfigurec1::dsk/c1t0d0#cfgadm-cconfigurec1::dsk/c1t0d0#zpoolreplacerpoolc1t0d0s0#zpoolonlinerpoolc1t0d0s0#zpoolstatusrpool#bootadminstall-bootloader对于一些硬件,插入替换磁盘后不必使其联机并进行配置.
1.
物理连接替换磁盘.
2.
如有必要,准备另一个要附加到根池的磁盘.
SPARC:确认替换(新)磁盘具有SMI(VTOC)标签和分片0.
有关为用作根池的磁盘重新设置标签的信息,请参见《在OracleSolaris11.
2中管理设备》中的"如何为磁盘设置标签".
x86:确认该磁盘具有fdisk分区、SMI磁盘标签和分片0.
如果您需要对磁盘重新分区,并创建分片0,请参见《在OracleSolaris11.
2中管理设备》中的"配置磁盘"中有关标签和分区的部分.
3.
将新磁盘连接到根池.
例如:#zpoolattachrpoolc2t0d0s0c2t1d0s0Makesuretowaituntilresilverisdonebeforerebooting.
正确的磁盘标签和引导块将被自动应用.
4.
确认根池状态.
例如:#zpoolstatusrpoolpool:rpoolstate:ONLINEscan:resilvered11.
7Gin0h5mwith0errorsonFriJul2013:45:372012如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)第4章管理ZFS根池组件97config:NAMESTATEREADWRITECKSUMrpoolONLINE000mirror-0ONLINE000c2t0d0s0ONLINE000c2t1d0s0ONLINE000errors:Noknowndataerrors5.
重新同步完成后,验证是否可以从新磁盘引导.
例如,在基于SPARC的系统上:okboot/pci@1f,700000/scsi@2/disk@1,0标识当前磁盘和新磁盘的引导设备路径名,以便于您从替换磁盘测试引导,而且如有必要在替换磁盘发生故障时也可手动从现有磁盘引导.
在以下示例中,当前的根池磁盘(c2t0d0s0)为:/pci@1f,700000/scsi@2/disk@0,0在以下示例中,替换引导磁盘为(c2t1d0s0):boot/pci@1f,700000/scsi@2/disk@1,06.
如果系统从新磁盘引导,则分离旧磁盘.
例如:#zpooldetachrpoolc2t0d0s07.
如果要使用较大的磁盘替换较小的根池磁盘,请设置池的autoexpand属性,以扩展池的大小.
确定当前的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool29.
8G152K29.
7G0%1.
00xONLINE-#zpoolsetautoexpand=onrpool查看扩展后的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool279G146K279G0%1.
00xONLINE-8.
将系统设置为自动从新磁盘引导.
SPARC:通过从引导PROM使用eeprom命令或setenv命令,将系统设置为自动从新磁盘引导.
x86:重新配置系统BIOS.
如何替换ZFS根池中的磁盘(SPARC或x86/EFI(GPT))98在OracleSolaris11.
2中管理ZFS文件系统2014年12月如何替换ZFS根池中的磁盘(SPARC或x86/EFI(GPT))由于以下原因,您可能需要替换根池中的磁盘:根池太小,您想使用较大的磁盘替换它根池磁盘发生故障.
在非冗余池中,如果磁盘发生故障导致系统无法引导,则需要在替换根池磁盘前从备用介质(如CD或网络)进行引导.
如果使用zpoolreplace命令替换根池磁盘中的磁盘,需要手动应用引导块.
在镜像根池配置下,可以尝试替换磁盘,而不一定要从备用介质引导.
可以使用zpoolreplace命令替换故障磁盘,如果有额外的磁盘,则可使用zpoolattach命令.
有关附加额外磁盘和分离根池磁盘的示例,请参见以下步骤.
具有SATA磁盘的系统要求您在尝试通过zpoolreplace操作替换故障磁盘之前使磁盘脱机并取消其配置.
例如:#zpoolofflinerpoolc1t0d0#cfgadm-cunconfigurec1::dsk/c1t0d0#cfgadm-cconfigurec1::dsk/c1t0d0#zpoolonlinerpoolc1t0d0#zpoolreplacerpoolc1t0d0#zpoolstatusrpoolx86#bootadminstall-bootloader对于一些硬件,插入替换磁盘后不必使其联机并进行配置.
1.
物理连接替换磁盘.
2.
将新磁盘连接到根池.
例如:#zpoolattachrpoolc2t0d0c2t1d0Makesuretowaituntilresilverisdonebeforerebooting.
正确的磁盘标签和引导块将被自动应用.
3.
确认根池状态.
例如:#zpoolstatusrpoolpool:rpoolstate:ONLINEscan:resilvered11.
6Gin0h5mwith0errorsonFriJul2012:06:072012config:如何在另一个根池中创建BE(SPARC或x86/EFI(GPT))第4章管理ZFS根池组件99NAMESTATEREADWRITECKSUMrpoolONLINE000mirror-0ONLINE000c2t0d0ONLINE000c2t1d0ONLINE000errors:Noknowndataerrors4.
重新同步完成后,验证是否可以从新磁盘引导.
5.
如果系统从新磁盘引导,则分离旧磁盘.
例如:#zpooldetachrpoolc2t0d06.
如果要使用较大的磁盘替换较小的根池磁盘,请设置池的autoexpand属性,以扩展池的大小.
确定当前的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool29.
8G152K29.
7G0%1.
00xONLINE-#zpoolsetautoexpand=onrpool查看扩展后的rpool池大小:#zpoollistrpoolNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool279G146K279G0%1.
00xONLINE-7.
将系统设置为自动从新磁盘引导.
重新配置系统BIOS.
如何在另一个根池中创建BE(SPARC或x86/EFI(GPT))如果要在另一个根池中重新创建现有的BE,请按照下面的步骤操作.
您可以修改这些步骤,具体取决于您是希望获得具有独立的交换和转储设备的两个类似BE,还是仅希望在另一个根池中获得共享交换和转储设备的一个BE.
从第二个根池中的新BE激活和引导后,关于第一个根池中以前BE的信息将不再存在.
如果要引导回原始BE,将需要从原始根池的引导磁盘手动引导系统.
1.
创建备用根池.
如何在另一个根池中创建BE(SPARC或x86/EFI(GPT))100在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zpoolcreate-Brpool2c2t2d0或者,创建一个镜像备用根池.
例如:#zpoolcreate-Brpool2mirrorc2t2d0c2t3d02.
在第二个根池中创建新BE.
例如:#beadmcreate-prpool2solaris23.
将引导信息应用于第二个根池.
例如:#bootadminstall-bootloader-Prpool24.
设置第二个根池的bootfs属性.
例如:#zpoolsetbootfs=rpool2/ROOT/solaris2rpool25.
激活新BE.
例如:#beadmactivatesolaris26.
从新的BE引导.
SPARC-通过从引导PROM使用eeprom命令或setenv命令,将系统设置为自动从新磁盘引导.
x86-重新配置系统BIOS.
系统应该在新BE之下运行.
7.
重新创建交换卷.
例如:#zfscreate-V4grpool2/swap8.
为新交换设备更新/etc/vfstab项.
例如:/dev/zvol/dsk/rpool2/swap--swap-no-9.
重新创建转储卷.
例如:#zfscreate-V4grpool2/dump10.
重置转储设备.
例如:#dumpadm-d/dev/zvol/dsk/rpool2/dump11.
重新引导以清除原始根池的交换和转储设备.
#init6管理ZFS交换和转储设备第4章管理ZFS根池组件101管理ZFS交换和转储设备在安装过程中,将在ZFS根池的ZFS卷中创建交换区域.
例如:#swap-lswapfiledevswaploblocksfree/dev/zvol/dsk/rpool/swap145,2161664612816646128在安装过程中,将在ZFS根池的ZFS卷中创建转储设备.
一般而言,转储设备不需要管理,因为它是在安装时自动设置的.
例如:#dumpadmDumpcontent:kernelpagesDumpdevice:/dev/zvol/dsk/rpool/dump(dedicated)Savecoredirectory:/var/crash/Savecoreenabled:yesSavecompressed:on如果禁用并移除转储设备,则在重新创建转储设备之后,需要使用dumpadm命令予以启用.
大多数情况下,只需要使用zfs命令调整转储设备的大小.
有关安装程序创建的交换卷和转储卷大小的信息,请参见"确定ZFS根池要求"[88].
在安装后,可以对交换卷的大小和转储卷的大小进行调整.
有关更多信息,请参见"调整ZFS交换和转储设备的大小"[102].
使用ZFS交换和转储设备时,请考虑以下问题:如果要在非根池中创建交换和转储设备,请勿在RAID-Z池中创建交换卷和转储卷.
包含交换卷和转储卷的池必须是只有一个磁盘的池或镜像池.
否则,您将看到类似以下内容的消息:/dev/zvol/dsk/rzpool/swap:Operationnotsupported在非根池中创建交换卷或转储卷.
运行dumpadm-d命令重置转储设备.
#zfscreate-V10gbpool/dump2#dumpadm-d/dev/zvol/dsk/bpool/dump2Dumpcontent:kernelwithZFSmetadataDumpdevice:/dev/zvol/dsk/bpool/dump2(dedicated)Savecoredirectory:/var/crashSavecoreenabled:yesSavecompressed:on必须将单独的ZFS卷用于交换区域和转储设备.
稀疏卷不支持用作交换卷.
当前,不支持在ZFS文件系统上使用交换文件.
如果在安装系统后需要更改交换区域或转储设备,请像在以前的Solaris发行版中那样使用swap和dumpadm命令.
有关更多信息,请参见《在OracleSolaris11.
2中管理文件系统》中的第3章"配置附加交换空间"和《在OracleSolaris11.
2中排除系统管理问题》.
管理ZFS交换和转储设备102在OracleSolaris11.
2中管理ZFS文件系统2014年12月调整ZFS交换和转储设备的大小安装后,可能需要调整交换设备和转储设备的大小,或者可能需要重新创建交换卷和转储卷.
您可以在安装系统后重置转储设备的volsize属性.
例如:#zfssetvolsize=2Grpool/dump#zfsgetvolsizerpool/dumpNAMEPROPERTYVALUESOURCErpool/dumpvolsize2G-您可以调整交换卷的大小,以便系统立即使用新大小.
例如:#swap-lswapfiledevswaploblocksfree/dev/zvol/dsk/rpool/swap303,1820971442097144#zfsgetvolsizerpool/swapNAMEPROPERTYVALUESOURCErpool/swapvolsize1Glocal#zfssetvolsize=2grpool/swap#swap-lswapfiledevswaploblocksfree/dev/zvol/dsk/rpool/swap303,1820971442097144/dev/zvol/dsk/rpool/swap303,1209716020971442097144另外,您可以使用以下方法调整交换卷的大小.
但是如果使用此方法,必须重新引导系统才能看到增大的交换大小.
#swap-d/dev/zvol/dsk/rpool/swap#zfssetvolsize=2Grpool/swap#swap-a/dev/zvol/dsk/rpool/swap#init6注-缺省情况下,为交换大小指定n个块时,将自动跳过交换文件的第一页.
因此,分配的实际大小为n-1个块.
要通过不同方式配置交换文件大小,请使用带有swaplow选项的swap命令.
有关swap命令选项的更多信息,请参见swap(1M)手册页.
有关在活动系统上移除交换设备的信息,请参见《在OracleSolaris11.
2中管理文件系统》中的"如何在OracleSolarisZFS根环境中添加交换空间".
如果在已安装的系统上需要更多的交换空间,且交换设备正忙,只需添加另一个交换卷即可.
例如:#zfscreate-V2Grpool/swap2激活新的交换卷.
例如:管理ZFS交换和转储设备第4章管理ZFS根池组件103#swap-a/dev/zvol/dsk/rpool/swap2#swap-lswapfiledevswaploblocksfree/dev/zvol/dsk/rpool/swap256,11610588001058800/dev/zvol/dsk/rpool/swap2256,31641942884194288针对第二个交换卷在/etc/vfstab文件中添加一项.
例如:/dev/zvol/dsk/rpool/swap2--swap-no-ZFS转储设备故障排除有关捕捉系统故障转储或者调整转储设备大小的问题,请查看以下各项:如果没有自动创建故障转储,您可以使用savecore命令保存故障转储.
初始安装ZFS根文件系统或者迁移到ZFS根文件系统时,会自动创建转储设备.
大多数情况下,如果缺省转储设备太小,只需要调整转储设备的大小.
例如,在一个大存储器系统中,转储设备大小增大到40GB,如下所示:#zfssetvolsize=40Grpool/dump调整大转储设备的大小可能是一个耗时的过程.
由于某种原因,如果您需要在手动创建转储设备后启用转储设备,请使用类似以下的语法:#dumpadm-d/dev/zvol/dsk/rpool/dumpDumpcontent:kernelpagesDumpdevice:/dev/zvol/dsk/rpool/dump(dedicated)Savecoredirectory:/var/crash/Savecoreenabled:yesSavecompressed:on存储器为128GB或更大的系统所需的转储设备大小大于缺省创建的转储设备大小.
如果转储设备太小,无法捕捉现有故障转储,将会显示类似以下内容的消息:#dumpadm-d/dev/zvol/dsk/rpool/dumpdumpadm:dumpdevice/dev/zvol/dsk/rpool/dumpistoosmalltoholdasystemdumpdumpsize36255432704bytes,devicesize34359738368bytes有关设置交换和转储设备大小的信息,请参见《在OracleSolaris11.
2中管理文件系统》中的"规划交换空间".
目前无法将一个转储设备添加到具有多个顶层设备的池中.
将显示类似于以下内容的消息:#dumpadm-d/dev/zvol/dsk/datapool/dumpdumpisnotsupportedondevice'/dev/zvol/dsk/datapool/dump':从ZFS根文件系统引导104在OracleSolaris11.
2中管理ZFS文件系统2014年12月'datapool'hasmultipletoplevelvdevs请将转储设备添加到不具有多个顶层设备的根池中.
从ZFS根文件系统引导基于SPARC和基于x86的系统都通过引导归档文件进行引导,引导归档文件是一个文件系统映像,该映像中包含进行引导时所需的文件.
从ZFS根文件系统引导时,将会在选择用来进行引导的根文件系统中解析根归档文件和内核文件的路径名.
从ZFS文件系统引导不同于从UFS文件系统引导,原因是,对于ZFS,设备说明符标识存储池,而不是单个根文件系统.
存储池可能包含多个可引导的ZFS根文件系统.
从ZFS引导时,必须指定引导设备和由该引导设备标识的池中的根文件系统.
缺省情况下,选择用来进行引导的文件系统是由池的bootfs属性标识的文件系统.
可以覆盖此缺省选项,方法如下:在SPARC系统上,在boot-Z命令中指定要包含的备用可引导文件系统;在基于x86的系统上,从BIOS中选择备用引导设备.
从镜像ZFS根池中的备用磁盘引导从镜像ZFS根池磁盘引导时,请注意以下事项:在安装后,可以附加磁盘来创建镜像ZFS根池.
有关创建镜像根池的更多信息,请参见如何配置镜像根池(SPARC或x86/VTOC)[92].
保持根池磁盘联机并处于连接状态,以便必要时可以从其中的任何磁盘引导.
您不能直接从已使用zpooldetach命令从系统分离的磁盘引导.
您也无法从当前脱机的活动根池磁盘引导.
但是,在使用现代BIOS的基于x86的系统上,如果正确设置了引导顺序且镜像了根池,即使主引导磁盘处于脱机或分离状态,系统也可以自动从辅助磁盘引导.
SPARC:镜像根池中的主磁盘通常是缺省引导设备.
您可以从镜像ZFS根池中的其他设备引导,但是您需要明确从该磁盘引导.
如果要继续从余下的根池设备引导,或者要从余下的根池磁盘自动引导,您需要更新PROM以指定该缺省引导设备.
例如,您可以从该池中的任一磁盘(c1t0d0s0或c1t1d0s0)引导.
#zpoolstatuspool:rpoolstate:ONLINEscrub:nonerequestedconfig:NAMESTATEREADWRITECKSUMrpoolONLINE000从ZFS根文件系统引导第4章管理ZFS根池组件105mirror-0ONLINE000c1t0d0s0ONLINE000c1t1d0s0ONLINE000在ok提示符下输入备用磁盘.
okboot/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@1重新引导系统后,确认活动引导设备.
例如:SPARC#prtconf-vp|grepbootpathbootpath:'/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@1,0:a'x86:在使用现代BIOS的基于x86的系统上,如果正确设置了引导磁盘顺序,即使主根池磁盘处于分离、脱机状态或因其他原因不可用,系统也可以自动从辅助设备引导.
确认活动引导设备.
例如:x86#prtconf-v|sed-n'/bootpath/,/value/p'name='bootpath'type=stringitems=1value='/pci@0,0/pci8086,25f8@4/pci108e,286@0/disk@0,0:a'SPARC或x86:如果您使用zpoolreplace命令替换根池磁盘,必须使用bootadm命令在新替换的磁盘上安装引导信息.
如果您使用初始安装方法创建镜像ZFS根池,或者使用zpoolattach命令向根池附加磁盘,则此步骤不是必需的.
bootadm语法如下所示:#bootadminstall-bootloader如果要在备用根池上安装引导装载程序,请使用-P(池)选项.
#bootadminstall-bootloader-Prpool2如果要安装GRUB传统引导装载程序,请使用传统installgrub命令.
x86#installgrub/boot/grub/stage1/boot/grub/stage2/dev/rdsk/c0t1d0s0在基于SPARC的系统上从ZFS根文件系统引导在具有多个ZFSBE的基于SPARC的系统上,可以通过使用beadmactivate命令从任何BE引导.
在安装和beadm激活过程中,将会通过bootfs属性自动指定ZFS根文件系统.
一个池中可能存在多个可引导的文件系统.
缺省情况下,/pool-name/boot/menu.
lst文件中的可引导文件系统项由池的bootfs属性来标识.
但是,menu.
lst项可以包含bootfs命令,该命令可指定池中的一个备用文件系统.
这样,menu.
lst文件就可以包含池中多个根文件系统的项.
从ZFS根文件系统引导106在OracleSolaris11.
2中管理ZFS文件系统2014年12月系统安装了ZFS根文件系统时,将在menu.
lst文件中添加类似以下内容的项:titleOracleSolaris11.
2SPARCbootfsrpool/ROOT/solaris创建新BE时,将会自动更新menu.
lst文件.
titleOracleSolaris11.
2SPARCbootfsrpool/ROOT/solaristitlesolarisbootfsrpool/ROOT/solaris2在基于SPARC的系统上,可以选择要通过其进行引导的BE,如下所示:激活某个ZFSBE后,您可以使用boot-L命令显示ZFS池中的可引导文件系统的列表.
然后,您可以在列表中选择某个可引导文件系统.
此时将会显示有关引导该文件系统的详细说明.
您可以按照这些说明来引导选定的文件系统.
使用boot-Zfilesystem命令引导特定的ZFS文件系统.
这种引导方法不会自动激活BE.
当使用boot-L和-Z语法引导BE之后,必须激活此BE以自动通过其继续进行引导.
例4-1从特定的ZFS引导环境引导如果系统的引导设备上的ZFS存储池中有多个ZFSBE,您可以使用beadmactivate命令指定缺省BE.
例如,有以下ZFSBE可用,如beadm输出所示:#beadmlistBEActiveMountpointSpacePolicyCreatedsolarisNR/3.
80Gstatic2012-07-2010:25solaris-2--7.
68Mstatic2012-07-1913:44如果基于SPARC的系统上有多个ZFSBE,您可以使用boot-L命令.
例如:okboot-LBootdevice:/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0,0:aFileandargs:-L1OracleSolaris11.
2SPARC2solarisSelectenvironmenttoboot:[1-2]:1Toboottheselectedentry,invoke:boot[]-Zrpool/ROOT/solaris-2Programterminatedokboot-Zrpool/ROOT/solaris-2请记住,使用上述命令引导的BE不会被激活供下次重新引导时使用.
如果要继续从在boot-Z操作期间选择的BE自动引导,则将需要激活它.
从ZFS根文件系统引导第4章管理ZFS根池组件107在基于x86的系统上从ZFS根文件系统引导在OracleSolaris11中,对于安装了传统GRUB的x86系统,在安装过程或beadmactivate操作过程中,将在/pool-name/boot/grub/menu.
lst文件中添加以下条目以自动引导ZFS:titlesolarisbootfsrpool/ROOT/solariskernel$/platform/i86pc/kernel/amd64/unix-B$ZFS-BOOTFSmodule$/platform/i86pc/amd64/boot_archivetitlesolaris-1bootfsrpool/ROOT/solaris-1kernel$/platform/i86pc/kernel/amd64/unix-B$ZFS-BOOTFSmodule$/platform/i86pc/amd64/boot_archive如果由GRUB标识为引导设备的设备包含ZFS存储池,则menu.
lst文件用于创建GRUB菜单.
在具有多个ZFSBE的基于x86的系统上,您可以从GRUB菜单中选择BE.
如果与该菜单项对应的根文件系统是一个ZFS文件系统,则会添加以下选项.
-B$ZFS-BOOTFS从OracleSolaris11.
1开始,基于x86的系统将安装GRUB2.
menu.
lst文件会替换为/rpool/boot/grub/grub.
cfg文件,但不应手动编辑该文件.
使用bootadm子命令可添加、更改和删除菜单项.
有关修改GRUB菜单项的更多信息,请参见《引导和关闭OracleSolaris11.
2系统》.
例4-2x86:引导ZFS文件系统当从GRUB2系统上的ZFS根文件系统进行引导时,按如下所示指定根设备:#bootadmlist-menuthelocationofthebootloaderconfigurationfilesis:/rpool/boot/grubdefault0consoletexttimeout300OracleSolaris11.
2当从传统GRUB系统上的ZFS根文件系统进行引导时,根设备由-B$ZFS-BOOTFS引导参数指定.
例如:titlesolarisbootfsrpool/ROOT/solariskernel$/platform/i86pc/kernel/amd64/unix-B$ZFS-BOOTFSmodule$/platform/i86pc/amd64/boot_archivetitlesolaris-1bootfsrpool/ROOT/solaris-1如何为进行恢复而引导系统108在OracleSolaris11.
2中管理ZFS文件系统2014年12月kernel$/platform/i86pc/kernel/amd64/unix-B$ZFS-BOOTFSmodule$/platform/i86pc/amd64/boot_archive例4-3x86:快速重新引导ZFS根文件系统在基于x86的系统上使用快速重新引导功能,可以在几秒内重新引导.
通过快速重新引导功能,您可以重新引导至新的内核,而不会出现BIOS和引导装载程序可能引起的长时间延迟.
快速重新引导系统的功能可显著减少停机时间并极大地提高效率.
使用beadmactivate命令在BE之间转换时,仍然必须使用init6命令.
对于适用reboot命令的其他系统操作,可以使用reboot-f命令.
例如:#reboot-f在ZFS根环境中进行引导以恢复系统如果您需要引导系统,以解决根口令丢失或类似问题,请使用以下过程.
如何为进行恢复而引导系统使用以下过程解决引导装载程序损坏问题或root口令问题.
如果需要替换根池中的磁盘,请参见如何替换ZFS根池中的磁盘(SPARC或x86/VTOC)[95].
如果需要执行完整系统(裸机)恢复,请参见《在OracleSolaris11.
2中使用统一归档文件进行系统恢复和克隆》.
1.
选择适当的引导方法:x86:LiveMedia-从安装介质进行引导并在恢复过程中使用GNOME终端.
SPARC:文本安装-从安装介质或者从网络进行引导,然后从文本安装屏幕中选择3Shell选项.
x86:文本安装-在GRUB菜单中,选择TextInstallerandcommandline(文本安装程序和命令行)引导项,然后从文本安装屏幕中选择3Shell选项.
SPARC:自动化安装-使用以下命令从允许退出到shell的安装菜单直接引导.
okbootnet:dhcpx86:自动化安装-从网络上的安装服务器进行引导需要PXE引导.
选择GRUB菜单上的TextInstallerandcommandline(文本安装程序和命令行)项.
然后,从文本安装屏幕中选择3Shell选项.
例如,引导系统后,选择3Shell选项.
1InstallOracleSolaris2InstallAdditionalDrivers3Shell如何为进行恢复而引导系统第4章管理ZFS根池组件1094Terminaltype(currentlyxterm)5RebootPleaseenteranumber[1]:3Toreturntothemainmenu,exittheshell#2.
选择引导恢复问题:要解决rootshell错误问题,请将系统引导到单用户模式并更正/etc/passwd文件中的shell项.
在x86系统上,编辑选定的引导项,然后添加-s选项.
例如,在SPARC系统上,关闭系统并引导至单用户模式.
作为root用户登录后,编辑/etc/passwd文件,然后修复rootshell项.
#init0okboot-sBootdevice:/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0,0:a.
.
.
SunOSRelease5.
11Version11.
264-bitCopyright(c)1983,2013,Oracleand/oritsaffiliates.
Allrightsreserved.
Bootingtomilestone"milestone/single-user:default".
Hostname:tardis.
centralRequestingSystemMaintenanceModeSINGLEUSERMODEEnterusernameforsystemmaintenance(control-dtobypass):rootEnterrootpassword(control-dtobypass):xxxxsingle-userprivilegeassignedtorooton/dev/console.
EnteringSystemMaintenanceModeAug315:46:21su:'suroot'succeededforrooton/dev/consoleOracleCorporationSunOS5.
1111.
2July2013su:Noshell/usr/bin/mybash.
Tryingfallbackshell/sbin/sh.
root@tardis.
central:~#TERM=vt100;exportTERMroot@tardis.
central:~#vi/etc/passwdroot@tardis.
central:~#logoutsvc.
startd:Returningtomilestoneall.
解决引导装载程序损坏问题.
首先,您必须使用步骤1中列出的引导方法之一从介质或网络引导系统.
然后,执行诸如导入根池和修复GRUB条目等操作.
x86#zpoolimport-frpool重新安装引导装载程序.
x86#bootadminstall-bootloader-f-Prpool如何为进行恢复而引导系统110在OracleSolaris11.
2中管理ZFS文件系统2014年12月其中-f选项将强制安装引导装载程序并绕过所有版本检查,以便不对系统上的引导装载程序版本进行降级.
-P选项用于指定根池.
您可以使用bootadmlist-menu命令列出并修改GRUB2条目.
有关更多信息,请参见bootadm(1M).
退出并重新引导系统.
x86#exit1InstallOracleSolaris2InstallAdditionalDrivers3Shell4Terminaltype(currentlysun-color)5RebootPleaseenteranumber[1]:5确认系统引导成功.
解决root口令未知导致无法登录系统的问题.
首先,您必须使用步骤1中列出的引导方法之一从介质或网络引导系统.
然后,导入根池(rpool)并挂载BE以删除root口令项.
在SPARC平台和x86平台上,该过程是相同的.
#zpoolimport-frpool#beadmlistbe_find_current_be:failedtofindcurrentBEnamebe_find_current_be:failedtofindcurrentBEnameBEActiveMountpointSpacePolicyCreatedsolaris--46.
95Mstatic2012-07-2010:25solaris-2R-3.
81Gstatic2012-07-1913:44#mkdir/a#beadmmountsolaris-2/a#TERM=vt100#exportTERM#cd/a/etc#vishadow#cd/#beadmumountsolaris-2#halt转至下一步设置root口令.
3.
通过引导至单用户模式并设置口令来设置root口令.
此步骤假设您在上一步中删除了未知的root口令.
如何为进行恢复而引导系统第4章管理ZFS根池组件111在基于x86系统上,编辑选定的引导项,然后添加-s选项.
在基于SPARC系统上,将系统引导至单用户模式,以root身份登录,然后设置root口令.
例如:okboot-sBootdevice:/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0,0:a.
.
.
SunOSRelease5.
11Version11.
264-bitCopyright(c)1983,2013,Oracleand/oritsaffiliates.
AllrightsreservedBootingtomilestone"milestone/single-user:default".
Enterusernameforsystemmaintenance(control-dtobypass):rootEnterrootpassword(control-dtobypass):single-userprivilegeassignedtorooton/dev/console.
EnteringSystemMaintenanceModeJul2014:09:59su:'suroot'succeededforrooton/dev/consoleOracleCorporationSunOS5.
1111.
2July2013root@tardis.
central:~#passwd-rfilesrootNewPassword:xxxxxxRe-enternewPassword:xxxxxxpasswd:passwordsuccessfullychangedforrootroot@tardis.
central:~#logoutsvc.
startd:Returningtomilestoneall.
112在OracleSolaris11.
2中管理ZFS文件系统2014年12月第5章管理OracleSolarisZFS文件系统1135第5章管理OracleSolarisZFS文件系统本章提供有关管理OracleSolarisZFS文件系统的详细信息.
本章包括分层次的文件系统布局、属性继承和自动挂载点管理以及共享交互等概念.
本章包含以下各节:"管理ZFS文件系统"[113]"创建、销毁和重命名ZFS文件系统"[114]"介绍ZFS属性"[116]"查询ZFS文件系统信息"[131]"管理ZFS属性"[133]"挂载ZFS文件系统"[138]"共享和取消共享ZFS文件系统"[142]"设置ZFS配额和预留空间"[152]"加密ZFS文件系统"[157]"迁移ZFS文件系统"[164]"升级ZFS文件系统"[166]管理ZFS文件系统ZFS文件系统构建于存储池上.
文件系统可以动态创建和销毁,而不需要分配或格式化任何底层磁盘空间.
因为文件系统非常轻量化,又是ZFS中的管理中心,因此您可以大量创建.
使用zfs命令可以管理ZFS文件系统.
zfs命令提供了一组用于对文件系统执行特定操作的子命令.
本章详细介绍了这些子命令.
使用此命令还可以管理快照、卷和克隆,但本章仅对这些功能进行了简短介绍.
有关快照和克隆的详细信息,请参见第6章使用OracleSolarisZFS快照和克隆.
有关ZFS卷的详细信息,请参见"ZFS卷"[227].
注-术语数据集在本章中用作通称,表示文件系统、快照、克隆或卷.
创建、销毁和重命名ZFS文件系统114在OracleSolaris11.
2中管理ZFS文件系统2014年12月创建、销毁和重命名ZFS文件系统可以使用zfscreate和zfsdestroy命令来创建和销毁ZFS文件系统.
使用zfsrename命令可重命名ZFS文件系统.
"创建ZFS文件系统"[114]"销毁ZFS文件系统"[115]"重命名ZFS文件系统"[116]创建ZFS文件系统使用zfscreate命令可以创建ZFS文件系统.
create子命令仅使用一个参数:要创建的文件系统的名称.
文件系统名称指定为以池名称开头的路径名,如下所示:pool-name/[filesystem-name/]filesystem-name路径中的池名称和初始文件系统名称标识分层结构中要创建新文件系统的位置.
路径中的最后一个名称标识要创建的文件系统的名称.
文件系统名称必须满足"ZFS组件命名要求"[17]中所述的命名要求.
在创建文件系统时,必须启用对ZFS文件系统进行加密的功能.
有关对ZFS文件系统进行加密的信息,请参见"加密ZFS文件系统"[157].
在以下示例中,在tank/home文件系统中创建了一个名为jeff的文件系统.
#zfscreatetank/home/jeff如果成功创建文件系统,ZFS会自动挂载新创建的文件系统.
缺省情况下,文件系统将使用create子命令中为文件系统名称提供的路径挂载为/dataset.
在本示例中,新创建的jeff文件系统挂载于/tank/home/jeff.
有关自动管理的挂载点的更多信息,请参见"管理ZFS挂载点"[138].
有关zfscreate命令的更多信息,请参见zfs(1M).
可在创建文件系统时设置文件系统属性.
在以下示例中,为tank/home文件系统创建了挂载点/export/zfs:#zfscreate-omountpoint=/export/zfstank/home有关文件系统属性的更多信息,请参见"介绍ZFS属性"[116].
创建、销毁和重命名ZFS文件系统第5章管理OracleSolarisZFS文件系统115销毁ZFS文件系统要销毁ZFS文件系统,请使用zfsdestroy命令.
销毁的文件系统将自动取消挂载,并取消共享.
有关自动管理的挂载或自动管理的共享的更多信息,请参见"自动挂载点"[139].
在以下示例中,销毁了tank/home/mark文件系统:#zfsdestroytank/home/mark注意-使用destroy子命令时不会出现确认提示.
请务必谨慎使用该子命令.
如果要销毁的文件系统处于繁忙状态而无法取消挂载,则zfsdestroy命令将失败.
要销毁活动文件系统,请使用-f选项.
由于此选项可取消挂载、取消共享和销毁活动文件系统,从而导致意外的应用程序行为,因此请谨慎使用此选项.
#zfsdestroytank/home/mattcannotunmount'tank/home/matt':Devicebusy#zfsdestroy-ftank/home/matt如果文件系统具有后代,则zfsdestroy命令也会失败.
要以递归方式销毁文件系统及其所有后代,请使用-r选项.
请注意,递归销毁同时会销毁快照,因此请谨慎使用此选项.
#zfsdestroytank/wscannotdestroy'tank/ws':filesystemhaschildrenuse'-r'todestroythefollowingdatasets:tank/ws/jefftank/ws/billtank/ws/mark#zfsdestroy-rtank/ws如果要销毁的文件系统具有间接依赖项,递归销毁命令也会失败.
要强制销毁所有依赖项(包括目标分层结构外的克隆文件系统),必须使用-R选项.
请务必谨慎使用此选项.
#zfsdestroy-rtank/home/ericcannotdestroy'tank/home/eric':filesystemhasdependentclonesuse'-R'todestroythefollowingdatasets:tank//home/eric-clone#zfsdestroy-Rtank/home/eric注意-在zfsdestroy命令中使用-f、-r或-R选项不会出现确认提示,因此请谨慎使用这些选项.
有关快照和克隆的更多信息,请参见第6章使用OracleSolarisZFS快照和克隆.
介绍ZFS属性116在OracleSolaris11.
2中管理ZFS文件系统2014年12月重命名ZFS文件系统使用zfsrename命令可重命名文件系统.
使用rename子命令可以执行以下操作:更改文件系统的名称.
在ZFS分层结构内重定位文件系统.
更改文件系统的名称并在ZFS分层结构内对其重定位.
以下示例使用rename子命令将一个文件系统从eric重命名为eric_old:#zfsrenametank/home/erictank/home/eric_old以下示例说明如何使用zfsrename重定位文件系统:#zfsrenametank/home/marktank/ws/mark在本示例中,mark文件系统从tank/home重定位到tank/ws.
通过重命名来重定位文件系统时,新位置必须位于同一池中,并且必须具有足够的磁盘空间来存放这一新文件系统.
如果新位置没有足够的磁盘空间(可能是因为已达到配额),则rename操作将失败.
有关配额的更多信息,请参见"设置ZFS配额和预留空间"[152].
rename操作会尝试对文件系统以及任何后代文件系统按顺序执行取消挂载/重新挂载操作.
如果该操作无法取消挂载活动文件系统,则rename命令将失败.
发生这种问题时,必须强行取消挂载该文件系统.
有关重命名快照的信息,请参见"重命名ZFS快照"[172].
介绍ZFS属性属性是用来对文件系统、卷、快照和克隆的行为进行控制的主要机制.
除非另有说明,否则本节中阐述的属性适用于所有数据集类型.
"ZFS只读本机属性"[124]"可设置的ZFS本机属性"[125]"ZFS用户属性"[130]属性分为两种类型:本机属性和用户定义的属性.
本机属性用于提供内部统计信息或控制ZFS文件系统行为.
此外,本机属性是可设置的或只读的.
用户属性对ZFS文件系统行为没有影响,但可通过用户环境中有意义的方式来注释数据集.
有关用户属性的更多信息,请参见"ZFS用户属性"[130].
大多数可设置的属性也是可继承的.
可继承属性是这样的属性:如果为父文件系统设置了该属性,则该属性会向下传播给其所有后代.
介绍ZFS属性第5章管理OracleSolarisZFS文件系统117所有可继承属性都有一个关联的源,此源指示获得属性的方式.
属性的源可具有以下值:local表示属性是使用zfsset命令对数据集进行显式设置的,如"设置ZFS属性"[134]中所述.
inheritedfromdataset-name表示属性是从指定的祖先继承而来.
default表示属性值不是继承而来或在本地设置.
如果没有祖先具有属性源local,则会使用此源.
下表介绍了只读的和可设置的本机ZFS文件系统属性.
只读本机属性在表中注明为"只读属性".
此表中列出的所有其他本机属性均为可设置的属性.
有关用户属性的信息,请参见"ZFS用户属性"[130].
表5-1ZFS本机属性说明属性名称类型缺省值说明aclinherit字符串secure控制创建文件和目录时继承ACL项的方式.
该属性的值包括discard、noallow、secure和passthrough.
有关这些值的说明,请参见"ACL属性"[194].
aclmode字符串groupmask控制chmod操作过程中修改ACL项的方式.
该属性的值包括discard、groupmask和passthrough.
有关这些值的说明,请参见"ACL属性"[194].
atime布尔型on控制在读取文件时是否更新文件的访问时间.
禁用该属性可避免在读取文件时产生写入流量,因此可显著提高性能,但可能会使邮件程序与相似的实用程序感到困惑.
available数字N/A只读属性,用于指明可供某个文件系统及其所有子级使用的磁盘空间量,假定池中没有其他活动.
由于池中会共享磁盘空间,因此可用空间会受到许多因素的限制,包括物理池大小、配额、预留空间和池中的其他数据集.
此属性的缩写为avail.
有关磁盘空间记帐的更多信息,请参见"ZFS磁盘空间记帐"[18].
canmount布尔型on控制是否可以使用zfsmount命令挂载文件系统.
在任意文件系统中均可设置该属性,该属性本身不可继承.
不过,当此属性设置为off时,后代文件系统可以继承挂载点,但永远不会挂载文件系统本身.
当设置了noauto选项时,只能显式挂载和卸载文件系统.
文件系统不会在创建或导入时自动挂载,也不能通过zfsmount-a命令挂载或通过zfsunmount-a命令卸载.
有关详细信息,请参见"canmount属性"[126].
介绍ZFS属性118在OracleSolaris11.
2中管理ZFS文件系统2014年12月属性名称类型缺省值说明casesensitivity字符串mixed此属性指示文件系统使用的文件名匹配算法应当是casesensitive、caseinsensitive,还是允许这两种匹配方式的组合(mixed).
传统上,UNIX和POSIX文件系统的文件名区分大小写.
此属性的值为mixed时表示文件系统对区分大小写和不区分大小写的匹配行为要求均可支持.
当前,在支持混合行为的文件系统上,不区分大小写的匹配行为仅限于OracleSolarisSMB服务器产品.
有关使用mixed值的更多信息,请参见"casesensitivity属性"[127].
无论casesensitivity属性的设置是什么,文件系统都会保留创建文件时指定的名称的大小写.
在创建文件系统后无法更改此属性.
checksum字符串on控制用于验证数据完整性的校验和.
缺省值为on,这将自动选择合适的算法,当前算法为fletcher4.
值包括on,off,fletcher2,fletcher4,sha256和sha256+mac.
值为off将禁用对用户数据的完整性检查.
建议不要使用值off.
compression字符串off启用或禁用数据集压缩.
该属性的值包括on、off、lzjb、gzip和gzip-N.
目前,将此属性设置为lzjb、gzip或gzip-N与将此属性设置为on具有相同的效果.
在包含现有数据的文件系统中启用压缩将只压缩新数据.
现有数据不会被压缩.
此属性的缩写为compress.
compressratio数字N/A只读属性,用于指明数据集实现的压缩率,表示为一个乘数.
可通过zfssetcompression=ondataset命令启用压缩.
根据所有文件的逻辑大小和引用的物理数据量计算此值.
它包括通过使用compression属性实现的节省量.
copies数字1设置每个文件系统的用户数据副本数.
可用的值为1、2或3.
这些副本是对任何池级别冗余的补充.
用户数据多个副本所使用的磁盘空间将计入相应的文件和数据集,并根据配额和预留空间进行计数.
此外,启用多个副本时还会更新used属性.
由于在现有文件系统中更改此属性仅影响新写入的数据,因此请考虑在创建文件系统时设置此属性.
creation字符串N/A只读属性,用于指明创建数据集的日期和时间.
dedup字符串off控制在ZFS文件系统中删除重复数据的功能.
可能的值包括on、off、verify和sha256[,verify].
针对重复数据删除的缺省校验和是sha256.
有关详细信息,请参见"dedup属性"[128].
devices布尔型on控制是否可以打开某个文件系统中的设备文件.
encryption布尔型off控制是否对文件系统进行加密.
加密的文件系统意味着,数据已编码,文件系统所有者需要有密钥才能访问数据.
介绍ZFS属性第5章管理OracleSolarisZFS文件系统119属性名称类型缺省值说明exec布尔型on控制是否允许执行某个文件系统中的程序.
如果设置为off,将禁止带PROT_EXEC的mmap(2)调用.
keychangedate字符串none标识在针对指定文件系统的zfskey-c操作中上次更改包装密钥的日期.
如果未发生任何密钥更改操作,此只读属性的值与文件系统的创建日期相同.
keysource字符串none标识对文件系统密钥进行封装的密钥的格式和位置.
有效的属性值包括raw、hex、passphrase,prompt或file.
使用zfskey-l命令创建、挂载或装入文件系统时,必须提供该密钥.
如果为新文件系统启用加密,则缺省的keysource为passphrase,prompt.
keystatus字符串none标识文件系统的加密密钥状态的只读属性.
文件系统密钥的可用性由available或unavailable予以指示.
对于没有启用加密的文件系统,则显示none.
logbias字符串latency控制ZFS优化该文件系统的同步请求的方式.
如果logbias设置为latency,ZFS将使用池的不同日志设备(如有)低延迟地处理请求.
如果logbias设置为throughput,ZFS将不使用池的不同日志设备.
相反,ZFS将优化同步操作,以提高池的全局吞吐量并有效使用资源.
缺省值为latency.
mlslabel字符串None有关多级别文件系统中mlslabel属性行为的描述,请参见multilevel属性.
下面的mlslabel描述适用于非多级别文件系统.
提供敏感标签,确定文件系统是否可以在TrustedExtensions区域中挂载.
如果有标签的文件系统与有标签的区域相符,则可以从有标签的区域挂载和访问该文件系统.
缺省值为none.
仅当启用了TrustedExtensions且具有相应的特权时才能修改此属性.
mounted布尔型N/A只读属性,用于指明当前是否挂载了文件系统、克隆或快照.
该属性不适用于卷.
值可以是yes或no.
mountpoint字符串N/A控制用于此文件系统的挂载点.
当文件系统的mountpoint属性发生更改时,将取消挂载该文件系统以及继承该挂载点的任何后代.
如果新值为legacy,则该文件系统和子级将保持卸载状态.
否则,如果属性以前为legacy或none,或者该文件系统和子级在属性发生更改之前处于挂载状态,则会自动在新位置重新挂载它们.
此外,任何共享文件系统都将取消共享,并在新位置进行共享.
有关使用该属性的更多信息,请参见"管理ZFS挂载点"[138].
multilevel布尔型off此属性只能在启用了TrustedExtensions的系统上使用.
缺省值为off.
多级别文件系统中的对象带有各自的标签,这些标签使用自动生成的显式敏感标签属性.
可以就地重新标记对象,方法是使用setlabel或setflabel接口更改此标签属性.
介绍ZFS属性120在OracleSolaris11.
2中管理ZFS文件系统2014年12月属性名称类型缺省值说明根文件系统、OracleSolarisZone文件系统或包含已打包的Solaris代码的文件系统不应为多级别文件系统.
多级别文件系统中的mlslabel属性有所不同.
mlslabel值为文件系统中的对象定义最高可能标签.
不允许将文件的标签创建为或重新标记为高于mlslabel值的标签.
基于mlslabel值的挂载策略不适用于多级别文件系统.
对于多级别文件系统,在创建文件系统时可显式设置mlslabel属性.
否则,会自动创建缺省mlslabel属性ADMIN_HIGH.
创建多级别文件之后,可以更改mlslabel属性,但不能将其设置为较低级别标签,也不能设置为none或将其删除.
primarycache字符串all控制主高速缓存(ARC)中缓存的内容.
可能的值包括all、none和metadata.
如果设置为all,则用户数据和元数据都会被缓存.
如果设置为none,则用户数据和元数据都不会被缓存.
如果设置为metadata,则只有元数据会被缓存.
如果在现有文件系统上设置这些属性,则根据这些属性的值仅缓存新I/O.
对某些数据集环境而言,不高速缓存用户数据可能会带来一些好处.
您必须确定您的环境是否适合设置高速缓存属性.
nbmand布尔型off控制在挂载文件系统时是否应使用nbmand(非阻塞强制性)锁.
此属性仅适用于SMB客户机.
对此属性所做的更改只有在卸载文件系统并重新挂载后才有效.
normalization字符串None此属性指示每次对两个文件名进行比较时,文件系统是否应对文件名执行unicode标准化,以及应使用哪种标准化算法.
文件名在存储时始终保持未修改状态,并将其标准化作为任何比较进程的一部分.
如果将此属性设置为none以外的合法值,并且不指定utf8only属性,则utf8only属性自动设置为on.
normalization属性的缺省值为none.
在创建文件系统后无法更改此属性.
origin字符串N/A克隆的文件系统或卷的只读属性,用于标识创建克隆所在的快照.
只要克隆存在,便不能销毁克隆源(即使使用-r或-f选项也是如此).
非克隆文件系统的origin为none.
quota数字(或none)none限制文件系统及其后代可以占用的磁盘空间量.
该属性可对已使用的磁盘空间量强制实施硬限制,包括后代(含文件系统和快照)占用的所有空间.
对已有配额的文件系统的后代设置配额不会覆盖祖先的配额,但会施加额外的限制.
不能对卷设置配额,因为volsize属性可用作隐式配额.
有关设置配额的信息,请参见"设置ZFS文件系统的配额"[153].
rekeydate字符串N/A只读属性,指示上次因对此文件系统执行zfskey-K或zfsclone-K操作而导致数据加密密钥发生更改介绍ZFS属性第5章管理OracleSolarisZFS文件系统121属性名称类型缺省值说明的日期.
如果未执行rekey操作,则此属性的值与creation日期相同.
readonly布尔型off控制某个数据集是否可以修改.
如果设置为on,则不能进行任何修改.
此属性的缩写为rdonly.
recordsize数字128K为文件系统中的文件指定建议的块大小.
此属性的缩写为recsize.
有关详细说明,请参见"recordsize属性"[129].
referenced数字N/A只读属性,用于指明数据集可访问的数据量,这些数据可能会也可能不会与池中的其他数据集共享.
创建快照或克隆时,首先会引用与创建该属性时所在的文件系统或快照相同的磁盘空间量,因为其内容相同.
此属性的缩写为refer.
refquota数字(或none)none设置数据集可以占用的磁盘空间量.
此属性对使用的空间量强制实施硬限制.
此硬限制不包括后代(如快照和克隆)所使用的磁盘空间.
refreservation数字(或none)none设置为数据集(不包括快照和克隆等后代)保留的最小磁盘空间量.
如果使用的磁盘空间量低于该值,则认为数据集正在使用refreservation指定的空间量.
refreservation预留空间计算在父数据集的已用磁盘空间内,并会针对父数据集的配额和预留空间进行计数.
如果设置了refreservation,则仅当在此预留空间之外有足够的可用池空间来容纳数据集中的当前引用字节数时,才允许使用快照.
此属性的缩写为refreserv.
reservation数字(或none)none设置为文件系统及其后代所保留的最小磁盘空间量.
如果使用的磁盘空间量低于该值,则认为文件系统正在使用其预留空间指定的空间量.
预留空间计入父文件系统的已用磁盘空间内,并将计入父文件系统的配额和预留空间.
此属性的缩写为reserv.
有关更多信息,请参见"设置ZFS文件系统的预留空间"[156].
rstchown布尔型on指示文件系统所有者是否可以准许文件所有权更改.
缺省情况下禁止chown操作.
当rstchown设置为off时,用户具有PRIV_FILE_CHOWN_SELF特权,可执行chown操作.
secondarycache字符串all控制辅助高速缓存(L2ARC)中缓存的内容.
可能的值包括all、none和metadata.
如果设置为all,则用户数据和元数据都会被缓存.
如果设置为none,则用户数据和元数据都不会被缓存.
如果设置为metadata,则只有元数据会被缓存.
介绍ZFS属性122在OracleSolaris11.
2中管理ZFS文件系统2014年12月属性名称类型缺省值说明setuid布尔型on控制文件系统中是否考虑setuid位.
shadow字符串None将某个ZFS文件系统标识为URI描述的文件系统的影子.
数据将从URI标识的文件系统迁移到设置了该属性的影子文件系统.
要实现完整迁移,要迁移的文件系统必须为只读的.
share.
nfs字符串off控制是否创建和发布ZFS文件系统的NFS共享并控制使用的选项.
您也可以使用zfsshare命令发布NFS共享,使用zfsunshare命令取消发布NFS共享.
使用zfsshare命令发布NFS共享时还需要设置NFS共享属性.
有关设置NFS共享属性的信息,请参见"共享和取消共享ZFS文件系统"[142].
有关共享ZFS文件系统的更多信息,请参见"共享和取消共享ZFS文件系统"[142].
share.
smb字符串off控制是否创建和发布ZFS文件系统的SMB共享并控制使用的选项.
您也可以使用zfsshare命令发布SMB共享,使用zfsunshare命令取消发布SMB共享.
使用zfsshare命令发布SMB共享时还需要设置SMB共享属性.
有关设置SMB共享属性的信息,请参见"共享和取消共享ZFS文件系统"[142].
snapdir字符串hidden控制.
zfs目录在文件系统的根目录中是隐藏还是可见.
有关使用快照的更多信息,请参见"ZFS快照概述"[169].
sync字符串standard确定文件系统事务的同步行为.
可能的值包括:standard(缺省值),表示将同步文件系统事务(如fsync、O_DSYNC、O_SYNC等)写入到意图日志(intentlog).
always,确保写入每个文件系统事务并通过一个返回系统调用将其刷新到稳定的存储器.
此值会导致显著的性能损失.
disabled,表示禁用同步请求.
仅当下一次提交事务组时,才将文件系统事务提交到稳定的存储器,这可能会延迟好几秒钟.
此值可提供最佳的性能,且没有损坏池的风险.
注意-此disabled值非常危险,因为ZFS会忽略应用程序的同步事务需求,例如数据库操作或NFS操作.
在当前活动的根文件系统或/var文件系统上设置此值可能会导致意外行为、应用程序数据丢失或重放攻击的漏洞加重.
只有完全了解所有相关风险时才能使用此值.
type字符串N/A只读属性,用于指明数据集类型是filesystem(文件系统或克隆)、volume还是snapshot.
used数字N/A只读属性,用于指明数据集及其所有后代占用的磁盘空间量.
有关详细说明,请参见"used属性"[124].
介绍ZFS属性第5章管理OracleSolarisZFS文件系统123属性名称类型缺省值说明usedbychildren数字off只读属性,用于指明此数据集子代占用的磁盘空间量,如果该数据集的所有子代被销毁,则将释放此空间量.
此属性的缩写为usedchild.
usedbydataset数字off只读属性,用于指明此数据集本身占用的空间量,在首先销毁任何快照并删除任何refreservation预留空间后销毁此数据集,将释放该空间量.
该属性缩写为usedds.
usedbyrefreservation数字off只读属性,用于指明在数据集上设置的refreservation占用的磁盘空间量,如果删除refreservation,则将释放该空间量.
此属性的缩写为usedrefreserv.
usedbysnapshots数字off只读属性,用于指明数据集的快照占用的磁盘空间量.
特别是,如果此数据集的所有快照都被销毁,将释放该磁盘空间.
请注意,此值不是简单的快照used属性总和,因为多个快照可以共享空间.
此属性的缩写为usedsnap.
version数字N/A指明文件系统的盘上版本,与池的版本无关.
此属性只能设置为比支持的软件发行版所提供的版本更高的版本.
有关更多信息,请参见zfsupgrade命令.
utf8only布尔型Off此属性指示当文件名含有UTF-8字符代码集中不存在的字符时,文件系统是否应拒绝此类文件名.
如果已将此属性显式设置为off,则不允许显式设置normalization属性,也不允许将该属性设置为none.
utf8only属性的缺省值为off.
在创建文件系统后无法更改此属性.
volsize数字N/A为卷指定卷的逻辑大小.
有关详细说明,请参见"volsize属性"[130].
volblocksize数字8KB为卷指定卷的块大小.
一旦写入卷后,块大小便不能更改,因此应在创建卷时设置块大小.
卷的缺省块大小为8KB.
位于512字节到128KB之间的2的任意次幂都有效.
此属性的缩写为volblock.
vscan布尔型Off控制打开和关闭常规文件时是否应为其扫描病毒.
如果具有第三方病毒扫描软件,则除了启用此属性外,还必须启用病毒扫描服务才会执行病毒扫描.
缺省值为off(关闭).
zoned布尔型N/A指明是否将已文件系统添加到非全局区域.
如果设置该属性,全局区域中将不会标记挂载点,因此ZFS在收到请求时不能挂载此类文件系统.
首次安装区域时,会为添加的所有文件系统设置该属性.
有关将ZFS用于已安装的区域的更多信息,请参见"在安装了区域的Solaris系统中使用ZFS"[229].
xattr布尔型on指明此文件系统是启用(on)还是禁用了(off)扩展属性.
介绍ZFS属性124在OracleSolaris11.
2中管理ZFS文件系统2014年12月ZFS只读本机属性可以检索但无法设置只读本机属性.
只读本机属性不可继承.
有些本机属性特定于特殊类型的数据集.
在这种情况下,表5-1"ZFS本机属性说明"的说明部分会注明数据集类型.
下面列出了只读本机属性,表5-1"ZFS本机属性说明"对其进行了描述.
availablecompressratiocreationkeystatusmountedoriginreferencedrekeydatetypeused有关详细信息,请参见"used属性"[124].
usedbychildrenusedbydatasetusedbyrefreservationusedbysnapshots有关磁盘空间记帐(包括used、referenced和available属性)的更多信息,请参见"ZFS磁盘空间记帐"[18].
used属性used属性是一个只读属性,表明此数据集及其所有后代占用的磁盘空间量.
可根据此数据集的配额和预留空间来检查该值.
使用的磁盘空间不包括数据集的预留空间,但会考虑任何后代数据集的预留空间.
数据集占用其父级的磁盘空间量以及以递归方式销毁该数据集时所释放的磁盘空间量应为其使用空间和预留空间的较大者.
创建快照时,其磁盘空间最初在快照与文件系统之间进行共享,还可能是与以前的快照进行共享.
随着文件系统的变化,以前共享的磁盘空间将供快照专用,并会计算在快照的使用空间内.
快照使用的磁盘空间会将其专用数据所占空间计算在内.
此外,删除快照可增加其他快照专用(和使用)的磁盘空间量.
有关快照和空间问题的更多信息,请参见"空间不足行为"[19].
介绍ZFS属性第5章管理OracleSolarisZFS文件系统125已用磁盘空间量、可用磁盘空间量以及引用磁盘空间量并不包括暂挂更改.
通常,暂挂更改仅占用几秒钟的时间.
使用fsync(3c)或O_SYNC功能提交对磁盘的更改,不一定可以保证磁盘空间使用情况信息会立即更新.
使用zfslist-ospace命令,可以显示usedbychildren、usedbydataset、usedbyrefreservation和usedbysnapshots属性信息.
这些属性将used属性细分为后代占用的磁盘空间.
有关更多信息,请参见表5-1"ZFS本机属性说明".
可设置的ZFS本机属性可设置的本机属性是其值可同时进行检索和设置的属性.
可设置的本机属性可以使用zfsset命令或"设置ZFS属性"[134]命令进行设置,请分别参见SettingZFSProperties和"创建ZFS文件系统"[114]中的描述.
除了配额和预留空间外,可设置的本机属性均可继承.
有关配额的更多信息,请参见"设置ZFS配额和预留空间"[152].
有些可设置的本机属性特定于特殊类型的数据集.
在这种情况下,表5-1"ZFS本机属性说明"的说明部分会注明数据集类型.
如果未明确注明,则表明属性适用于所有数据集类型:文件系统、卷、克隆和快照.
下面列出了可设置的属性,表5-1"ZFS本机属性说明"对其进行了描述.
aclinherit有关详细说明,请参见"ACL属性"[194].
aclmode有关详细说明,请参见"ACL属性"[194].
atimecanmountcasesensitivitychecksumcompressioncopiesdevicesdedupencryptionexeckeysourcelogbiasmlslabelmountpoint介绍ZFS属性126在OracleSolaris11.
2中管理ZFS文件系统2014年12月nbmandnormalizationprimarycachequotareadonlyrecordsize有关详细说明,请参见"recordsize属性"[129].
refquotarefreservationreservationrstchownsecondarycacheshare.
smbshare.
nfssetuidsnapdirversionvscanutf8onlyvolsize有关详细说明,请参见"volsize属性"[130].
volblocksizezonedxattrcanmount属性如果canmount属性设置为off,则不能使用zfsmount或zfsmount-a命令挂载文件系统.
将此属性设置为off与将mountpoint属性设置为none的效果相似,区别在于文件系统仍有一个可以继承的普通mountpoint属性.
例如,可将该属性设置为off,为后代文件系统建立可继承属性,但父文件系统本身永远不会挂载,也无法供用户访问.
在这种情况下,父文件系统将充当一个容器,这样便可以在容器中设置属性,但容器本身永远不可访问.
在以下示例中,创建了userpool并将其canmount属性设置为off.
将后代用户文件系统的挂载点设置为一个公共挂载点/export/home.
在父文件系统中设置的属性可由后代文件系统继承,但永远不会挂载父文件系统本身.
#zpoolcreateuserpoolmirrorc0t5d0c1t6d0介绍ZFS属性第5章管理OracleSolarisZFS文件系统127#zfssetcanmount=offuserpool#zfssetmountpoint=/export/homeuserpool#zfssetcompression=onuserpool#zfscreateuserpool/user1#zfscreateuserpool/user2#zfsmountuserpool/user1/export/home/user1userpool/user2/export/home/user2将canmount属性设置为noauto意味着文件系统只能显式挂载,而不能自动挂载.
casesensitivity属性此属性指示文件系统使用的文件名匹配算法应当是casesensitive、caseinsensitive,还是允许这两种匹配方式的组合(mixed).
对混合敏感性文件系统发出不区分大小写的匹配请求时,行为通常与纯正的不区分大小写的文件系统的预期行为相同.
区别在于,在混合敏感性文件系统中可能存在以下情况:目录中的多个名称从区分大小写的角度来看是唯一的,但从不区分大小写的角度来看则不是唯一的.
例如,某个目录中可能包含文件foo、Foo和FOO.
如果请求对foo的任何可能形式(例如foo、FOO、FoO、fOo等)进行不区分大小写的匹配,则该匹配算法会选择三个现有文件之一作为匹配项.
无法保证该算法到底选择哪个文件作为匹配项,但可以保证会选择同一文件作为foo的任何形式的匹配项.
只要目录保持不变,被选作foo、FOO、foO、Foo等的不区分大小写匹配项的文件就始终相同.
utf8only、normalization和casesensitivity属性还提供了可以通过使用ZFS委托管理指定给非特权用户的新权限.
有关更多信息,请参见"授予ZFS权限"[216].
copies属性作为一项可靠性功能,如果可能,ZFS文件系统元数据会在不同的磁盘中自动存储多次.
此功能称为重复块(dittoblock).
在此发行版中,还可以使用zfssetcopies命令存储用户数据的多个副本,这些副本也按文件系统进行存储.
例如:#zfssetcopies=2users/home#zfsgetcopiesusers/homeNAMEPROPERTYVALUESOURCEusers/homecopies2local可用的值为1、2或3.
缺省值为1.
除了任何池级别的冗余以外,这些副本还用于诸如镜像或RAID-Z之类的配置中.
存储ZFS用户数据的多个副本的优点如下:介绍ZFS属性128在OracleSolaris11.
2中管理ZFS文件系统2014年12月通过支持所有ZFS配置从不可恢复的块读取故障(例如介质故障(一般称为位损坏))恢复来提高数据保留能力.
提供数据保护,即使只有一个磁盘可用.
允许您在存储池功能之外以每个文件系统为基础选择数据保护策略.
注-根据存储池中重复块(dittoblock)的分配,可能会将多个副本置于单个磁盘上.
某个后续的满载磁盘故障可能会导致所有重复块(dittoblock)都不可用.
无意中创建了非冗余池时以及需要设置数据保留策略时,可能会考虑使用重复块(dittoblock).
dedup属性dedup属性控制是否从文件系统中删除重复数据.
如果文件系统启用了dedup属性,则会以同步方式删除重复的数据块.
结果是仅存储唯一的数据,在文件之间共享通用组件.
在检查以下注意事项之前,不要在驻留于生产系统上的文件系统上启用dedup属性:1.
确定数据是否将受益于重复数据删除产生的空间节省.
您可以运行zdb-S命令模拟在池上启用重复数据删除可能会节省的空间.
此命令必须在静默池上运行.
如果您的数据不是可进行重复数据删除的,则启用dedup没有意义.
例如:#zdb-StankSimulatedDDThistogram:bucketallocatedreferencedrefcntblocksLSIZEPSIZEDSIZEblocksLSIZEPSIZEDSIZE12.
27M239G188G194G2.
27M239G188G194G2327K34.
3G27.
8G28.
1G698K73.
3G59.
2G59.
9G430.
1K2.
91G2.
10G2.
11G152K14.
9G10.
6G10.
6G87.
73K691M529M529M74.
5K6.
25G4.
79G4.
80G1667343.
7M25.
8M25.
9M13.
1K822M492M494M3219712.
3M7.
02M7.
03M7.
66K480M269M270M64471.
27M626K626K3.
86K103M51.
2M51.
2M12822908K250K251K3.
71K150M40.
3M40.
3M2567302K48K53.
7K2.
27K88.
6M17.
3M19.
5M5124131K7.
50K7.
75K2.
74K102M5.
62M5.
79M2K12K2K2K3.
23K6.
47M6.
47M6.
47M8K1128K5K5K13.
9K1.
74G69.
5M69.
5MTotal2.
63M277G218G225G3.
22M337G263G270Gdedup=1.
20,compress=1.
28,copies=1.
03,dedup*compress/copies=1.
50如果估计的重复数据删除比大于2,则重复数据删除可能会带来空间节省.
介绍ZFS属性第5章管理OracleSolarisZFS文件系统129在上述示例中,重复数据删除比小于2,因此建议不要启用dedup.
2.
请确保系统具有足够的内存来支持重复数据删除.
每个核心中重复数据删除表项约为320字节用分配的块数乘以320.
例如:in-coreDDTsize=2.
63Mx320=841.
60M3.
当重复数据删除表可以完全装入内存时,重复数据删除的性能最佳.
如果不得不将重复数据删除表写入磁盘,则性能将降低.
例如,如果系统不满足上述内存要求,则删除启用了dedup的大文件系统将大大降低系统性能.
在启用dedup时,dedup校验和算法会覆盖checksum属性.
将属性值设置为verify等效于指定sha256,verify.
如果将属性设置为verify,且两个块具有相同的签名,则ZFS会与现有块进行逐字节比较,以确保内容完全相同.
可以按文件系统启用此属性.
例如:#zfssetdedup=ontank/home可以使用zfsget命令确定是否设置了dedup属性.
虽然重复数据删除是作为文件系统属性设置的,但是它在池范围内起作用.
例如,您可以确定重复数据删除比.
例如:#zpoollisttankNAMESIZEALLOCFREECAPDEDUPHEALTHALTROOTrpool136G55.
2G80.
8G40%2.
30xONLINE-DEDUP列指示已发生了多少重复数据删除.
如果在任何文件系统上都没有启用dedup属性,或者如果刚刚在文件系统上启用了dedup属性,则DEDUP比是1.
00x.
可以使用zpoolget命令确定dedupratio属性的值.
例如:#zpoolgetdedupratioexportNAMEPROPERTYVALUESOURCErpooldedupratio3.
00x-此池属性说明此池已实现了多少重复数据删除.
encryption属性可以使用encryption属性来加密ZFS文件系统.
有关更多信息,请参见"加密ZFS文件系统"[157].
recordsize属性recordsize属性为文件系统中的文件指定建议的块大小.
介绍ZFS属性130在OracleSolaris11.
2中管理ZFS文件系统2014年12月该属性专门设计用于对大小固定的记录中的文件进行访问的数据库工作负荷.
ZFS会根据为典型的访问模式优化的内部算法来自动调整块大小.
对于创建很大的文件但访问较小的随机块中的文件的数据库而言,这些算法可能不是最优的.
将recordsize值指定为大于或等于数据库的记录大小的值可以显著提高性能.
强烈建议不要将该属性用于一般用途的文件系统,否则可能会对性能产生不利影响.
指定的大小必须是2的若干次幂,并且必须大于或等于512字节同时小于或等于1MB.
更改文件系统的recordsize值仅影响之后创建的文件.
现有文件不会受到影响.
此属性的缩写为recsize.
share.
smb属性此属性通过OracleSolarisSMB服务启用ZFS文件系统的共享,并标识要使用的选项.
当属性从off更改为on时,任何继承该属性的共享将使用其当前选项重新共享.
此属性设置为off时,继承此属性的共享将会取消共享.
有关使用share.
smb属性的示例,请参见"共享和取消共享ZFS文件系统"[142].
volsize属性volsize属性指定卷的逻辑大小.
缺省情况下,创建卷会产生相同大小的预留空间.
对volsize的任何更改都会反映为对预留空间的等效更改.
这些检查用来防止用户产生的意外行为.
如果卷包含的空间比其声明可用的空间少,则会导致未定义的行为或数据损坏,具体取决于卷的使用方法.
如果在卷的使用过程中更改卷大小,特别是在收缩大小时,也会出现上述影响.
调整卷大小时,应该格外小心.
有关使用卷的更多信息,请参见"ZFS卷"[227].
ZFS用户属性除了本机属性外,ZFS还支持任意用户属性.
用户属性对ZFS行为没有影响,但可通过用户环境中有意义的信息来注释数据集.
用户属性名称必须符合以下约定:必须包含冒号字符(':'),以与本机属性相区分.
必须包含小写字母、数字或以下标点符号:用户属性名称的最大长度为256个字符.
预期约定是属性名分为以下两个部分,但ZFS不强制使用此名称空间:查询ZFS文件系统信息第5章管理OracleSolarisZFS文件系统131module:property在程序中使用用户属性时,请对属性名的module部分使用反向DNS域名,以尽量避免两个独立开发的软件包将同一属性名用于不同用途.
以com.
oracle.
开头的属性名保留供OracleCorporation使用.
用户属性的值必须符合以下约定:必须由始终继承且从不验证的任意字符串组成.
用户属性值的最大长度为1024个字符.
例如:#zfssetdept:users=financeuserpool/user1#zfssetdept:users=generaluserpool/user2#zfssetdept:users=itopsuserpool/user3对属性执行操作的所有命令(如zfslist、zfsget、zfsset等)都可用来处理本机属性和用户属性.
例如:zfsget-rdept:usersuserpoolNAMEPROPERTYVALUESOURCEuserpooldept:usersalllocaluserpool/user1dept:usersfinancelocaluserpool/user2dept:usersgenerallocaluserpool/user3dept:usersitopslocal要清除某一用户属性,请使用zfsinherit命令.
例如:#zfsinherit-rdept:usersuserpool如果任意父数据集中均未定义该属性,则会将其完全删除.
查询ZFS文件系统信息zfslist命令提供了一种用于查看和查询数据集信息的可扩展机制.
本节中对基本查询和复杂查询都进行了说明.
列出基本ZFS信息通过使用不带任何选项的zfslist命令可以列出基本数据集信息.
此命令可显示系统中所有数据集的名称,以及其used、available、referenced和mountpoint属性的值.
有关这些属性的更多信息,请参见"介绍ZFS属性"[116].
查询ZFS文件系统信息132在OracleSolaris11.
2中管理ZFS文件系统2014年12月例如:#zfslistusers2.
00G64.
9G32K/usersusers/home2.
00G64.
9G35K/users/homeusers/home/cindy548K64.
9G548K/users/home/cindyusers/home/mark1.
00G64.
9G1.
00G/users/home/markusers/home/neil1.
00G64.
9G1.
00G/users/home/neil另外,还可使用此命令通过在命令行中提供数据集名称来显示特定数据集.
此外,使用-r选项将以递归方式显示该数据集的所有后代.
例如:#zfslist-tall-rusers/home/markNAMEUSEDAVAILREFERMOUNTPOINTusers/home/mark1.
00G64.
9G1.
00G/users/home/markusers/home/mark@yesterday0-1.
00G-users/home/mark@today0-1.
00G-您可以结合文件系统的挂载点使用zfslist命令.
例如:#zfslist/user/home/markNAMEUSEDAVAILREFERMOUNTPOINTusers/home/mark1.
00G64.
9G1.
00G/users/home/mark以下示例说明了如何显示关于tank/home/gina及其所有后代文件系统的基本信息:#zfslist-rusers/home/ginaNAMEUSEDAVAILREFERMOUNTPOINTusers/home/gina2.
00G62.
9G32K/users/home/ginausers/home/gina/projects2.
00G62.
9G33K/users/home/gina/projectsusers/home/gina/projects/fs11.
00G62.
9G1.
00G/users/home/gina/projects/fs1users/home/gina/projects/fs21.
00G62.
9G1.
00G/users/home/gina/projects/fs2有关zfslist命令的其他信息,请参见zfs(1M).
创建复杂的ZFS查询使用o、-t和-H选项可对-zfslist输出进行定制.
通过使用-o选项以及所需属性的逗号分隔列表可以定制属性值输出.
可以将任何数据集属性作为有效参数提供.
有关所有受支持的数据集属性的列表,请参见"介绍ZFS属性"[116].
除了定义的属性外,-o选项列表还可以包含字符name,以指明输出应包括数据集的名称.
以下示例使用zfslist来显示数据集名称以及share.
nfs和mountpoint属性值.
#zfslist-r-oname,share.
nfs,mountpointusers/homeNAMENFSMOUNTPOINTusers/homeon/users/homeusers/home/cindyon/users/home/cindyusers/home/ginaon/users/home/gina管理ZFS属性第5章管理OracleSolarisZFS文件系统133users/home/gina/projectson/users/home/gina/projectsusers/home/gina/projects/fs1on/users/home/gina/projects/fs1users/home/gina/projects/fs2on/users/home/gina/projects/fs2users/home/markon/users/home/markusers/home/neilon/users/home/neil您可以使用-t选项指定要显示的数据集类型.
下表中介绍了有效的类型.
表5-2ZFS对象的类型类型说明filesystem文件系统和克隆volume卷share文件系统共享snapshot快照-t选项接受要显示的数据集类型的逗号分隔列表.
以下示例同时使用-t和-o选项来显示所有文件系统的名称和used属性:#zfslist-r-tfilesystem-oname,usedusers/homeNAMEUSEDusers/home4.
00Gusers/home/cindy548Kusers/home/gina2.
00Gusers/home/gina/projects2.
00Gusers/home/gina/projects/fs11.
00Gusers/home/gina/projects/fs21.
00Gusers/home/mark1.
00Gusers/home/neil1.
00G您可以使用-H选项在生成的输出中省略zfslist标题.
使用-H选项时,所有空格都被Tab字符取代.
当需要可解析的输出(例如编写脚本时),此选项可能很有用.
以下示例显示了使用带有H选项的-zfslist命令所生成的输出:#zfslist-r-H-onameusers/homeusers/homeusers/home/cindyusers/home/ginausers/home/gina/projectsusers/home/gina/projects/fs1users/home/gina/projects/fs2users/home/markusers/home/neil管理ZFS属性数据集属性通过zfs命令的set、inherit和get子命令来管理.
管理ZFS属性134在OracleSolaris11.
2中管理ZFS文件系统2014年12月"设置ZFS属性"[134]"继承ZFS属性"[134]"查询ZFS属性"[135]设置ZFS属性可以使用zfsset命令修改任何可设置的数据集属性.
或者,也可以使用zfscreate命令在创建数据集时设置属性.
有关可设置的数据集属性的列表,请参见"可设置的ZFS本机属性"[125].
zfsset命令采用property=value格式的属性/值序列,然后是数据集名称.
每次调用zfsset时只能设置或修改一个属性.
以下示例将tank/home的atime属性设置为off.
#zfssetatime=offtank/home此外,任何文件系统属性均可在创建文件系统时设置.
例如:#zfscreate-oatime=offtank/home可以使用以下易于理解的后缀(按大小递增顺序)指定数字属性值:BKMGTPEZ.
其中任一后缀都可后跟可选的b,用于表示字节,但B后缀除外,因为它已表示了字节.
以下四个zfsset调用是等效的数字表达式,在users/home/mark文件系统中将quota属性设置为值20GB:#zfssetquota=20Gusers/home/mark#zfssetquota=20gusers/home/mark#zfssetquota=20GBusers/home/mark#zfssetquota=20gbusers/home/mark如果尝试在100%全满的文件系统上设置属性,则会显示类似于以下内容的消息:#zfssetquota=20gbusers/home/markcannotsetpropertyfor'/users/home/mark':outofspace非数字属性的值区分大小写,并且必须为小写字母,但mountpoint除外.
该属性的值既可以包含大写字母,也可以包含小写字母.
有关zfsset命令的更多信息,请参见zfs(1M).
继承ZFS属性除非已对后代文件系统显式设置了配额或预留空间,否则除了配额和预留空间外,所有可设置的属性都从父文件系统继承各自的值.
如果没有祖先为继承的属性设置显式值,管理ZFS属性第5章管理OracleSolarisZFS文件系统135则使用该属性的缺省值.
可以使用zfsinherit命令清除某个属性值,从而促使从父文件系统继承该值.
以下示例使用zfsset命令为tank/home/jeff文件系统启用压缩.
然后,使用zfsinherit清除compression属性,从而使该属性继承缺省值off.
由于home和tank都未本地设置compression属性,因此会使用缺省值.
如果两者都启用了压缩,则使用最直接的祖先中设置的值(在本示例中为home).
#zfssetcompression=ontank/home/jeff#zfsget-rcompressiontank/homeNAMEPROPERTYVALUESOURCEtank/homecompressionoffdefaulttank/home/ericcompressionoffdefaulttank/home/eric@todaycompression--tank/home/jeffcompressiononlocal#zfsinheritcompressiontank/home/jeff#zfsget-rcompressiontank/homeNAMEPROPERTYVALUESOURCEtank/homecompressionoffdefaulttank/home/ericcompressionoffdefaulttank/home/eric@todaycompression--tank/home/jeffcompressionoffdefault如果指定了-r选项,则会以递归方式应用inherit子命令.
在以下示例中,该命令将使tank/home以及它可能具有的所有后代都继承compression属性的值:#zfsinherit-rcompressiontank/home注-请注意,使用-r选项会清除所有后代文件系统的当前属性设置.
有关zfsinherit命令的更多信息,请参见zfs(1M).
查询ZFS属性查询属性值的最简单方法是使用zfslist命令.
有关更多信息,请参见"列出基本ZFS信息"[131].
但是,对于复杂查询和脚本编写,请使用zfsget命令以定制格式提供更详细的信息.
可以使用zfsget命令检索任何数据集属性.
以下示例说明如何在数据集中检索单个属性值:#zfsgetchecksumtank/wsNAMEPROPERTYVALUESOURCEtank/wschecksumondefault第四栏SOURCE表示此属性值的来源.
下表定义可能的源值.
管理ZFS属性136在OracleSolaris11.
2中管理ZFS文件系统2014年12月表5-3可能的SOURCE值(zfsget命令)Source值说明default从来不为数据集或其任何祖先显式设置此属性值.
使用的是该属性的缺省值.
inheritedfromdataset-name该属性值继承自dataset-name所指定的父数据集.
local使用zfsset可为此数据集显式设置该属性值.
temporary该属性值是使用zfsmount-o选项设置的,并且仅在挂载期间有效.
有关临时挂载点属性的更多信息,请参见"使用临时挂载属性"[141].
-(none)此属性为只读.
其值由ZFS生成.
可以使用特殊关键字all检索所有数据集属性值.
以下示例使用all关键字:#zfsgetalltank/homeNAMEPROPERTYVALUESOURCEtank/hometypefilesystem-tank/homecreationMonDec313:102012-tank/homeused291K-tank/homeavailable58.
7G-tank/homereferenced291K-tank/homecompressratio1.
00x-tank/homemountedyes-tank/homequotanonedefaulttank/homereservationnonedefaulttank/homerecordsize128Kdefaulttank/homemountpoint/tank/homedefaulttank/homesharenfsoffdefaulttank/homechecksumondefaulttank/homecompressionoffdefaulttank/homeatimeondefaulttank/homedevicesondefaulttank/homeexecondefaulttank/homesetuidondefaulttank/homereadonlyoffdefaulttank/homezonedoffdefaulttank/homesnapdirhiddendefaulttank/homeaclmodediscarddefaulttank/homeaclinheritrestricteddefaulttank/homecanmountondefaulttank/homeshareiscsioffdefaulttank/homexattrondefaulttank/homecopies1defaulttank/homeversion5-tank/homeutf8onlyoff-tank/homenormalizationnone-tank/homecasesensitivitymixed-tank/homevscanoffdefaulttank/homenbmandoffdefaulttank/homesharesmboffdefaulttank/homerefquotanonedefaulttank/homerefreservationnonedefault管理ZFS属性第5章管理OracleSolarisZFS文件系统137tank/homeprimarycachealldefaulttank/homesecondarycachealldefaulttank/homeusedbysnapshots0-tank/homeusedbydataset291K-tank/homeusedbychildren0-tank/homeusedbyrefreservation0-tank/homelogbiaslatencydefaulttank/homesyncstandarddefaulttank/homerekeydate-defaulttank/homerstchownondefaultzfsget的-s选项用于按照源类型指定要显示的属性.
通过此选项可获取一个逗号分隔列表,用于指明所需的源类型.
仅会显示具有指定源类型的属性.
有效的源类型包括local、default、inherited、temporary和none.
以下示例显示了在tank/ws上本地设置的所有属性.
#zfsget-slocalalltank/wsNAMEPROPERTYVALUESOURCEtank/wscompressiononlocal以上任何选项均可与-r选项结合使用,以便以递归方式显示指定文件系统的所有子级的指定属性.
在以下示例中,以递归方式显示了tank/home中所有文件系统的所有临时属性:#zfsget-r-stemporaryalltank/homeNAMEPROPERTYVALUESOURCEtank/homeatimeofftemporarytank/home/jeffatimeofftemporarytank/home/markquota20Gtemporary可以在不指定目标文件系统的情况下使用zfsget命令查询属性值,这意味着该命令对所有池或文件系统有效.
例如:#zfsget-slocalalltank/homeatimeofflocaltank/home/jeffatimeofflocaltank/home/markquota20Glocal有关zfsget命令的更多信息,请参见zfs(1M).
查询用于编写脚本的ZFS属性zfsget命令支持为编写脚本而设计的-H和-o选项.
可以使用-H选项省去标题信息并用Tab字符替换空格.
使用一致的空格可使数据便于解析.
可以使用-o选项以如下方式定制输出:字符name可以与逗号分隔的属性列表一起使用,如"介绍ZFS属性"[116]部分所述.
输出逗号分隔的字面字段name、value、property和source的列表,后面跟随空格和参数,这就是逗号分隔的属性列表.
挂载ZFS文件系统138在OracleSolaris11.
2中管理ZFS文件系统2014年12月以下示例说明如何使用-zfsget的-H和o选项来检索单个值:#zfsget-H-ovaluecompressiontank/homeon-p选项会将数字值报告为精确值.
例如,1MB将报告为1000000.
此选项可按如下方式使用:#zfsget-H-ovalue-pusedtank/home182983742可以结合使用-r选项与前述任何选项,以递归方式为所有后代检索请求值.
以下示例使用-H、-o和-r选项检索文件系统名称和export/home及其后代的used属性值,同时省略标题输出:#zfsget-H-oname,value-rusedexport/home挂载ZFS文件系统本节介绍了ZFS如何挂载文件系统.
"管理ZFS挂载点"[138]"挂载ZFS文件系统"[140]"使用临时挂载属性"[141]"取消挂载ZFS文件系统"[142]管理ZFS挂载点缺省情况下,ZFS文件系统在创建时自动挂载.
可以确定文件系统的特定挂载点行为,如本节所述.
另外,也可以在创建时使用zpoolcreate的-m选项为池文件系统设置缺省挂载点.
有关创建池的更多信息,请参见"创建ZFS存储池"[34].
所有ZFS文件系统都由ZFS通过使用服务管理工具(ServiceManagementFacility,SMF)的svc://system/filesystem/local服务在引导时挂载.
文件系统挂载在/path下,其中path是文件系统的名称.
可以使用zfsset命令将mountpoint属性设置为特定路径,以覆盖缺省挂载点.
ZFS自动创建指定的挂载点(如果需要),并自动挂载关联的文件系统.
ZFS文件系统无需您编辑/etc/vfstab文件即可在引导时自动挂载.
mountpoint属性是继承的.
例如,如果pool/home的mountpoint属性设置为/export/stuff,则pool/home/user将继承/export/stuff/user的mountpoint属性值.
挂载ZFS文件系统第5章管理OracleSolarisZFS文件系统139要防止挂载文件系统,请将mountpoint属性设置为none.
此外,canmount属性可以用来控制是否能挂载文件系统.
有关canmount属性的更多信息,请参见"canmount属性"[126].
也可以使用zfsset将mountpoint属性设置为legacy,从而通过传统挂载接口显式管理文件系统.
这样做可以防止ZFS自动挂载和管理文件系统.
不过必须改用包括mount和umount命令在内的传统工具以及/etc/vfstab文件.
有关传统挂载的更多信息,请参见"传统挂载点"[139].
自动挂载点将mountpoint属性从legacy或none更改为特定路径时,ZFS会自动挂载文件系统.
如果ZFS正在管理文件系统,但该文件系统当前已取消挂载,并且mountpoint属性已更改,则文件系统将保持取消挂载状态.
mountpoint属性不是legacy的所有文件系统都由ZFS来管理.
在以下示例中,创建了一个挂载点由ZFS自动管理的文件系统:#zfscreatepool/filesystem#zfsgetmountpointpool/filesystemNAMEPROPERTYVALUESOURCEpool/filesystemmountpoint/pool/filesystemdefault#zfsgetmountedpool/filesystemNAMEPROPERTYVALUESOURCEpool/filesystemmountedyes-另外,也可按以下示例所示,显式设置mountpoint属性:#zfssetmountpoint=/mntpool/filesystem#zfsgetmountpointpool/filesystemNAMEPROPERTYVALUESOURCEpool/filesystemmountpoint/mntlocal#zfsgetmountedpool/filesystemNAMEPROPERTYVALUESOURCEpool/filesystemmountedyes-如果更改了mountpoint属性,文件系统将自动从旧挂载点取消挂载,并重新挂载到新挂载点.
挂载点目录根据需要进行创建.
如果ZFS由于文件系统正处于活动状态而无法将其取消挂载,则会报告错误,并需要强制进行手动取消挂载.
传统挂载点通过将mountpoint属性设置为legacy,可以使用传统工具来管理ZFS文件系统.
传统文件系统必须通过mount和umount命令以及/etc/vfstab文件来管理.
ZFS在引导时不挂载ZFS文件系统140在OracleSolaris11.
2中管理ZFS文件系统2014年12月会自动挂载传统文件系统,并且ZFSmount和umount命令不会对此类型的文件系统执行操作.
以下示例展示了如何在传统模式下设置和管理ZFS文件系统:#zfssetmountpoint=legacytank/home/eric#mount-Fzfstank/home/eschrock/mnt要在引导时自动挂载传统文件系统,必须向/etc/vfstab文件中添加一项.
/etc/vfstab文件中的项类似于下例:#devicedevicemountFSfsckmountmount#tomounttofsckpointtypepassatbootoptions#tank/home/eric-/mntzfs-yes-devicetofsck和fsckpass项设置为-,因为fsck命令不适用于ZFS文件系统.
有关ZFS数据完整性的更多信息,请参见"事务性语义"[14].
挂载ZFS文件系统创建文件系统或系统引导时,ZFS会自动挂载文件系统.
仅当需要更改挂载选项,或者显式挂载或取消挂载文件系统时,才有必要使用zfsmount命令.
不带任何参数的zfsmount命令可以显示ZFS管理的当前已挂载的所有文件系统.
传统管理的挂载点不会显示.
例如:#zfsmount|greptank/homezfsmount|greptank/hometank/home/tank/hometank/home/jeff/tank/home/jeff可以使用-a选项挂载ZFS管理的所有文件系统.
传统管理的文件系统不会挂载.
例如:#zfsmount-a在缺省情况下,ZFS不允许挂载到非空目录上.
例如:#zfsmounttank/home/loricannotmount'tank/home/lori':filesystemalreadymounted传统挂载点必须通过传统工具进行管理.
尝试使用ZFS工具将产生错误.
例如:#zfsmounttank/home/billcannotmount'tank/home/bill':legacymountpointusemount(1M)tomountthisfilesystem#mount-Fzfstank/home/billm当挂载文件系统时,它根据与文件系统关联的属性值使用一组挂载选项.
属性与挂载选项之间的相互关系如下:挂载ZFS文件系统第5章管理OracleSolarisZFS文件系统141表5-4ZFS挂载相关的属性和挂载选项属性挂载选项atimeatime/noatimedevicesdevices/nodevicesexecexec/noexecnbmandnbmand/nonbmandreadonlyro/rwsetuidsetuid/nosetuidxattrxattr/noaxttr挂载选项nosuid是nodevices,nosetuid的别名.
可以使用NFSv4镜像挂载功能来帮助您更好地管理已挂载NFS的ZFS起始目录.
在NFS服务器上创建文件系统后,NFS客户机可以在这些新创建的文件系统的现有父文件系统挂载内自动对其进行搜索.
例如,如果服务器neo已共享了tank文件系统并且客户机zee已将其挂载,则在该服务器上创建/tank/baz后,它会在该客户机上自动可见.
zee#mountneo:/tank/mntzee#ls/mntbaabarneo#zfscreatetank/bazzee%ls/mntbaabarbazzee%ls/mnt/bazfile1file2使用临时挂载属性如果使用带有-o选项的zfsmount命令显式设置了前一部分所述的任何挂载选项,则会临时覆盖关联的属性值.
zfsget命令将这些属性值报告为temporary,并在文件系统取消挂载时恢复为其初始值.
如果在挂载文件系统时更改了某个属性值,更改将立即生效,并覆盖所有临时设置.
在以下示例中,对tank/home/neil文件系统临时设置了只读挂载选项.
假设要取消挂载文件系统.
#zfsmount-orousers/home/neil要临时更改当前已挂载的文件系统的属性值,必须使用特殊的remount选项.
在以下示例中,对于当前挂载的文件系统,atime属性暂时更改为off:共享和取消共享ZFS文件系统142在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zfsmount-oremount,noatimeusers/home/neilNAMEPROPERTYVALUESOURCEusers/home/neilatimeofftemporary#zfsgetatimeusers/home/perrin有关zfsmount命令的更多信息,请参见zfs(1M).
取消挂载ZFS文件系统通过使用zfsunmount子命令可以取消挂载ZFS文件系统.
unmount命令可以接受挂载点或文件系统名称作为参数.
在以下示例中,按文件系统名称取消挂载一个文件系统:#zfsunmountusers/home/mark在以下示例中,按挂载点取消挂载一个文件系统:#zfsunmount/users/home/mark如果文件系统处于繁忙状态,则unmount命令将失败.
要强行取消挂载文件系统,可以使用-f选项.
如果文件系统内容正处于使用状态,强行取消挂载该文件系统时请务必小心.
否则,会产生不可预测的应用程序行为.
#zfsunmounttank/home/ericcannotunmount'/tank/home/eric':Devicebusy#zfsunmount-ftank/home/eric要提供向后兼容性,可以使用传统的umount命令来取消挂载ZFS文件系统.
例如:#umount/tank/home/bob有关zfsumount命令的更多信息,请参见zfs(1M).
共享和取消共享ZFS文件系统OracleSolaris11.
1发行版通过利用ZFS属性继承来简化ZFS共享管理.
在运行池版本34的池中启用了新的共享语法.
以下为NFS和SMB的文件系统软件包:NFS客户机和服务器软件包service/file-system/nfs(服务器)service/file-system/nfs(客户机)有关其他NFS配置信息,请参见《在OracleSolaris11.
2中管理网络文件系统》.
共享和取消共享ZFS文件系统第5章管理OracleSolarisZFS文件系统143SMB客户机和服务器软件包service/file-system/smb(服务器)service/file-system/smb(客户机)有关其他SMB配置信息(包括SMB口令管理),请参见《ManagingSMBFileSharingandWindowsInteroperabilityinOracleSolaris11.
2》中的"ManagingSMBMountsinYourLocalEnvironment".
每个文件系统可定义多个共享.
一个共享名可唯一标识一个共享.
您可以定义用来共享文件系统中的特定路径的属性.
缺省情况下,所有文件系统都不共享.
通常,在创建共享之前,NFS服务器服务不会启动.
如果创建了有效的共享,NFS服务将自动启动.
如果ZFS文件系统的mountpoint属性设置为legacy,则只能通过使用传统的share命令共享该文件系统.
share.
nfs属性替换以前发行版中用于定义和发布NFS共享的sharenfs属性.
share.
smb属性替换以前发行版中用于定义和发布SMB共享的sharesmb属性.
sharenfs属性和sharesmb属性分别是share.
nfs属性和sharenfs属性的别名.
/etc/dfs/dfstab文件不再用于在引导时共享文件系统.
设置这些属性以自动共享文件系统.
SMF管理ZFS或UFS共享信息,以便在重新引导系统时自动共享文件系统.
此功能意味着,其sharenfs或sharesmb属性未设置为off的所有文件系统在引导时均处于共享状态.
sharemgr接口不再可用.
传统的share命令仍可用于创建传统的共享.
请参见下面的示例.
share-a命令与以前的share-ap命令类似,因此,共享文件系统将是持久性的.
share-p选项不再可用.
例如,如果要共享tank/home文件系统,请使用如下语法:#zfssetshare.
nfs=ontank/home在上一示例中,对tank/home文件系统设置了share.
nfs属性,share.
nfs属性值将继承到任何后代文件系统.
例如:#zfscreatetank/home/userA#zfscreatetank/home/userB您还可以在现有文件系统共享上指定其他属性值,也可以修改现有属性值.
例如:#zfssetshare.
nfs.
nosuid=ontank/home/userA#zfssetshare.
nfs=ontank/home/userA传统的ZFS共享语法OracleSolaris11语法仍受支持,因此,您可以分两步共享文件系统.
此语法在所有池版本中均受支持.
共享和取消共享ZFS文件系统144在OracleSolaris11.
2中管理ZFS文件系统2014年12月首先使用zfssetshare命令创建ZFS文件系统的NFS或SMB共享.
#zfscreaterpool/fs1#zfssetshare=name=fs1,path=/rpool/fs1,prot=nfsrpool/fs1name=fs1,path=/rpool/fs1,prot=nfs然后将sharenfs或sharesmb属性设置为on以发布共享.
例如:#zfssetsharenfs=onrpool/fs1#grepfs1/etc/dfs/sharetab/rpool/fs1fs1nfssec=sys,rw可以使用传统的zfsgetshare命令显示文件系统共享.
#zfsgetsharerpool/fs1NAMEPROPERTYVALUESOURCErpool/fs1sharename=fs1,path=/rpool/fs1,prot=nfslocal此外,用于共享文件系统的share命令仍受支持,以共享文件系统中的任何目录,其语法与OracleSolaris10发行版中的语法类似.
例如,要共享某个ZFS文件系统:#share-Fnfs/tank/zfsfs#grepzfsfs/etc/dfs/sharetab/tank/zfsfstank_zfsfsnfssec=sys,rw上面的语法与共享UFS文件系统的语法完全一致:#share-Fnfs/ufsfs#grepufsfs/etc/dfs/sharetab/ufsfs-nfsrw/tank/zfsfstank_zfsfsnfsrw新的ZFS共享语法zfsset命令用于通过NFS或SMB协议共享和发布ZFS文件系统.
或者,您可以在创建文件系统时设置share.
nfs或share.
smb属性.
例如,创建和共享tank/sales文件系统.
对于每个用户,缺省共享权限均为读写权限.
后代tank/sales/logs文件也将自动共享,因为share.
nfs属性会继承到后代文件系统且tank/sales/log文件系统会设置为只读访问权限.
#zfscreate-oshare.
nfs=ontank/sales#zfscreate-oshare.
nfs.
ro=\*tank/sales/logs#zfsget-rshare.
nfstank/salesNAMEPROPERTYVALUESOURCEtank/salesshare.
nfsonlocaltank/sales%share.
nfsoninheritedfromtank/salestank/sales/logshare.
nfsoninheritedfromtank/sales共享和取消共享ZFS文件系统第5章管理OracleSolarisZFS文件系统145tank/sales/log%share.
nfsoninheritedfromtank/sales您可以按照以下方式为共享文件系统提供特定系统的root访问权限:#zfssetshare.
nfs=ontank/home/data#zfssetshare.
nfs.
sec.
default.
root=neo.
daleks.
comtank/home/data包含每属性继承的ZFS共享在已升级到最新池版本34的池中,提供了新的共享语法,可利用ZFS属性继承,从而更轻松地进行共享维护.
每个共享特征将成为单独的share属性.
share属性由以share.
前缀开头的名称标识.
share属性示例包括share.
desc、share.
nfs.
nosuid和share.
smb.
guestok.
share.
nfs属性控制是否启用NFS共享.
share.
smb属性控制是否启用SMB共享.
传统的sharenfs和sharesmb属性名称仍可用,因为在新池中,sharenfs是share.
nfs的别名,sharesmb是share.
smb的别名.
如果要共享tank/home文件系统,请使用类似如下的语法:#zfssetshare.
nfs=ontank/home在此示例中,share.
nfs属性值会继承到任何后代文件系统.
例如:#zfscreatetank/home/userA#zfscreatetank/home/userB#greptank/home/etc/dfs/sharetab/tank/hometank_homenfssec=sys,rw/tank/home/userAtank_home_userAnfssec=sys,rw/tank/home/userBtank_home_userBnfssec=sys,rw旧池中的ZFS共享继承在旧池中,只有sharenfs和sharesmb属性由后代文件系统继承.
其他共享特征均存储在每个共享的.
zfs/shares文件中,不会被继承.
一个特殊规则是,只要创建了从其父项继承sharenfs或sharesmb的新文件系统,就会基于sharenfs或sharesmb值为此文件系统创建缺省共享.
请注意,如果直接将sharenfs设置为on,则在后代文件系统中创建的缺省共享只具有缺省NFS特征.
例如:#zpoolgetversiontankNAMEPROPERTYVALUESOURCEtankversion33default#zfscreate-osharenfs=ontank/home#zfscreatetank/home/userA#greptank/home/etc/dfs/sharetab共享和取消共享ZFS文件系统146在OracleSolaris11.
2中管理ZFS文件系统2014年12月/tank/hometank_homenfssec=sys,rw/tank/home/userAtank_home_userAnfssec=sys,rZFS命名共享您可以创建命名共享,它可以在SMB环境中设置权限和属性时提供更多的灵活性.
例如:#zfsshare-oshare.
smb=ontank/workspace%myshare在上一示例中,zfsshare命令为tank/workspace文件系统创建了名为myshare的SMB共享.
您可以通过此文件系统的.
zfs/shares目录访问SMB共享以及显示或设置特定权限或ACL.
每个SMB共享均由单独的.
zfs/shares文件表示.
例如:#ls-lv/tank/workspace/.
zfs/shares-rwxrwxrwx+1rootroot0May1510:31myshare0:everyone@:read_data/write_data/append_data/read_xattr/write_xattr/execute/delete_child/read_attributes/write_attributes/delete/read_acl/write_acl/write_owner/synchronize:allow命名共享从父文件系统继承共享属性.
如果在上一示例中将share.
smb.
guestok属性添加到父文件系统,此属性将继承到命名共享.
例如:#zfsget-rshare.
smb.
guestoktank/workspaceNAMEPROPERTYVALUESOURCEtank/workspaceshare.
smb.
guestokoninheritedfromtanktank/workspace%myshareshare.
smb.
guestokoninheritedfromtank在为文件系统的子目录定义共享时,命名服务在NFS环境中可能会很有帮助.
例如:#zfscreate-oshare.
nfs=on-oshare.
nfs.
anon=99-oshare.
auto=offtank/home#mkdir/tank/home/userA#mkdir/tank/home/userB#zfsshare-oshare.
path=/tank/home/userAtank/home%userA#zfsshare-oshare.
path=/tank/home/userBtank/home%userB#greptank/home/etc/dfs/sharetab/tank/home/userAuserAnfsanon=99,sec=sys,rw/tank/home/userBuserBnfsanon=99,sec=sys,rw上一示例还说明了,在保持所有其他属性继承不变的情况下,将文件系统的share.
auto设置为off将禁用该文件系统的自动共享.
与大多数其他共享属性不同,share.
auto属性不可继承.
创建公共NFS共享时还可以使用命名共享.
只能在命名NFS共享上创建公共共享.
例如:#zfscreate-omountpoint=/pubtank/public#zfsshare-oshare.
nfs=on-oshare.
nfs.
public=ontank/public%pubshare#greppub/etc/dfs/sharetab共享和取消共享ZFS文件系统第5章管理OracleSolarisZFS文件系统147/pubpubsharenfspublic,sec=sys,rw有关NFS和SMB共享属性的详细说明,请参见share_nfs(1M)和share_smb(1M).
ZFS自动共享创建自动共享时,会从文件系统名称中构建唯一资源名称.
构建的名称是文件系统名称的副本,但是,对于文件系统名称中的字符,如果在资源名称中不合法,将被替换为下划线字符(_).
例如,data/home/john的资源名称是data_home_john.
通过设置share.
autoname属性名称,可以在创建自动共享时将文件系统名称替换为特定名称.
在继承时还会使用该特定名称替换前缀文件系统名称.
例如:#zfscreate-oshare.
smb=on-oshare.
autoname=johndata/home/john#zfscreatedata/home/john/backups#grepjohn/etc/dfs/sharetab/data/home/johnjohnsmb/data/home/john/backupsjohn_backupssmb如果在尚未处于共享状态的文件系统上使用传统的share命令或zfssetshare命令,其share.
auto值将自动设置为off.
传统的命令始终会创建命名共享.
此特殊规则可防止自动共享干扰要创建的命名共享.
显示ZFS共享信息通过使用zfsget命令显示文件共享属性的值.
以下示例显示了如何显示一个文件系统的share.
nfs属性:#zfsgetshare.
nfstank/salesNAMEPROPERTYVALUESOURCEtank/salesshare.
nfsonlocal以下示例显示了如何显示后代文件系统的share.
nfs属性:#zfsget-rshare.
nfstank/salesNAMEPROPERTYVALUESOURCEtank/salesshare.
nfsonlocaltank/sales%share.
nfsoninheritedfromtank/salestank/sales/logshare.
nfsoninheritedfromtank/salestank/sales/log%share.
nfsoninheritedfromtank/saleszfsgetall命令语法不能获取扩展共享属性信息.
可以通过使用以下语法显示有关NFS或SMB共享信息的特定详细信息:#zfsgetshare.
nfs.
alltank/sales共享和取消共享ZFS文件系统148在OracleSolaris11.
2中管理ZFS文件系统2014年12月NAMEPROPERTYVALUESOURCEtank/salesshare.
nfs.
aclokoffdefaulttank/salesshare.
nfs.
anondefaulttank/salesshare.
nfs.
charset.
*.
.
.
defaulttank/salesshare.
nfs.
cksumdefaulttank/salesshare.
nfs.
indexdefaulttank/salesshare.
nfs.
logdefaulttank/salesshare.
nfs.
noaclfaboffdefaulttank/salesshare.
nfs.
nosuboffdefaulttank/salesshare.
nfs.
nosuidoffdefaulttank/salesshare.
nfs.
public--tank/salesshare.
nfs.
secdefaulttank/salesshare.
nfs.
sec.
*.
.
.
default因为存在多个共享属性,请考虑使用非缺省值显示属性.
例如:#zfsget-e-slocal,received,inheritedshare.
alltank/homeNAMEPROPERTYVALUESOURCEtank/homeshare.
autoofflocaltank/homeshare.
nfsonlocaltank/homeshare.
nfs.
anon99localtank/homeshare.
protocolsnfslocaltank/homeshare.
smb.
guestokoninheritedfromtank更改ZFS共享属性值可以通过在文件系统共享上指定新属性或修改的属性来更改共享属性值.
例如,如果在创建文件系统时设置只读属性,则可将此属性设置为off.
#zfscreate-oshare.
nfs.
ro=\*tank/data#zfsgetshare.
nfs.
rotank/dataNAMEPROPERTYVALUESOURCEtank/datashare.
nfs.
sec.
sys.
ro*local#zfssetshare.
nfs.
ro=nonetank/data#zfsgetshare.
nfs.
rotank/dataNAMEPROPERTYVALUESOURCEtank/datashare.
nfs.
sec.
sys.
roofflocal如果创建SMB共享,还可以添加NFS共享协议.
例如:#zfssetshare.
smb=ontank/multifs#zfssetshare.
nfs=ontank/multifs#grepmultifs/etc/dfs/sharetab/tank/multifstank_multifsnfssec=sys,rw/tank/multifstank_multifssmb-删除SMB协议:#zfssetshare.
smb=offtank/multifs#grepmultifs/etc/dfs/sharetab/tank/multifstank_multifsnfssec=sys,rw共享和取消共享ZFS文件系统第5章管理OracleSolarisZFS文件系统149您可以重命名已命名的共享.
例如:#zfsshare-oshare.
smb=ontank/home/abc%abcshare#grepabc/etc/dfs/sharetab/tank/home/abcabcsharesmb-#zfsrenametank/home/abc%abcsharetank/home/abc%a1share#grepabc/etc/dfs/sharetab/tank/home/abca1sharesmb-发布和取消发布ZFS共享您可以通过使用zfsunshare命令临时取消共享命名共享而不将其销毁.
例如:#zfsunsharetank/home/abc%a1share#grepabc/etc/dfs/sharetab##zfssharetank/home/abc%a1share#grepabc/etc/dfs/sharetab/tank/home/abca1sharesmb-发出zfsunshare命令时,会取消共享所有文件系统共享.
在对文件系统发出zfsshare命令之前或为文件系统设置share.
nfs或share.
smb属性之前,这些共享将保持独享状态.
在发出zfsunshare命令时不会删除已定义的共享,在下次对文件系统发出zfsshare命令时或为文件系统设置share.
nfs或share.
smb属性时,它们会重新处于共享状态.
删除ZFS共享您可以通过将share.
nfs或share.
smb属性设置为off来取消文件系统共享.
例如:#zfssetshare.
nfs=offtank/multifs#grepmultifs/etc/dfs/sharetab#您可以使用zfsdestroy命令永久删除命名共享.
例如:#zfsdestroytank/home/abc%a1share非全局区域中的ZFS文件共享从OracleSolaris11开始,您可以在OracleSolaris非全局区域创建和发布NFS共享.
如果挂载了某个ZFS文件系统且它在非全局区域中可用,则可以在该区域中共享它.
共享和取消共享ZFS文件系统150在OracleSolaris11.
2中管理ZFS文件系统2014年12月如果文件系统未委托给非全局区域或者未在非全局区域中挂载,则可以在全局区域中共享该文件系统.
如果文件系统已添加到非全局区域,则只能使用传统的share命令来共享该文件系统.
例如,/export/home/data和/export/home/data1文件系统在zfszone中可用.
zfszone#share-Fnfs/export/home/datazfszone#cat/etc/dfs/sharetabzfszone#zfssetshare.
nfs=ontank/zones/export/home/data1zfszone#cat/etc/dfs/sharetabZFS共享迁移/转换问题检查以下转换问题:导入带有旧共享属性的文件系统-导入池或接收文件系统流(它们均在OracleSolaris11之前创建)时,sharenfs和sharesmb属性会在属性值中直接包括所有共享属性.
在大多数情况下,一旦共享每个文件系统,这些传统的共享属性就会转换为一组等效的命名共享.
因为在大多数情况下,导入操作会触发挂载和共享,所以,在导入过程中会直接发生转换为命名共享的操作.
从OracleSolaris11升级-在池升级到版本34之后,第一个文件系统共享需要的时间可能会很长,因为命名服务需要转换为新格式.
升级过程中创建的命名服务是正确的,但不能利用共享属性继承.
显示共享属性值:#zfsgetshare.
nfsfilesystem#zfsgetshare.
smbfilesystem如果引导回较旧的BE,请将sharenfs和sharesmb属性重置为其原始值.
从OracleSolaris11升级-在OracleSolaris11和11.
1中,sharenfs和sharesmb属性只能有off和on两个值.
这些属性不再用于定义共享特征.
/etc/dfs/dfstab文件不再用于在引导时共享文件系统.
引导时,将自动共享包括已启用文件系统共享的所有已挂载ZFS文件系统.
将sharenfs或sharesmb设置为on时,将启用共享.
sharemgr接口不再可用.
传统的share命令仍可用于创建传统的共享.
share-a命令与以前的share-ap命令类似,因此,共享文件系统将是持久性的.
share-p选项不再可用.
升级系统-如果因该发行版中的属性更改而引导回OracleSolaris11BE,则ZFS共享将是不正确的.
非ZFS共享不受影响.
如果打算引导回较旧的BE,则应在执行pkgupdate操作之前首先保存现有共享配置的副本,以便能够恢复ZFS共享配置.
在较旧的BE中,使用sharemgrshow-vp命令可列出所有共享及其配置.
使用以下命令显示共享属性值:#zfsgetsharenfsfilesystem共享和取消共享ZFS文件系统第5章管理OracleSolarisZFS文件系统151#zfsgetsharesmbfilesystem如果返回到较旧的BE,请将sharenfs和sharesmb属性以及使用sharemgr定义的所有共享重置为其原始值.
传统的取消共享行为-使用unshare-a命令或unshareall命令可取消共享文件系统,但是不会更新SMF共享系统信息库.
如果尝试重新共享现有的共享,则会检查到共享系统信息库中的冲突,并显示一个错误.
排除ZFS文件系统共享问题检查以下共享错误情况:新共享或之前的共享未共享确认池和文件系统版本为新版本-如果通过设置share.
nfs或share.
smb属性未共享新共享,则确认池版本是否为34,文件系统版本是否为6.
在NFS服务启动前共享必须已存在-在共享文件系统后NFS服务器服务才会运行.
首先创建NFS共享,然后尝试远程访问共享.
升级了存在共享的系统,但共享不可用-升级了存在共享的系统,但是尝试重新共享这些共享时失败.
这些共享无法共享,因为禁用了share.
auto属性.
如果share.
auto设置为off,则只能使用命名共享,以强制与早期的共享语法兼容.
现有共享可能类似于:#zfsgetshareNAMEPROPERTYVALUESOURCEtank/datasharename=data,path=/tank/data,prot=nfslocal1.
确保启用了share.
auto属性.
如果未启用,启用该属性.
#zfsget-rshare.
autotank/data#zfssetshare.
auto=ontank/data2.
重新共享文件系统.
#zfsset-rshare.
nfs=ontank/data3.
您可能还需要删除命名共享,然后重新创建,这样前面的命令才能成功运行.
#zfslist-tshare-Honame-rtank/data|xargs-n1zfsdestroy4.
如果必要,重新创建命名共享.
#zfscreate-oshare.
nfs=ontank/data%share快照中未包含包括命名共享的共享属性-在zfsclone和zfssend操作中,共享属性和.
zfs/shares文件的处理方式不同.
.
zfs/shares文件包含在快照中并保留在zfsclone和zfssend操作.
有关zfssend和zfsreceive操作期间的属性行为的说明,请参见"向ZFS快照流应用不同的属性值"[183].
完成克隆操作之后,所有文件均来自上一克隆快照,而属性将继承自克隆在ZFS文件系统分层结构中的新位置.
设置ZFS配额和预留空间152在OracleSolaris11.
2中管理ZFS文件系统2014年12月命名共享请求失败-如果创建命名共享的请求由于此共享与自动共享冲突而失败,则可能需要禁用auto.
share属性.
存在共享的池之前已导出-如果以只读方式导入池,则该池的属性和文件都无法修改,因此创建新共享会失败.
如果在导出池之前存在共享,则可以使用现有共享特征(如果可能).
下表列出了已知共享状态以及解决它们的方式(如果需要).
共享状态说明解决方法INVALID共享无效,因为它内部不一致或者与其他共享冲突.
尝试使用以下命令重新共享无效共享:#zfsshareFS%share使用以下命令会显示有关共享的哪个部分未通过验证的错误消息.
先更正此错误,然后重试此共享.
SHARED共享处于共享状态.
无需执行任何操作.
UNSHARED共享有效但已取消共享.
使用zfsshare命令重新共享单个共享或父文件系统.
UNVALIDATED共享尚无效.
包含此共享的文件系统可能未处于可共享状态.
例如,它未挂载或已委托给当前区域之外的某个区域.
或者,表示所需共享的ZFS属性已创建,但尚未证实为合法共享.
使用zfsshare命令重新共享单个共享或父文件系统.
如果文件系统本身可共享,则尝试重新共享要么成功共享(并将状态转换为"SHARED"(已共享)),要么不能共享(并将状态转换为"INVALID"(无效)).
或者,您可以使用share-A命令列出所有已挂载文件系统的所有共享.
这将导致将已挂载文件系统中的所有共享解析为"UNSHARED"(独享)(有效但尚未共享)或"INVALID"(无效).
设置ZFS配额和预留空间可以使用quota属性对文件系统可以使用的磁盘空间量设置限制.
此外,还可以使用reservation属性来保证预留一定的磁盘空间量供文件系统使用.
这两个属性将应用于设置了它们的文件系统以及该文件系统的所有后代.
也就是说,如果对tank/home文件系统设置了配额,则tank/home及其所有后代使用的总磁盘空间量不能超过该配额.
同样,如果为tank/home指定了预留空间,则tank/home及其所有后代都会使用该预留空间.
文件系统及其所有后代使用的磁盘空间量由used属性进行报告.
refquota和refreservation属性用于管理文件系统空间,但不会将后代(如快照和克隆)占用的磁盘空间计算在内.
在此Solaris发行版中,您可以根据属于特定用户或组的文件所占用的磁盘空间量来设置user或group配额.
不能基于卷、早于文件系统版本4的文件系统或早于池版本15的池设置用户和组配额属性.
设置ZFS配额和预留空间第5章管理OracleSolarisZFS文件系统153确定哪个配额和预留空间功能更有利于管理您的文件系统时,请注意以下几点:管理文件系统及其后代使用的磁盘空间时,使用quota和reservation属性会很方便.
refquota和refreservation属性适合于管理文件系统占用的磁盘空间.
将refquota或refreservation属性设置为高于quota或reservation属性无效.
如果设置了quota或refquota属性,则尝试超出任一值的操作都将失败.
可能会超出大于refquota的quota.
例如,如果有些快照块被修改,则可能在超出refquota之前实际已超出quota.
用户和组配额提供了一种方法,可以在具有很多用户帐户的情况下更轻松地管理磁盘空间,例如在大学环境里.
有关设置配额和预留空间的更多信息,请参见"设置ZFS文件系统的配额"[153]和"设置ZFS文件系统的预留空间"[156].
设置ZFS文件系统的配额使用zfsset和zfsget命令可以设置和显示ZFS文件系统的配额.
在以下示例中,在tank/home/jeff上设置了10GB的配额:#zfssetquota=10Gtank/home/jeff#zfsgetquotatank/home/jeffNAMEPROPERTYVALUESOURCEtank/home/jeffquota10Glocal配额还会影响zfslist和df命令的输出.
例如:#zfslist-rtank/homeNAMEUSEDAVAILREFERMOUNTPOINTtank/home1.
45M66.
9G36K/tank/hometank/home/eric547K66.
9G547K/tank/home/erictank/home/jeff322K10.
0G291K/tank/home/jefftank/home/jeff/ws31K10.
0G31K/tank/home/jeff/wstank/home/lori547K66.
9G547K/tank/home/loritank/home/mark31K66.
9G31K/tank/home/mark#df-h/tank/home/jeffFilesystemSizeUsedAvailUse%Mountedontank/home/jeff10G306K10G1%/tank/home/jeff请注意,虽然tank/home具有66.
9GB的可用磁盘空间,但由于tank/home/jeff存在配额,tank/home/jeff和tank/home/jeff/ws各自仅有10GB的可用磁盘空间.
可对文件系统设置refquota,以限制该文件系统可以使用的磁盘空间量.
硬限制不包括后代所占用的磁盘空间.
例如,快照占用的空间不会影响studentA的10GB配额.
#zfssetrefquota=10gstudents/studentA#zfslist-tall-rstudentsNAMEUSEDAVAILREFERMOUNTPOINT设置ZFS配额和预留空间154在OracleSolaris11.
2中管理ZFS文件系统2014年12月students150M66.
8G32K/studentsstudents/studentA150M9.
85G150M/students/studentAstudents/studentA@yesterday0-150M-#zfssnapshotstudents/studentA@today#zfslist-tall-rstudentsstudents150M66.
8G32K/studentsstudents/studentA150M9.
90G100M/students/studentAstudents/studentA@yesterday50.
0M-150M-students/studentA@today0-100M-为了更加方便,可对文件系统设置其他配额,以帮助管理快照使用的磁盘空间.
例如:#zfssetquota=20gstudents/studentA#zfslist-tall-rstudentsNAMEUSEDAVAILREFERMOUNTPOINTstudents150M66.
8G32K/studentsstudents/studentA150M9.
90G100M/students/studentAstudents/studentA@yesterday50.
0M-150M-students/studentA@today0-100M-在此情况下,studentA可能会达到refquota(10GB)硬限制,但studentA可以删除文件进行恢复,即使存在快照也是如此.
在上例中,zfslist输出显示两个配额中的较小者(10GB与20GB相比较小).
要查看两个配额的值,请使用zfsget命令.
例如:#zfsgetrefquota,quotastudents/studentANAMEPROPERTYVALUESOURCEstudents/studentArefquota10Glocalstudents/studentAquota20Glocal在ZFS文件系统中设置用户和组配额可以使用zfsuserquota或zfsgroupquota命令分别设置用户配额或组配额:例如:#zfscreatestudents/compsci#zfssetuserquota@student1=10Gstudents/compsci#zfscreatestudents/labstaff#zfssetgroupquota@labstaff=20GBstudents/labstaff按以下方式显示当前用户配额或组配额:#zfsgetuserquota@student1students/compsciNAMEPROPERTYVALUESOURCEstudents/compsciuserquota@student110Glocal#zfsgetgroupquota@labstaffstudents/labstaffNAMEPROPERTYVALUESOURCEstudents/labstaffgroupquota@labstaff20Glocal可以通过查询以下属性来显示一般用户或组的磁盘空间使用情况:#zfsuserspacestudents/compsci设置ZFS配额和预留空间第5章管理OracleSolarisZFS文件系统155TYPENAMEUSEDQUOTAPOSIXUserroot350MnonePOSIXUserstudent1426M10G#zfsgroupspacestudents/labstaffTYPENAMEUSEDQUOTAPOSIXGrouplabstaff250M20GPOSIXGrouproot350Mnone要确定个别用户或组的磁盘空间使用情况,可以查询以下属性:#zfsgetuserused@student1students/compsciNAMEPROPERTYVALUESOURCEstudents/compsciuserused@student1550Mlocal#zfsgetgroupused@labstaffstudents/labstaffNAMEPROPERTYVALUESOURCEstudents/labstaffgroupused@labstaff250local使用zfsgetalldataset命令不会显示用户和组配额属性,而是显示所有其他文件系统属性的列表.
可以按以下方式删除用户配额或组配额:#zfssetuserquota@student1=nonestudents/compsci#zfssetgroupquota@labstaff=nonestudents/labstaffZFS文件系统的用户和组配额提供以下功能:在父文件系统上设置的用户配额或组配额不会被后代文件系统自动继承.
但是,基于具有用户或组配额的文件系统创建克隆或快照时,将应用用户或组配额.
同样,使用zfssend命令(即使不带-R选项)创建流时,文件系统将具有用户或组配额.
非特权用户只能访问自己的磁盘空间使用情况.
root用户或被授予userused或groupused特权的用户可以访问所有人的用户或组磁盘空间记帐信息.
不能基于ZFS卷、早于文件系统版本4的文件系统或早于池版本15的池设置userquota和groupquota属性.
用户和组配额的实施可能会延迟几秒钟.
这种延迟意味着,在系统发现已超出配额并拒绝其他写入操作(同时显示EDQUOT错误消息)之前,用户可能已超出其配额.
您可以使用传统quota命令查看NFS环境(例如,挂载了ZFS文件系统)中的用户配额.
不带任何选项的quota命令仅显示是否超出用户配额的输出信息.
例如:#zfssetuserquota@student1=10mstudents/compsci#zfsuserspacestudents/compsciTYPENAMEUSEDQUOTAPOSIXUserroot350MnonePOSIXUserstudent1550M10M#quotastudent1Blocklimitreachedon/students/compsci如果重置用户配额,而且不再超出配额限制,则可以使用quota-v命令查看用户的配额.
例如:设置ZFS配额和预留空间156在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zfssetuserquota@student1=10GBstudents/compsci#zfsuserspacestudents/compsciTYPENAMEUSEDQUOTAPOSIXUserroot350MnonePOSIXUserstudent1550M10G#quotastudent1#quota-vstudent1Diskquotasforstudent1(uid102):Filesystemusagequotalimittimeleftfilesquotalimittimeleft/students/compsci5632871048576010485760设置ZFS文件系统的预留空间ZFS预留空间是从池中分配的保证可供数据集使用的磁盘空间.
因此,如果磁盘空间当前在池中不可用,则不能为数据集预留该空间.
所有未占用的预留空间的总量不能超出池中未使用的磁盘空间量.
通过使用zfsset和zfsget命令可以设置和显示ZFS预留空间.
例如:#zfssetreservation=5Gtank/home/bill#zfsgetreservationtank/home/billNAMEPROPERTYVALUESOURCEtank/home/billreservation5Glocal预留空间可能会影响zfslist命令的输出.
例如:#zfslist-rtank/homeNAMEUSEDAVAILREFERMOUNTPOINTtank/home5.
00G61.
9G37K/tank/hometank/home/bill31K66.
9G31K/tank/home/billtank/home/jeff337K10.
0G306K/tank/home/jefftank/home/lori547K61.
9G547K/tank/home/loritank/home/mark31K61.
9G31K/tank/home/mark请注意,tank/home使用的磁盘空间为5GB,但tank/home及其后代引脚的总空间量远远小于5GB.
已用空间反映了为tank/home/bill预留的空间.
预留空间计入父文件系统的已用磁盘空间内,并将计入父文件系统的配额或预留空间,或同时计入这两者中.
#zfssetquota=5Gpool/filesystem#zfssetreservation=10Gpool/filesystem/user1cannotsetreservationfor'pool/filesystem/user1':sizeisgreaterthanavailablespace只要池中有未预留的空间可用,并且数据集的当前使用率低于其配额,数据集便能使用比其预留空间更多的磁盘空间.
数据集不能占用为其他数据集预留的磁盘空间.
预留空间无法累积.
也就是说,第二次调用zfsset来设置预留空间时,不会将该数据集的预留空间添加到现有预留空间中,而是使用第二个预留空间替换第一个预留空间.
例如:加密ZFS文件系统第5章管理OracleSolarisZFS文件系统157#zfssetreservation=10Gtank/home/bill#zfssetreservation=5Gtank/home/bill#zfsgetreservationtank/home/billNAMEPROPERTYVALUESOURCEtank/home/billreservation5Glocal可通过设置refreservation预留空间来保证用于数据集的磁盘空间,该空间不包括快照和克隆使用的磁盘空间.
此预留空间计算在父数据集的使用空间内,并会针对父数据集的配额和预留空间进行计数.
例如:#zfssetrefreservation=10gprofs/prof1#zfslistNAMEUSEDAVAILREFERMOUNTPOINTprofs10.
0G23.
2G19K/profsprofs/prof110G33.
2G18K/profs/prof1还可以对同一数据集设置预留空间,以保证数据集空间和快照空间.
例如:#zfssetreservation=20gprofs/prof1#zfslistNAMEUSEDAVAILREFERMOUNTPOINTprofs20.
0G13.
2G19K/profsprofs/prof110G33.
2G18K/profs/prof1常规的预留空间计算在父级的使用空间内.
在上例中,zfslist输出显示两个配额中的较小者(10GB与20GB相比较小).
要查看两个配额的值,请使用zfsget命令.
例如:#zfsgetreservation,refreservprofs/prof1NAMEPROPERTYVALUESOURCEprofs/prof1reservation20Glocalprofs/prof1refreservation10Glocal如果设置了refreservation,则仅当在此预留空间之外有足够的未预留池空间来容纳数据集中的当前引用字节数时,才允许使用快照.
加密ZFS文件系统加密是对数据进行编码以实现保密性的过程,数据所有者需要使用密钥才能访问已编码的数据.
使用ZFS加密的优点如下所述:ZFS加密与ZFS命令集相集成.
与其他ZFS操作一样,加密操作(例如密钥更改和重建密钥)是联机执行的.
您可以使用现有的存储池,只要对它们进行了升级.
可以灵活地加密特定的文件系统.
在CCM和GCM操作模式下,使用密钥长度为128、192和256的AES(AdvancedEncryptionStandard,高级加密标准)对数据进行加密.
加密ZFS文件系统158在OracleSolaris11.
2中管理ZFS文件系统2014年12月ZFS加密使用OracleSolaris加密框架,该框架自动允许它访问加密算法的任何可用硬件加速或优化的软件实现.
当前,您无法对ZFS根文件系统或其他OS组件(例如/var目录)进行加密,即使它是单独的文件系统也是如此.
ZFS加密可由后代文件系统继承.
如果向一般用户分配了create、mount、keysource、checksum以及encryption权限,则该用户可以创建加密的文件以及管理密钥操作.
可以在创建ZFS文件系统时设置加密策略,但是无法更改该策略.
例如,在启用了加密属性的情况下创建了tank/home/darren文件系统.
缺省的加密策略是提示您输入口令短语,口令短语的长度必须至少为8个字符.
#zfscreate-oencryption=ontank/home/darrenEnterpassphrasefor'tank/home/darren':xxxxxxxEnteragain:xxxxxxxx确认文件系统已启用加密.
例如:#zfsgetencryptiontank/home/darrenNAMEPROPERTYVALUESOURCEtank/home/darrenencryptiononlocal当文件系统的加密值为on时,缺省的加密算法为aes-128-ccm.
包装密钥用于加密实际的数据加密密钥.
如上例所示,在创建加密的文件系统时,会将包装密钥从zfs命令传递到内核.
包装密钥位于一个文件(采用raw或hex格式)中,或者派生自口令短语.
包装密钥的格式和位置是在keysource属性中指定的,如下所示:keysource=format,location格式为下列值之一:raw-原始的密钥字节hex-十六进制密钥字符串passphrase-用以生成密钥的字符串位置为下列值之一:prompt-创建或挂载文件系统时提示您输入密钥或口令短语file:///filename-密钥文件或口令短语文件在文件系统中的位置pkcs11-描述PKCS#11令牌中密钥或口令短语位置的URIhttps://location-密钥文件或口令短语文件在安全服务器上的位置.
不建议使用此方法以明文形式传输密钥信息.
根据在keysource属性的格式部分中请求的内容,对URL执行GET可仅返回密钥值或口令短语.
对keysource使用https://定位符时,服务器提供的证书必须是libcurl和OpenSSL信任的证书.
将自己的信任锚点证书或自签名证书添加到/etc/加密ZFS文件系统第5章管理OracleSolarisZFS文件系统159openssl/certs下的证书库中.
将PEM格式证书放在/etc/certs/CA目录下并运行以下命令:#svcadmrefreshca-certificates如果keysource格式为passphrase,则包装密钥派生自口令短语.
否则,keysource属性值指向实际的包装密钥,为原始字节或十六进制格式.
您可以指定口令短语存储在文件中,或者存储在提示输入的原始字节流中,这可能仅适合于编写脚本.
如果文件系统的keysource属性值标识passphrase,则包装密钥派生自口令短语(使用PKCS#5PBKD2和按文件系统随机生成的salt).
这意味着,相同的口令短语在后代文件系统上使用时可生成不同的包装密钥.
文件系统的加密策略由后代文件系统继承,且不可删除.
例如:#zfssnapshottank/home/darren@now#zfsclonetank/home/darren@nowtank/home/darren-newEnterpassphrasefor'tank/home/darren-new':xxxxxxxEnteragain:xxxxxxxx#zfssetencryption=offtank/home/darren-newcannotsetpropertyfor'tank/home/darren-new':'encryption'isreadonly如果需要复制或迁移加密或未加密的ZFS文件系统,请注意以下要点:当前,不能将以未加密形式发送的数据集流接收为加密的流,即使接收池的数据集已启用加密.
可以使用以下命令将未加密的数据迁移到已启用加密的池/文件系统:cp-rfind|cpiotarrsync可以将复制的加密文件系统流接收到加密文件系统中,且数据保持加密状态.
有关更多信息,请参见例5-4"发送和接收加密的ZFS文件系统".
更改加密ZFS文件系统的密钥通过使用zfskey-c命令,可以更改加密文件系统的包装密钥.
必须首先已通过以下方式装入了现有的包装密钥:在引导时、通过显式装入文件系统密钥(zfskey-l)或者通过挂载文件系统(zfsmountfilesystem).
例如:#zfskey-ctank/home/darrenEnternewpassphrasefor'tank/home/darren':xxxxxxxxEnteragain:xxxxxxxx在以下示例中,更改了包装密钥,并更改了keysource属性值以指定包装密钥来自一个文件.
加密ZFS文件系统160在OracleSolaris11.
2中管理ZFS文件系统2014年12月#zfskey-c-okeysource=raw,file:///media/stick/keytank/home/darren通过使用zfskey-K命令,可以更改加密文件系统的数据加密密钥,但是新的加密密钥仅用于新写入的数据.
此功能可用来满足针对数据加密密钥的时限的NIST800-57准则.
例如:#zfskey-Ktank/home/darren在上面的示例中,数据加密密钥不可见,也不是由您直接管理的.
此外,您需要具有keychange委托才能执行密钥更改操作.
有以下加密算法可用:aes-128-ccm、aes-192-ccm、aes-256-ccmaes-128-gcm、aes-192-gcm、aes-256-gcmZFSkeysource属性标识用来包装文件系统数据加密密钥的密钥的格式和位置.
例如:#zfsgetkeysourcetank/home/darrenNAMEPROPERTYVALUESOURCEtank/home/darrenkeysourcepassphrase,promptlocalZFSrekeydate属性标识上次执行zfskey-K操作的日期.
例如:#zfsgetrekeydatetank/home/darrenNAMEPROPERTYVALUESOURCEtank/home/darrenrekeydateWedJul2516:542012local如果加密文件系统的creation和rekeydate属性具有相同的值,则表明从未通过zfskey-K操作为该文件系统重建密钥.
管理ZFS加密密钥您可以采用不同方式管理ZFS加密密钥,具体取决于您的需求,您既可以在本地系统上进行管理,也可以远程管理(如果需要一个中央位置).
本地-上述示例说明了包装密钥既可以是口令短语提示符,也可以是本地系统上文件中的存储的原始密钥.
远程-可以使用密钥集中管理系统(如Oracle密钥管理程序)或者使用支持对http或httpsURI的简单GET请求的Web服务远程存储密钥信息.
通过使用PKCS#11令牌,OracleSolaris系统可以访问Oracle密钥管理程序的密钥信息.
有关管理ZFS加密密钥的更多信息,请参见:http://www.
oracle.
com/technetwork/articles/servers-storage-admin/manage-zfs-encryption-1715034.
html有关使用Oracle密钥管理程序管理密钥信息的信息,请参见:http://docs.
oracle.
com/cd/E24472_02/加密ZFS文件系统第5章管理OracleSolarisZFS文件系统161委托ZFS密钥操作权限查看关于委托密钥操作的以下权限描述:通过使用zfskey-l和zfskey-u命令装入或卸载文件系统密钥需要key权限.
大多数情况下,还将需要mount权限.
通过使用zfskey-c和zfskey-K命令更改文件系统密钥需要keychange权限.
请考虑针对密钥使用(装入或卸载)和密钥更改授予单独的权限,这样您可以采用"两人"密钥操作模型.
例如,确定哪些用户可以使用密钥,哪些用户可以更改这些密钥.
或者,两种用户需要同时在场才能进行密钥更改.
此模型还允许您构建密钥契约系统.

hostio荷兰10Gbps带宽,10Gbps带宽,€5/月,最低配2G内存+2核+5T流量

成立于2006年的荷兰Access2.IT Group B.V.(可查:VAT: NL853006404B01,CoC: 58365400) 一直运作着主机周边的业务,当前正在对荷兰的高性能AMD平台的VPS进行5折优惠,所有VPS直接砍一半。自有AS208258,vps母鸡配置为Supermicro 1024US-TRT 1U,2*AMD Epyc 7452(64核128线程),16条32G D...

金山云:618年中促销,企业云服务器2核4G仅401.28元/年,827.64元/3年

金山云618年中促销活动正在进行中!金山云针对企业级新用户优惠力度比普通个人用户优惠力度要大,所以我们也是推荐企业新用户身份购买金山云企业级云服务器,尽量购买3年配置的,而不是限时秒杀活动中1年的机型。企业级用户购买金山云服务器推荐企业专区:云服务器N3 2核4G云服务器,1-5M带宽,827.64元/3年,性价比高,性能稳定!点击进入:金山云618年中促销活动目前,金山云基础型E1云服务器2核4...

Digital-vm80美元,1-10Gbps带宽日本/新加坡独立服务器

Digital-vm是一家成立于2019年的国外主机商,商家提供VPS和独立服务器租用业务,其中VPS基于KVM架构,提供1-10Gbps带宽,数据中心可选包括美国洛杉矶、日本、新加坡、挪威、西班牙、丹麦、荷兰、英国等8个地区机房;除了VPS主机外,商家还提供日本、新加坡独立服务器,同样可选1-10Gbps带宽,最低每月仅80美元起。下面列出两款独立服务器配置信息。配置一 $80/月CPU:E3-...

chmod用法为你推荐
嘉兴商标注册我想注册个商标怎么注册啊?陈嘉垣陈嘉桓是谁?嘀动网动网和爱动网各自的优势是什么?psbc.com95580是什么诈骗信息不点网址就安全吧!777k7.com怎么在这几个网站上下载图片啊www.777mu.com www.gangguan23.com网站检测请问,对网站进行监控检测的工具有哪些?百度指数词什么是百度指数www.se222se.com原来的www站到底222eee怎么了莫非不是不能222eee在收视com了,/?求解lcoc.toptop weenie 是什么?www.ijinshan.com驱动人生是电脑自带的还是要安装啊!?在哪里呢?没有找到
万网域名 广州服务器租用 南通服务器租用 hostigation bandwagonhost 香港cdn 轻博客 ubuntu更新源 一元域名 浙江独立 空间出租 512mb starry 中国域名 服务器论坛 阿里云手机官网 godaddy空间 789电视剧网 贵州电信 phpwind论坛 更多