JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 管理:ZFS 文件系统     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  Oracle Solaris ZFS 与传统文件系统之间的差别

4.  管理 Oracle Solaris ZFS 存储池

5.  管理 ZFS 根池组件

6.  管理 Oracle Solaris ZFS 文件系统

管理 ZFS 文件系统(概述)

创建、销毁和重命名 ZFS 文件系统

创建 ZFS 文件系统

销毁 ZFS 文件系统

重命名 ZFS 文件系统

ZFS 属性介绍

ZFS 只读本机属性

used 属性

可设置的 ZFS 本机属性

canmount 属性

casesensitivity 属性

copies 属性

dedup 属性

encryption 属性

recordsize 属性

sharesmb 属性

volsize 属性

ZFS 用户属性

查询 ZFS 文件系统信息

列出基本 ZFS 信息

创建复杂的 ZFS 查询

管理 ZFS 属性

设置 ZFS 属性

继承 ZFS 属性

查询 ZFS 属性

查询用于编写脚本的 ZFS 属性

挂载 ZFS 文件系统

管理 ZFS 挂载点

自动挂载点

传统挂载点

挂载 ZFS 文件系统

使用临时挂载属性

取消挂载 ZFS 文件系统

共享和取消共享 ZFS 文件系统

传统的 ZFS 共享语法

新的 ZFS 共享语法

显示 ZFS 共享信息

ZFS 共享继承

更改 ZFS 共享

删除 ZFS 共享

非全局区域中的 ZFS 文件共享

新 ZFS 共享和传统共享命令摘要

解决 ZFS 共享问题

ZFS 共享迁移/转换问题

设置 ZFS 配额和预留空间

设置 ZFS 文件系统的配额

在 ZFS 文件系统中设置用户和组配额

设置 ZFS 文件系统的预留空间

加密 ZFS 文件系统

更改已加密的 ZFS 文件系统的密钥

委托 ZFS 密钥操作权限

挂载已加密的 ZFS 文件系统

ZFS 压缩、重复数据删除和加密属性之间的交互

加密 ZFS 文件系统的示例

迁移 ZFS 文件系统

如何将文件系统迁移到 ZFS 文件系统

ZFS 文件系统迁移故障排除

升级 ZFS 文件系统

7.  使用 Oracle Solaris ZFS 快照和克隆

8.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

9.  Oracle Solaris ZFS 委托管理

10.  Oracle Solaris ZFS 高级主题

11.  Oracle Solaris ZFS 故障排除和池恢复

12.  归档快照和根池恢复

13.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

ZFS 属性介绍

属性是用来对文件系统、卷、快照和克隆的行为进行控制的主要机制。除非另有说明,否则本节中阐述的属性适用于所有数据集类型。

属性分为两种类型:本机属性和用户定义的属性。本机属性用于提供内部统计信息或控制 ZFS 文件系统行为。此外,本机属性是可设置的或只读的。用户属性对 ZFS 文件系统行为没有影响,但可通过用户环境中有意义的方式来注释数据集。有关用户属性的更多信息,请参见ZFS 用户属性

大多数可设置的属性也是可继承的。可继承属性是这样的属性:如果为父文件系统设置了该属性,则该属性会向下传播给其所有后代。

所有可继承属性都有一个关联源,表明属性是如何获得的。属性的源可具有以下值:

local

表示属性是使用 zfs set 命令对数据集进行显式设置的,如设置 ZFS 属性中所述。

inherited from dataset-name

表示属性是从指定的祖先继承而来。

default

表示属性值不是继承而来或在本地设置。如果没有祖先具有属性源 local,则会使用此源。

下表介绍了只读的和可设置的本机 ZFS 文件系统属性。只读本机属性在表中注明为“只读属性”。此表中列出的所有其他本机属性均为可设置的属性。有关用户属性的信息,请参见ZFS 用户属性

表 6-1 ZFS 本机属性说明

属性名
类型
缺省值
说明
aclinherit
字符串
secure
控制创建文件和目录时继承 ACL 项的方法。该属性的值包括 discardnoallowsecurepassthrough。有关这些值的说明,请参见ACL 属性
aclmode
字符串
groupmask
控制在 chmod 操作过程中修改 ACL 项的方法。该属性的值包括 discardgroupmaskpassthrough。有关这些值的说明,请参见ACL 属性
atime
布尔值
on
控制文件被读取后是否更新该文件的访问时间。关闭此属性可避免在读取文件时产生写入流量,并可显著提高性能,但可能会使邮件程序和类似的实用程序相混淆。
available
数字
N/A
只读属性,用于标识可供某个文件系统及其所有子级使用的磁盘空间量,假定池中没有其他活动。由于磁盘空间是在池内共享的,因此可用空间会受到多种因素的限制,包括物理池大小、配额、预留空间和池内的其他数据集。

此属性的缩写为 avail

有关磁盘空间记帐的更多信息,请参见ZFS 磁盘空间记帐

canmount
布尔值
on
控制是否可以使用 zfs mount 命令挂载文件系统。在任意文件系统中均可设置该属性,该属性本身不可继承。不过,当此属性设置为 off 时,后代文件系统可以继承挂载点,但永远不会挂载文件系统本身。

当设置了 noauto 选项时,只能显式挂载和卸载文件系统。文件系统不会在创建或导入时自动挂载,也不能通过 zfs mount-a 命令挂载或通过 zfs unmount-a 命令卸载。

有关更多信息,请参见canmount 属性

casesensitivity
字符串
mixed
此属性指示文件系统使用的文件名匹配算法应当是 casesensitivecaseinsensitive,还是允许这两种匹配风格的组合 (mixed)。传统上,UNIX 和 POSIX 文件系统的文件名区分大小写。

此属性的值为 mixed 时表示文件系统对区分大小写和不区分大小写的匹配行为要求均可支持。当前,在支持混合行为的文件系统上,不区分大小写的匹配行为仅限于 Oracle Solaris SMB 服务器产品。有关使用 mixed 值的更多信息,请参见casesensitivity 属性

不管 casesensitivity 属性设置如何,在创建文件时,文件系统都会保留指定的名称的大小写。在创建文件系统后无法更改此属性。

checksum
字符串
on
控制用于验证数据完整性的校验和。缺省值为 on,这将自动选择合适的算法,当前算法为 fletcher4。该属性的值包括 on、off、fletcher2、fletcher4、sha256sha256+mac。值为 off 将禁用对用户数据的完整性检查。建议不要使用值 off
compression
字符串
off
对数据集启用或禁用压缩。该属性的值包括 onofflzjbgzipgzip- N。目前,将此属性设置为 lzjbgzipgzip-N 与将此属性设置为 on 具有相同的效果。在包含现有数据的文件系统中启用压缩将只压缩新数据。现有数据保持未压缩状态。

此属性的缩写为 compress

compressratio
数字
N/A
只读属性,用于标识针对数据集实现的压缩比例,表示为乘数。可通过 zfs set compression=on dataset 命令启用压缩。

根据所有文件的逻辑大小和引用的物理数据量计算此值。它包括通过使用 compression 属性实现的节省量。

copies
数字
1
设置每个文件系统的用户数据副本数。可用的值为 123。这些副本是对任何池级别冗余的补充。用户数据多个副本所使用的磁盘空间将计入相应的文件和数据集,并根据配额和预留空间进行计数。此外,启用多个副本时还会更新 used 属性。由于在现有文件系统中更改此属性仅影响新写入的数据,因此请考虑在创建文件系统时设置此属性。
creation
字符串
N/A
只读属性,用于标识创建数据集的日期和时间。
dedup
字符串
off
控制在 ZFS 文件系统中删除重复数据的功能。可能的值包括 onoffverifysha256[,verify]。针对重复数据删除的缺省校验和是 sha256

有关更多信息,请参见dedup 属性

devices
布尔值
on
控制是否可以打开文件系统中的设备文件。
encryption
布尔值
off
控制是否对文件系统进行加密。加密的文件系统意味着,数据已编码,文件系统所有者需要有密钥才能访问数据。
exec
布尔值
on
控制是否允许执行文件系统中的程序。另外,设置为 off 时,将不允许执行带有 PROT_EXECmmap(2) 调用。
keysource
字符串
none
标识对文件系统密钥进行封装的密钥的格式和位置。有效的属性值包括 rawhexpassphrase,promptfile。使用 zfs key -l 命令创建、挂载或装入文件系统时,必须提供该密钥。如果为新文件系统启用加密,则缺省的 keysourcepassphrase,prompt
keystatus
字符串
none
标识文件系统的加密密钥状态的只读属性。文件系统密钥的可用性由 availableunavailable 予以指示。对于没有启用加密的文件系统,则显示 none
logbias
字符串
latency
控制 ZFS 如何为此文件系统优化同步请求。如果 logbias 设置为 latency,ZFS 将使用池的不同日志设备(如有)低延迟地处理请求。如果 logbias 设置为 throughput,ZFS 将不使用池的不同日志设备。相反,ZFS 将优化同步操作,以提高池的全局吞吐量并有效使用资源。缺省值为 latency
mlslabel
字符串
提供一个敏感标签,用以确定是否可以在 Trusted Extensions 区域中挂载某个文件系统。如果有标签的文件系统与有标签的区域相符,则可以从有标签的区域挂载和访问该文件系统。缺省值为 none。仅当启用了 Trusted Extensions 且具有相应的特权时才能修改此属性。
mounted
布尔值
N/A
只读属性,用于指明文件系统、克隆或快照当前是否已挂载。该属性不适用于卷。此属性的值可以是 yesno
mountpoint
字符串
N/A
控制用于此文件系统的挂载点。当文件系统的 mountpoint 属性发生更改时,将取消挂载该文件系统以及继承挂载点的任何后代。如果新值为 legacy,则该文件系统和子级将保持取消挂载状态。否则,如果属性以前为 legacynone,或者该文件系统和子级在属性发生更改之前处于挂载状态,则会自动在新位置重新挂载它们。此外,任何共享文件系统都将取消共享,并在新位置进行共享。

有关使用该属性的更多信息,请参见管理 ZFS 挂载点

primarycache
字符串
all
控制在主高速缓冲存储器 (ARC) 中缓存的内容。可能的值包括 allnonemetadata。如果设置为 all,则用户数据和元数据都会被缓存。如果设置为 none,则用户数据和元数据都不会被缓存。如果设置为 metadata,则只有元数据会被缓存。如果在现有文件系统上设置这些属性,则根据这些属性的值仅缓存新 I/O。对某些数据集环境而言,不高速缓存用户数据可能会带来一些好处。您必须确定您的环境是否适合设置高速缓存属性。
nbmand
布尔值
off
控制在挂载文件系统时是否应使用 nbmand(非阻塞强制性)锁。此属性仅适用于 SMB 客户机。对此属性所做的更改只有在卸载文件系统并重新挂载后才有效。
normalization
字符串
此属性指示每次对两个文件名进行比较时,文件系统是否应对文件名执行 unicode 标准化,以及应使用哪种标准化算法。文件名在存储时始终保持未修改状态,并将其标准化作为任何比较进程的一部分。如果将此属性设置为 none 以外的合法值,并且不指定 utf8only 属性,则 utf8only 属性自动设置为 onnormalization 属性的缺省值为 none。在创建文件系统后无法更改此属性。
origin
字符串
N/A
克隆的文件系统或卷的只读属性,用于标识创建克隆所在的快照。只要克隆存在,便不能销毁克隆源(即使使用 -r-f 选项也是如此)。

非克隆文件系统具有 none 源。

quota
数字(或 none
none
限制文件系统及其后代可以占用的磁盘空间量。该属性可对已使用的磁盘空间量强制实施硬限制,包括后代(含文件系统和快照)占用的所有空间。对已有配额的文件系统的后代设置配额不会覆盖祖先的配额,但会施加额外的限制。不能对卷设置配额,因为 volsize 属性可用作隐式配额。

有关设置配额的信息,请参见设置 ZFS 文件系统的配额

rekeydate
字符串
N/A
只读属性,指示上次因对此文件系统执行 zfs key -Kzfs clone - K 操作而导致数据加密密钥发生更改的日期。如果未执行 rekey 操作,则此属性的值与 creation 日期相同。
readonly
布尔值
off
控制是否可以修改数据集。设置为 on 时,不能进行任何修改。

此属性的缩写为 rdonly

recordsize
数字
128K
为文件系统中的文件指定建议的块大小。

此属性的缩写为 recsize。有关详细说明,请参见recordsize 属性

referenced
数字
N/A
只读属性,用于标识数据集可访问的数据量,这些数据可能会也可能不会与池中的其他数据集共享。

创建快照或克隆时,首先会引用与创建该属性时所在的文件系统或快照相同的磁盘空间量,因为其内容相同。

此属性的缩写为 refer

refquota
数字(或 none)
none
设置数据集可以使用的磁盘空间量。此属性对使用的空间量强制实施硬限制。此硬限制不包括后代(如快照和克隆)所使用的磁盘空间。
refreservation
数字(或 none)
none
设置为数据集(不包括后代,如快照和克隆)预留的最小磁盘空间量。如果使用的磁盘空间量低于该值,则认为数据集正在使用 refreservation 指定的空间量。refreservation 预留空间计算在父数据集的已用磁盘空间内,并会针对父数据集的配额和预留空间进行计数。

如果设置了 refreservation,则仅当在此预留空间之外有足够的可用池空间来容纳数据集中的当前引用字节数时,才允许使用快照。

此属性的缩写为 refreserv

reservation
数字(或 none)
none
设置确保供某个文件系统及其后代使用的最小磁盘空间量。如果使用的磁盘空间量低于该值,则认为文件系统正在使用其预留空间指定的空间量。预留空间计入父文件系统的已用磁盘空间内,并将计入父文件系统的配额和预留空间。

此属性的缩写为 reserv

有关更多信息,请参见设置 ZFS 文件系统的预留空间

rstchown
布尔值
on
指示文件系统所有者是否可以准许文件所有权更改。缺省情况下禁止 chown 操作。当 rstchown 设置为 off 时,用户具有 PRIV_FILE_CHOWN_SELF 特权,可执行 chown 操作。
secondarycache
字符串
all
控制在二级高速缓存 (L2ARC) 中缓存的内容。可能的值包括 allnonemetadata。如果设置为 all,则用户数据和元数据都会被缓存。如果设置为 none,则用户数据和元数据都不会被缓存。如果设置为 metadata,则只有元数据会被缓存。
setuid
布尔值
on
控制文件系统中是否会标记 setuid 位。
shadow
字符串
None
将 ZFS 文件系统视为 URI 描述的文件系统的影子。数据将从 URI 标识的文件系统迁移到设置了该属性的影子文件系统。要实现完整迁移,要迁移的文件系统必须为只读的。
sharenfs
字符串
off
控制是否可以将某个 ZFS 文件系统发布为 NFS 共享。您也可以通过使用 zfs share 命令发布 ZFS 文件系统的 NFS 共享,通过使用 zfs unshare 命令取消发布 ZFS 文件系统的 NFS 共享。两种发布 NFS 共享的方法均需要事先设置 NFS 共享属性。有关设置 NFS 共享属性的信息,请参见 zfs set share 命令。

在更改 sharenfs 属性时,只有在此属性以前设置为 off 或在更改此属性前已发布了共享的情况下,才会使用已通过 zfs set share 命令设置的任何新选项重新发布文件系统共享及继承此属性的任何子项。如果新属性值是 off,则撤销发布文件系统共享。

有关共享 ZFS 文件系统的更多信息,请参见共享和取消共享 ZFS 文件系统

sharesmb
字符串
off
控制是否将某个 ZFS 文件系统发布为 SMB 共享。您也可以通过使用 zfs share 命令发布 ZFS 文件系统的 SMB 共享,通过使用 zfs unshare 命令取消发布 ZFS 文件系统的 SMB 共享。两种发布 SMB 共享的方法均需要事先设置 SMB 共享属性。有关设置 NFS 共享属性的信息,请参见 zfs set share 命令。
snapdir
字符串
hidden
控制 .zfs 目录在文件系统根目录中是隐藏还是可见。有关使用快照的更多信息,请参见ZFS 快照概述
sync
字符串
standard
确定文件系统的事务的同步行为。可能的值包括:
  • standard(缺省值),表示将同步文件系统事务(如 fsyncO_DSYNCO_SYNC 等)写入到意图日志 (intent log)。

  • always,确保写入每个文件系统事务并通过一个返回系统调用将其刷新到稳定的存储器。此值会导致显著的性能损失。

  • disabled,表示禁用同步请求。仅当下一次提交事务组时,才将文件系统事务提交到稳定的存储器,这可能会延迟好几秒钟。此值可提供最佳的性能,且没有损坏池的风险。


    注意

    注意 - disabled 值非常危险,因为 ZFS 会忽略应用程序的同步事务需求,例如数据库操作或 NFS 操作。在当前活动的根文件系统或 /var 文件系统上设置此值可能会导致意外行为、应用程序数据丢失或重放攻击的漏洞加重。只有完全了解所有相关风险时才能使用此值。


type
字符串
N/A
只读属性,用于将数据集类型标识为 filesystem(文件系统或克隆)、volumesnapshot
used
数字
N/A
只读属性,用于标识数据集及其所有后代占用的磁盘空间 量。

有关详细说明,请参见used 属性

usedbychildren
数字
off
只读属性,用于标识此数据集的子项占用的磁盘空间量;如果所有数据集子项都被销毁,将释放该空间。此属性的缩写为 usedchild
usedbydataset
数字
off
只读属性,用于标识数据集本身占用的磁盘空间量;如果在先销毁所有快照并删除所有 refreservation 预留空间后销毁数据集,将释放该空间。此属性的缩写为 usedds
usedbyrefreservation
数字
off
只读属性,用于标识针对数据集设置的 refreservation 占用的磁盘空间量;如果删除 refreservation,将释放该空间。此属性的缩写为 usedrefreserv
usedbysnapshots
数字
off
只读属性,用于标识数据集的快照占用的磁盘空间量。特别是,如果此数据集的所有快照都被销毁,将释放该磁盘空间。请注意,此值不是简单的快照 used 属性总和,因为多个快照可以共享空间。此属性的缩写为 usedsnap
version
数字
N/A
表示文件系统在磁盘上的版本,它与池版本无关。此属性只能设置为比支持的软件发行版所提供的版本更高的版本。有关更多信息,请参见 zfs upgrade 命令。
utf8only
布尔值
Off
此属性指示当文件名含有 UTF-8 字符代码集中不存在的字符时,文件系统是否应拒绝此类文件名。如果已将此属性显式设置为 off,则不允许显式设置 normalization 属性,也不允许将该属性设置为 noneutf8only 属性的缺省值为 off。在创建文件系统后无法更改此属性。
volsize
数字
N/A
可为卷指定卷的逻辑大小。

有关详细说明,请参见volsize 属性

volblocksize
数字
8 KB
可为卷指定卷的块大小。一旦写入卷后,块大小便不能更改,因此应在创建卷时设置块大小。卷的缺省块大小为 8 KB。范围位于 512 字节到 128 KB 之间的 2 的任意次幂都有效。

此属性的缩写为 volblock

vscan
布尔值
Off
控制打开和关闭常规文件时是否应为其扫描病毒。如果具有第三方病毒扫描软件,则除了启用此属性外,还必须启用病毒扫描服务才会执行病毒扫描。缺省值为 off(关闭)。
zoned
布尔值
N/A
指示是否已将文件系统添加至非全局区域。如果设置该属性,全局区域中将不会标记挂载点,因此 ZFS 在收到请求时不能挂载此类文件系统。首次安装区域时,会为添加的所有文件系统设置该属性。

有关将 ZFS 用于已安装的区域的更多信息,请参见在安装了区域的 Solaris 系统中使用 ZFS

xattr
布尔值
on
指明此文件系统是否启用 (on) 或禁用 (off) 扩展属性。

ZFS 只读本机属性

可以检索但无法设置只读本机属性。只读本机属性不可继承。有些本机属性特定于特殊类型的数据集。在这种情况下,表 6-1 的说明部分会注明数据集类型。

下面列出了只读本机属性,表 6-1 对其进行了描述。

有关磁盘空间记帐(包括 usedreferencedavailable 属性)的更多信息,请参见ZFS 磁盘空间记帐

used 属性

used 属性是一个只读属性,表明此数据集及其所有后代占用的磁盘空间量。可根据此数据集的配额和预留空间来检查该值。使用的磁盘空间不包括数据集的预留空间,但会考虑任何后代数据集的预留空间。数据集占用其父级的磁盘空间量以及以递归方式销毁该数据集时所释放的磁盘空间量应为其使用空间和预留空间的较大者。

创建快照时,其磁盘空间最初在快照与文件系统之间进行共享,还可能是与以前的快照进行共享。随着文件系统的变化,以前共享的磁盘空间将供快照专用,并会计算在快照的使用空间内。快照使用的磁盘空间会将其专用数据所占空间计算在内。此外,删除快照可增加其他快照专用(和使用)的磁盘空间量。有关快照和空间问题的更多信息,请参见空间不足行为

已用磁盘空间量、可用磁盘空间量以及引用磁盘空间量并不包括暂挂更改。通常,暂挂更改仅占用几秒钟的时间。使用 fsync(3c)O_SYNC 功能提交对磁盘的更改,不一定可以保证磁盘空间使用情况信息会立即更新。

使用 zfs list -o space 命令,可以显示 usedbychildrenusedbydatasetusedbyrefreservationusedbysnapshots 属性信息。这些属性将 used 属性细分为后代占用的磁盘空间。有关更多信息,请参见表 6-1

可设置的 ZFS 本机属性

可设置的本机属性是其值可同时进行检索和设置的属性。可设置的本机属性可以使用 zfs set 命令或 zfs create 命令进行设置,请分别参见设置 ZFS 属性创建 ZFS 文件系统中的描述。除了配额和预留空间外,可设置的本机属性均可继承。有关配额和预留空间的更多信息,请参见设置 ZFS 配额和预留空间

有些可设置的本机属性特定于特殊类型的数据集。在这种情况下,表 6-1 的说明部分会注明数据集类型。如果未明确注明,则表明属性适用于所有数据集类型: 文件系统、卷、克隆和快照。

下面列出了可设置的属性,表 6-1 对其进行了描述。

canmount 属性

如果 canmount 属性设置为 off,则不能使用 zfs mountzfs mount -a 命令挂载文件系统。将此属性设置为 off 与将 mountpoint 属性设置为 none 的效果相似,区别在于文件系统仍有一个可以继承的普通 mountpoint 属性。例如,可将该属性设置为 off,为后代文件系统建立可继承属性,但父文件系统本身永远不会挂载,也无法供用户访问。在这种情况下,父文件系统将充当一个容器,这样便可以在容器中设置属性,但容器本身永远不可访问。

在以下示例中,创建了 userpool 并将其 canmount 属性设置为 off。将后代用户文件系统的挂载点设置为一个公共挂载点 /export/home。在父文件系统中设置的属性可由后代文件系统继承,但永远不会挂载父文件系统本身。

# zpool create userpool mirror c0t5d0 c1t6d0
# zfs set canmount=off userpool
# zfs set mountpoint=/export/home userpool
# zfs set compression=on userpool
# zfs create userpool/user1
# zfs create userpool/user2
# zfs mount
userpool/user1                  /export/home/user1
userpool/user2                  /export/home/user2

canmount 属性设置为 noauto 意味着文件系统只能显式挂载,而不能自动挂载。

casesensitivity 属性

此属性指示文件系统使用的文件名匹配算法应当是 casesensitivecaseinsensitive,还是允许这两种匹配风格的组合 (mixed)。

混合敏感性文件系统发出不区分大小写的匹配请求时,行为通常与纯正的不区分大小写的文件系统的预期行为相同。区别在于,在混合敏感性文件系统中可能存在以下情况:目录中的多个名称从区分大小写的角度来看是唯一的,但从不区分大小写的角度来看则不是唯一的。

例如,某个目录中可能包含文件 fooFooFOO。如果请求对 foo 的任何可能形式(例如 fooFOOFoOfOo 等)进行不区分大小写的匹配,则该匹配算法会选择三个现有文件之一作为匹配项。无法保证该算法到底选择哪个文件作为匹配项,但可以保证会选择同一文件作为 foo 的任何形式的匹配项。只要目录保持不变,被选作 fooFOOfoOFoo 等的不区分大小写匹配项的文件就始终相同。

utf8onlynormalizationcasesensitivity 属性还提供了可以通过使用 ZFS 委托管理指定给非特权用户的新权限。有关更多信息,请参见委托 ZFS 权限

copies 属性

作为一项可靠性功能,如果可能,ZFS 文件系统元数据会在不同的磁盘中自动存储多次。此功能称为重复块 (ditto blocks)

在此发行版中,还可以使用 zfs set copies 命令存储用户数据的多个副本,这些副本也按文件系统进行存储。例如:

# zfs set copies=2 users/home
# zfs get copies users/home
NAME        PROPERTY  VALUE       SOURCE
users/home  copies    2           local

可用的值为 1、2 或 3。缺省值为 1。除了任何池级别的冗余以外,这些副本还用于诸如镜像或 RAID-Z 之类的配置中。

存储 ZFS 用户数据的多个副本的优点如下:


注 - 根据存储池中重复块 (ditto blocks) 的分配,可能会将多个副本置于单个磁盘上。某个后续的满载磁盘故障可能会导致所有重复块 (ditto blocks) 都不可用。


无意中创建了非冗余池时以及需要设置数据保留策略时,可能会考虑使用重复块 (ditto blocks)。

dedup 属性

dedup 属性控制是否从文件系统中删除重复数据。如果文件系统启用了 dedup 属性,则会以同步方式删除重复的数据块。结果是仅存储唯一的数据,在文件之间共享通用组件。

在检查以下注意事项之前,不要在驻留于生产系统上的文件系统上启用 dedup 属性:

  1. 确定数据是否将受益于重复数据删除产生的空间节省。如果您的数据不是可进行重复数据删除的,则启用 dedup 没有意义。例如:

    # zdb -S tank
    Simulated DDT histogram:
    bucket              allocated                       referenced          
    ______   ______________________________   ______________________________
    refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
    ------   ------   -----   -----   -----   ------   -----   -----   -----
         1    2.27M    239G    188G    194G    2.27M    239G    188G    194G
         2     327K   34.3G   27.8G   28.1G     698K   73.3G   59.2G   59.9G
         4    30.1K   2.91G   2.10G   2.11G     152K   14.9G   10.6G   10.6G
         8    7.73K    691M    529M    529M    74.5K   6.25G   4.79G   4.80G
        16      673   43.7M   25.8M   25.9M    13.1K    822M    492M    494M
        32      197   12.3M   7.02M   7.03M    7.66K    480M    269M    270M
        64       47   1.27M    626K    626K    3.86K    103M   51.2M   51.2M
       128       22    908K    250K    251K    3.71K    150M   40.3M   40.3M
       256        7    302K     48K   53.7K    2.27K   88.6M   17.3M   19.5M
       512        4    131K   7.50K   7.75K    2.74K    102M   5.62M   5.79M
        2K        1      2K      2K      2K    3.23K   6.47M   6.47M   6.47M
        8K        1    128K      5K      5K    13.9K   1.74G   69.5M   69.5M
     Total    2.63M    277G    218G    225G    3.22M    337G    263G    270G
    
    dedup = 1.20, compress = 1.28, copies = 1.03, dedup * compress / copies = 1.50

    如果估计的重复数据删除比大于 2,则重复数据删除可能会带来空间节省。

    在上述示例中,重复数据删除比小于 2,因此建议不要启用 dedup。

  2. 请确保系统具有足够的内存来支持重复数据删除。

    • 每个核心中重复数据删除表项约为 320 字节

    • 用分配的块数乘以 320。例如:

      in-core DDT size = 2.63M x 320 = 841.60M
  3. 当重复数据删除表可以完全装入内存时,重复数据删除的性能最佳。如果不得不将重复数据删除表写入磁盘,则性能将降低。例如,如果系统不满足上述内存要求,则删除启用了 dedup 的大文件系统将大大降低系统性能。

在启用 dedup 时,dedup 校验和算法会覆盖 checksum 属性。将属性值设置为 verify 等效于指定 sha256,verify。如果将属性设置为 verify,且两个块具有相同的签名,则 ZFS 会与现有块进行逐字节比较,以确保内容完全相同。

可以按文件系统启用此属性。例如:

# zfs set dedup=on tank/home

可以使用 zfs get 命令确定是否设置了 dedup 属性。

虽然重复数据删除是作为文件系统属性设置的,但是它在池范围内起作用。例如,您可以确定重复数据删除比。例如:

# zpool list tank
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   136G  55.2G  80.8G    40%  2.30x  ONLINE  -

DEDUP 列指示已发生了多少重复数据删除。如果在任何文件系统上都没有启用 dedup 属性,或者如果刚刚在文件系统上启用了 dedup 属性,则 DEDUP 比是 1.00x

可以使用 zpool get 命令确定 dedupratio 属性的值。例如:

# zpool get dedupratio export
NAME   PROPERTY    VALUE  SOURCE
rpool  dedupratio  3.00x  -

此池属性说明此池已实现了多少重复数据删除。

encryption 属性

可以使用 encryption 属性来加密 ZFS 文件系统。有关更多信息,请参见加密 ZFS 文件系统

recordsize 属性

recordsize 属性为文件系统中的文件指定建议的块大小。

该属性专门设计用于对大小固定的记录中的文件进行访问的数据库工作负荷。ZFS 会根据为典型的访问模式优化的内部算法来自动调整块大小。对于创建很大的文件但访问较小的随机块中的文件的数据库而言,这些算法可能不是最优的。将 recordsize 值指定为大于或等于数据库的记录大小的值可以显著提高性能。强烈建议不要将该属性用于一般用途的文件系统,否则可能会对性能产生不利影响。指定的大小必须是 2 的若干次幂,并且必须大于或等于 512 字节同时小于或等于 128 KB。更改文件系统的 recordsize 值仅影响之后创建的文件。现有文件不会受到影响。

此属性的缩写为 recsize

sharesmb 属性

此属性通过 Oracle Solaris SMB 服务启用 ZFS 文件系统的共享,并标识要使用的选项。

由于 SMB 共享需要一个资源名称,因此将基于文件系统名称构建唯一的资源名称。构建的名称是文件系统名称的副本,但是,对于文件系统名称中的字符,如果在资源名称中不合法,将被替换为下划线字符 (_)。此外,还支持伪属性 name,以便您用某个特定名称替换文件系统名称。然后,在继承时会使用该特定名称替换前缀文件系统。

例如,如果将文件系统 data/home/john 设置为 name=john,则 data/home/john 的资源名称是 john。如果存在一个子文件系统 data/home/john/backups,则其资源名称是 john_backups。如果为某个文件系统更改了 sharesmb 属性,除非该属性之前设置为 off,或者该文件系统和继承该属性的任何子代在该属性更改之前已是共享的,否则不会使用新选项重新共享这些文件系统。如果新属性设置为 off,则会取消共享这些文件系统。

有关使用 sharesmb 属性的示例,请参见共享和取消共享 ZFS 文件系统

volsize 属性

volsize 属性指定卷的逻辑大小。缺省情况下,创建卷会产生相同大小的预留空间。对 volsize 的任何更改都会反映为对预留空间的等效更改。这些检查用来防止用户产生的意外行为。如果卷包含的空间比其声明可用的空间少,则会导致未定义的行为或数据损坏,具体取决于卷的使用方法。如果在卷的使用过程中更改卷大小,特别是在收缩大小时,也会出现上述影响。调整卷大小时,应该格外小心。

尽管并不建议,但可以通过为 -zfs create -V 指定 s 标志或在创建卷后更改预留空间来创建稀疏卷。稀疏卷指预留空间与卷大小不相等的卷。对于稀疏卷,预留空间中不会反映对 volsize 的更改。

有关使用卷的更多信息,请参见ZFS 卷

ZFS 用户属性

除了本机属性外,ZFS 还支持任意用户属性。用户属性对 ZFS 行为没有影响,但可通过用户环境中有意义的信息来注释数据集。

用户属性名必须符合以下约定:

预期约定是属性名分为以下两个部分,但 ZFS 不强制使用此名称空间:

module:property

在程序中使用用户属性时,请对属性名的 module 部分使用反向 DNS 域名,以尽量避免两个独立开发的软件包将同一属性名用于不同用途。以 com.oracle. 开头的属性名保留供 Oracle Corporation 使用。

用户属性的值必须符合以下约定:

例如:

# zfs set dept:users=finance userpool/user1
# zfs set dept:users=general userpool/user2
# zfs set dept:users=itops userpool/user3

对属性执行操作的所有命令(如 zfs listzfs getzfs set 等)都可用来处理本机属性和用户属性。

例如:

zfs get -r dept:users userpool
NAME            PROPERTY    VALUE           SOURCE
userpool        dept:users  all             local
userpool/user1  dept:users  finance         local
userpool/user2  dept:users  general         local
userpool/user3  dept:users  itops           local

要清除某一用户属性,请使用 zfs inherit 命令。例如:

# zfs inherit -r dept:users userpool

如果任意父数据集中均未定义该属性,则会将其完全删除。