可设置的本机属性是其值可同时进行检索和设置的属性。可设置的本机属性可以使用 zfs set 命令或 设置 ZFS 属性 命令进行设置,请分别参见Setting ZFS Properties和创建 ZFS 文件系统中的描述。除了配额和预留空间外,可设置的本机属性均可继承。有关配额的更多信息,请参见设置 ZFS 配额和预留空间。
有些可设置的本机属性特定于特殊类型的数据集。在这种情况下,Table 5–1 的说明部分会注明数据集类型。如果未明确注明,则表明属性适用于所有数据集类型: 文件系统、卷、克隆和快照。
下面列出了可设置的属性,Table 5–1 对其进行了描述。
aclinherit
有关详细说明,请参见ACL 属性。
aclmode
有关详细说明,请参见ACL 属性。
atime
canmount
casesensitivity
checksum
compression
copies
devices
dedup
encryption
exec
keysource
logbias
mlslabel
mountpoint
nbmand
normalization
primarycache
quota
readonly
recordsize
有关详细说明,请参见recordsize 属性。
refquota
refreservation
reservation
rstchown
secondarycache
share.smb
share.nfs
setuid
snapdir
version
vscan
utf8only
volsize
有关详细说明,请参见volsize 属性。
volblocksize
zoned
xattr
如果 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 意味着文件系统只能显式挂载,而不能自动挂载。
此属性指示文件系统使用的文件名匹配算法应当是 casesensitive、caseinsensitive,还是允许这两种匹配方式的组合 (mixed)。
对混合敏感性文件系统发出不区分大小写的匹配请求时,行为通常与纯正的不区分大小写的文件系统的预期行为相同。区别在于,在混合敏感性文件系统中可能存在以下情况:目录中的多个名称从区分大小写的角度来看是唯一的,但从不区分大小写的角度来看则不是唯一的。
例如,某个目录中可能包含文件 foo、Foo 和 FOO。如果请求对 foo 的任何可能形式(例如 foo、FOO、FoO、fOo 等)进行不区分大小写的匹配,则该匹配算法会选择三个现有文件之一作为匹配项。无法保证该算法到底选择哪个文件作为匹配项,但可以保证会选择同一文件作为 foo 的任何形式的匹配项。只要目录保持不变,被选作 foo、FOO、foO、Foo 等的不区分大小写匹配项的文件就始终相同。
utf8only、normalization 和 casesensitivity 属性还提供了可以通过使用 ZFS 委托管理指定给非特权用户的新权限。有关更多信息,请参见授予 ZFS 权限。
作为一项可靠性功能,如果可能,ZFS 文件系统元数据会在不同的磁盘中自动存储多次。此功能称为重复块 (ditto block)。
在此发行版中,还可以使用 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 用户数据的多个副本的优点如下:
通过支持所有 ZFS 配置从不可恢复的块读取故障(例如介质故障(一般称为位损坏))恢复来提高数据保留能力。
提供数据保护,即使只有一个磁盘可用。
允许您在存储池功能之外以每个文件系统为基础选择数据保护策略。
无意中创建了非冗余池时以及需要设置数据保留策略时,可能会考虑使用重复块 (ditto block)。
dedup 属性控制是否从文件系统中删除重复数据。如果文件系统启用了 dedup 属性,则会以同步方式删除重复的数据块。结果是仅存储唯一的数据,在文件之间共享通用组件。
在检查以下注意事项之前,不要在驻留于生产系统上的文件系统上启用 dedup 属性:
确定数据是否将受益于重复数据删除产生的空间节省。您可以运行 zdb –S 命令模拟在池上启用重复数据删除可能会节省的空间。此命令必须在静默池上运行。如果您的数据不是可进行重复数据删除的,则启用 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。
请确保系统具有足够的内存来支持重复数据删除。
每个核心中重复数据删除表项约为 320 字节
用分配的块数乘以 320。例如:
in-core DDT size = 2.63M x 320 = 841.60M
当重复数据删除表可以完全装入内存时,重复数据删除的性能最佳。如果不得不将重复数据删除表写入磁盘,则性能将降低。例如,如果系统不满足上述内存要求,则删除启用了 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 属性来加密 ZFS 文件系统。有关更多信息,请参见加密 ZFS 文件系统。
recordsize 属性为文件系统中的文件指定建议的块大小。
该属性专门设计用于对大小固定的记录中的文件进行访问的数据库工作负荷。ZFS 会根据为典型的访问模式优化的内部算法来自动调整块大小。对于创建很大的文件但访问较小的随机块中的文件的数据库而言,这些算法可能不是最优的。将 recordsize 值指定为大于或等于数据库的记录大小的值可以显著提高性能。强烈建议不要将该属性用于一般用途的文件系统,否则可能会对性能产生不利影响。指定的大小必须是 2 的若干次幂,并且必须大于或等于 512 字节同时小于或等于 1 MB。更改文件系统的 recordsize 值仅影响之后创建的文件。现有文件不会受到影响。
此属性的缩写为 recsize。
此属性通过 Oracle Solaris SMB 服务启用 ZFS 文件系统的共享,并标识要使用的选项。
当属性从 off 更改为 on 时,任何继承该属性的共享将使用其当前选项重新共享。此属性设置为 off 时,继承此属性的共享将会取消共享。有关使用 share.smb 属性的示例,请参见共享和取消共享 ZFS 文件系统。
volsize 属性指定卷的逻辑大小。缺省情况下,创建卷会产生相同大小的预留空间。对 volsize 的任何更改都会反映为对预留空间的等效更改。这些检查用来防止用户产生的意外行为。如果卷包含的空间比其声明可用的空间少,则会导致未定义的行为或数据损坏,具体取决于卷的使用方法。如果在卷的使用过程中更改卷大小,特别是在收缩大小时,也会出现上述影响。调整卷大小时,应该格外小心。
有关使用卷的更多信息,请参见ZFS 卷。