Oracle Solaris ZFS 管理指南

管理 ZFS 属性

数据集属性通过 zfs 命令的 setinheritget 子命令来管理。

设置 ZFS 属性

可以使用 zfs set 命令修改任何可设置的数据集属性。或者,也可以使用 zfs create 命令在创建数据集时设置属性。有关可设置的数据集属性的列表,请参见可设置的 ZFS 本机属性

zfs set 命令采用 property=value 格式的属性/值序列,然后是数据集名称。zfs set 的每次调用只能设置或修改一个属性。

以下示例将 tank/homeatime 属性设置为 off


# zfs set atime=off tank/home

此外,任何文件系统属性均可在创建文件系统时设置。例如:


# zfs create -o atime=off tank/home

可以使用以下易于理解的后缀(按升序)指定数字属性值:BKMGTPEZ。其中任一后缀都可后跟可选的 b,用于表示字节,但 B 后缀除外,因为它已表示了字节。以下四个 zfs set 调用是等效的数字表达式,在 tank/home/marks 文件系统中将 quota 属性设置为值 50 GB:


# zfs set quota=50G tank/home/marks
# zfs set quota=50g tank/home/marks
# zfs set quota=50GB tank/home/marks
# zfs set quota=50gb tank/home/marks

非数字属性的值区分大小写,并且必须为小写字母,但 mountpointsharenfs 除外。这两个属性的值既可以包含大写字母,也可以包含小写字母。

有关 zfs set 命令的更多信息,请参见 zfs(1M)

继承 ZFS 属性

除非已对后代数据集显式设置了配额或预留空间,否则除了配额和预留空间外,所有可设置的属性都从父数据集继承各自的值。如果没有祖先为继承的属性设置显式值,则使用该属性的缺省值。可以使用 zfs inherit 命令清除属性值,从而促使从父数据集继承该值。

以下示例使用 zfs set 命令为 tank/home/bonwick 文件系统启用压缩。然后,使用 zfs inherit 清除 compression 属性,从而使该属性继承缺省值 off。由于 hometank 都未本地设置 compression 属性,因此会使用缺省值。如果两者都启用了压缩,则使用最直接的祖先中设置的值(在本示例中为 home)。


# zfs set compression=on tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression   on                      local
# zfs inherit compression tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression  off                      default

如果指定了 -r 选项,则会以递归方式应用 inherit 子命令。在以下示例中,该命令将使 tank/home 以及它可能具有的所有后代都继承 compression 属性的值:


# zfs inherit -r compression tank/home

注 –

请注意,使用 -r 选项会清除所有后代数据集的当前属性设置。


有关 zfs inherit 命令的更多信息,请参见 zfs(1M)

查询 ZFS 属性

查询属性值的最简单方法是使用 zfs list 命令。有关更多信息,请参见列出基本 ZFS 信息。但是,对于复杂查询和脚本编写,请使用 zfs get 命令以自定义格式提供更详细的信息。

可以使用 zfs get 命令检索任何数据集属性。以下示例说明如何在数据集中检索单个属性值:


# zfs get checksum tank/ws
NAME             PROPERTY       VALUE                      SOURCE
tank/ws          checksum       on                         default

第四栏 SOURCE 表示此属性值的来源。下表定义可能的源值。

表 6–3 可能的 SOURCE 值 (zfs get 命令)

源值 

说明 

default

从来不为数据集或其任何祖先显式设置此属性值。使用的是该属性的缺省值。 

inherited from dataset-name

该属性值继承自 dataset-name 所指定的父数据集。

local

使用 zfs set 可为此数据集显式设置该属性值。

temporary

该属性值是使用 zfs mount -o 选项设置的,并且仅在挂载期间有效。有关临时挂载点属性的更多信息,请参见使用临时挂载属性

-(无) 

此属性为只读。其值由 ZFS 生成。 

可以使用特殊关键字 all 检索所有数据集属性值。以下示例使用 all 关键字:


# zfs get all tank/home
NAME       PROPERTY              VALUE                  SOURCE
tank/home  type                  filesystem             -
tank/home  creation              Tue Jun 29 11:44 2010  -
tank/home  used                  21K                    -
tank/home  available             66.9G                  -
tank/home  referenced            21K                    -
tank/home  compressratio         1.00x                  -
tank/home  mounted               yes                    -
tank/home  quota                 none                   default
tank/home  reservation           none                   default
tank/home  recordsize            128K                   default
tank/home  mountpoint            /tank/home             default
tank/home  sharenfs              off                    default
tank/home  checksum              on                     default
tank/home  compression           off                    default
tank/home  atime                 on                     default
tank/home  devices               on                     default
tank/home  exec                  on                     default
tank/home  setuid                on                     default
tank/home  readonly              off                    default
tank/home  zoned                 off                    default
tank/home  snapdir               hidden                 default
tank/home  aclmode               groupmask              default
tank/home  aclinherit            restricted             default
tank/home  canmount              on                     default
tank/home  shareiscsi            off                    default
tank/home  xattr                 on                     default
tank/home  copies                1                      default
tank/home  version               4                      -
tank/home  utf8only              off                    -
tank/home  normalization         none                   -
tank/home  casesensitivity       sensitive              -
tank/home  vscan                 off                    default
tank/home  nbmand                off                    default
tank/home  sharesmb              off                    default
tank/home  refquota              none                   default
tank/home  refreservation        none                   default
tank/home  primarycache          all                    default
tank/home  secondarycache        all                    default
tank/home  usedbysnapshots       0                      -
tank/home  usedbydataset         21K                    -
tank/home  usedbychildren        0                      -
tank/home  usedbyrefreservation  0                      -
tank/home  logbias               latency                default

注 –

casesensitivitynbmandnormalizationsharesmbutf8onlyvscan 属性在 Oracle Solaris 10 发行版中并不能全面使用,因为 Oracle Solaris 10 发行版不支持 Oracle Solaris SMB 服务。


通过 zfs get-s 选项,可以按源类型指定要显示的属性。通过此选项可获取一个逗号分隔列表,用于指明所需的源类型。仅会显示具有指定源类型的属性。有效的源类型包括 localdefaultinheritedtemporarynone。以下示例显示了已对 pool 本地设置的所有属性。


# zfs get -s local all pool
NAME             PROPERTY      VALUE                      SOURCE
pool             compression   on                         local

以上任何选项均可与 -r 选项结合使用,以便以递归方式显示指定数据集的所有子级的指定属性。在以下示例中,以递归方式显示了 tank 中所有数据集的所有临时属性:


# zfs get -r -s temporary all tank
NAME             PROPERTY       VALUE                      SOURCE
tank/home          atime          off                      temporary
tank/home/bonwick  atime          off                      temporary
tank/home/marks    atime          off                      temporary

可以在不指定目标文件系统的情况下使用 zfs get 命令查询属性值,这意味着该命令对所有池或文件系统有效。例如:


# zfs get -s local all
tank/home               atime          off                    local
tank/home/bonwick       atime          off                    local
tank/home/marks         quota          50G                    local

有关 zfs get 命令的更多信息,请参见 zfs(1M)

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

zfs get 命令支持为编写脚本而设计的 -H-o 选项。可以使用 -H 选项省去标头信息并用 Tab 字符替换空格。使用一致的空格可使数据便于分析。可以使用 -o 选项以如下方式自定义输出:

以下示例说明如何使用 -zfs get-Ho 选项来检索单个值:


# zfs get -H -o value compression tank/home
on

-p 选项会将数字值报告为精确值。例如,1MB 将报告为 1000000。此选项可按如下方式使用:


# zfs get -H -o value -p used tank/home
182983742

可以结合使用 -r 选项与前述任何选项,以递归方式为所有后代检索请求值。以下示例使用 -H-o-r 选项为 export/home 及其后代检索数据集名称和 used 属性值,同时忽略标题输出:


# zfs get -H -o name,value -r used export/home
export/home             5.57G
export/home/marks       1.43G
export/home/maybee      2.15G