在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

可设置的 ZFS 本机属性

可设置的本机属性是其值可同时进行检索和设置的属性。可设置的本机属性可以使用 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 属性

如果 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 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) 的分配,可能会将多个副本置于单个磁盘上。某个后续的满载磁盘故障可能会导致所有重复块 (ditto block) 都不可用。

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

dedup 属性

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

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

  1. 确定数据是否将受益于重复数据删除产生的空间节省。您可以运行 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。

  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 字节同时小于或等于 1 MB。更改文件系统的 recordsize 值仅影响之后创建的文件。现有文件不会受到影响。

此属性的缩写为 recsize。

share.smb 属性

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

当属性从 off 更改为 on 时,任何继承该属性的共享将使用其当前选项重新共享。此属性设置为 off 时,继承此属性的共享将会取消共享。有关使用 share.smb 属性的示例,请参见共享和取消共享 ZFS 文件系统

volsize 属性

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

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