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 项的方法。该属性的值包括 discard、noallow、secure 和 passthrough。有关这些值的说明,请参见ACL 属性。

aclmode

字符串 

groupmask

控制在 chmod 操作过程中修改 ACL 项的方法。该属性的值包括 discard、groupmask 和 passthrough。有关这些值的说明,请参见ACL 属性。

atime

布尔值 

on

控制文件被读取后是否更新该文件的访问时间。关闭此属性可避免在读取文件时产生写入流量,并可显著提高性能,但可能会使邮件程序和类似的实用程序相混淆。

available

数字 

N/A 

只读属性,用于确定可供数据集及其所有子级使用的磁盘空间量,假定池中没有其他活动。由于磁盘空间是在池内共享的,因此可用空间会受到多种因素的限制,包括物理池大小、配额、预留空间和池内的其他数据集。

此属性的缩写为 avail。

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

canmount

布尔值 

on

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

设置 noauto 选项时,只能显式挂载和取消挂载数据集。数据集不会在创建或导入时自动挂载,也不能通过 zfs mount-a 命令挂载或通过 zfs unmount-a 命令取消挂载。

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

校验和

字符串 

on

控制用于验证数据完整性的校验和。缺省值为 on,这将自动选择合适的算法,当前算法为 fletcher4。该属性的值包括 on、off、fletcher2、fletcher4 和 sha256。值为 off 将禁用对用户数据的完整性检查。建议不要使用值 off。

compression

字符串 

off

对数据集启用或禁用压缩。该属性的值包括 on、off、lzjb、gzip 和 gzip- N。目前,将此属性设置为 lzjb、gzip 或 gzip-N 与将此属性设置为 on 具有相同的效果。在包含现有数据的文件系统中启用压缩将只压缩新数据。现有数据保持未压缩状态。

此属性的缩写为 compress。

compressratio

数字 

N/A 

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

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

copies

数字 

1

设置每个文件系统的用户数据副本数。可用的值为 1、2 或 3。这些副本是对任何池级别冗余的补充。用户数据多个副本所使用的磁盘空间将计入相应的文件和数据集,并根据配额和预留空间进行计数。此外,启用多个副本时还会更新 used 属性。由于在现有文件系统中更改此属性仅影响新写入的数据,因此请考虑在创建文件系统时设置此属性。

creation

字符串 

N/A 

只读属性,用于标识创建数据集的日期和时间。

devices

布尔值 

on

控制是否能打开文件系统中的设备文件。

exec

布尔值 

on

控制是否允许执行文件系统中的程序。另外,设置为 off 时,将不允许执行带有 PROT_EXEC 的 mmap(2) 调用。

mounted

布尔值 

N/A 

只读属性,用于指明文件系统、克隆或快照当前是否已挂载。该属性不适用于卷。此属性的值可以是 yes 或 no。

mountpoint

字符串 

N/A 

控制用于此文件系统的挂载点。当文件系统的 mountpoint 属性发生更改时,将取消挂载该文件系统以及继承挂载点的任何后代。如果新值为 legacy,则该文件系统和子级将保持取消挂载状态。否则,如果属性以前为 legacy 或 none,或者该文件系统和子级在属性发生更改之前处于挂载状态,则会自动在新位置重新挂载它们。此外,任何共享文件系统都将取消共享,并在新位 置进行共享。

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

primarycache

字符串 

all

控制在主高速缓冲存储器 (ARC) 中缓存的内容。可能的值包括 all、none 和 metadata。如果设置为 all,则用户数据和元数据都会被缓存。如果设置为 none,则用户数据和元数据都不会被缓存。如果设置为 metadata,则仅缓存元数据。

origin

字符串 

N/A 

克隆的文件系统或卷的只读属性,用于标识创建克隆所在的快照。只要克隆存在,便不能销毁克隆源(即使使用 -r 或 -f 选项也是如此)。

非克隆的文件系统的源为 none。

quota

数字(或 none)

none

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

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

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 文件系统的预留空间。

secondarycache

字符串 

all

控制在二级高速缓存 (L2ARC) 中缓存的内容。可能的值包括 all、none 和 metadata。如果设置为 all,则用户数据和元数据都会被缓存。如果设置为 none,则用户数据和元数据都不会被缓存。如果设置为 metadata,则仅缓存元数据。

setuid

布尔值 

on

控制文件系统中是否会标记 setuid 位。

shareiscsi

字符串 

off 

控制 ZFS 卷是否共享为 iSCSI 目标。该属性的值包括 on、off 和 type=disk。您可能希望对一个文件系统设置 shareiscsi=on,使得该文件系统中的所有 ZFS 卷的缺省设置为共享。但是,对一个文件系统设置此属性没有直接影响。

sharenfs

字符串 

off

控制文件系统是否可用于 NFS 中以及使用的选项。如果设置为 on,则会调用不带任何选项的 zfs share 命令。否则,将调用带有与该属性的内容等效的选项的 zfs share 命令。如果设置为 off,则使用传统的 share 和 unshare 命令以及 dfstab 文件来管理文件系统。

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

snapdir

字符串 

hidden

控制 .zfs 目录在文件系统根目录中是隐藏还是可见。有关使用快照的更多信息,请参见ZFS 快照概述。

type

字符串 

N/A 

只读属性,用于将数据集类型标识为 filesystem(文件系统或克隆)、volume 或 snapshot。

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 命令。

volsize

数字 

N/A 

可为卷指定卷的逻辑大小。

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

volblocksize

数字 

8 KB

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

此属性的缩写为 volblock。

zoned

布尔值 

N/A 

指明是否已将数据集添加至非全局区域。如果设置该属性,全局区域中将不会标记挂载点,因此 ZFS 在收到请求时不能挂载此类文件系统。首次安装区域时,会为添加的所有文件系统设置该属性。

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

xattr

布尔值 

on

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

ZFS 只读本机属性

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

下面列出了只读本机属性,表 6–1 对其进行了说明。

有关磁盘空间记帐(包括 used、referenced 和 available 属性)的更多信息,请参见ZFS 磁盘空间记帐。

used 属性

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

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

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

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

可设置的 ZFS 本机属性

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

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

下面列出了可设置的属性,表 6–1 对其进行了说明。

canmount 属性

如果 canmount 属性设置为 off,则不能使用 zfs mount 或 zfs 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 意味着数据集只能显式挂载,而不能自动挂载。Oracle Solaris 升级软件使用此设置,以便可在引导时只挂载那些属于活动引导环境 (boot environment) 的数据集。

recordsize 属性

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

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

此属性的缩写为 recsize。

volsize 属性

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

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

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

ZFS 用户属性

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

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

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


module:property

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

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

例如:


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

对属性执行操作的所有命令(如 zfs list、zfs get、zfs 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

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