Solaris ZFS Administration Guide
Previous Next

Managing ZFS Properties

Dataset properties are managed through the zfs command's set, inherit, and get subcommands.

Setting ZFS Properties

You can use the zfs set command to modify any settable dataset property. Or, you can use the zfs create command to set properties when the dataset is created. For a list of settable dataset properties, see Settable ZFS Native Properties. The zfs set command takes a property/value sequence in the format of property=value and a dataset name.

The following example sets the atime property to off for tank/home. Only one property can be set or modified during each zfs set invocation.

# zfs set atime=off tank/home

In addition, any file system property can be set when the file system is created. For example:

# zfs create -o atime=off tank/home

You can specify numeric properties by using the following easy to understand suffixes (in order of magnitude): BKMGTPEZ. Any of these suffixes can be followed by an optional b, indicating bytes, with the exception of the B suffix, which already indicates bytes. The following four invocations of zfs set are equivalent numeric expressions indicating that the quota property be set to the value of 50 Gbytes on the tank/home/marks file system:

# 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

Values of non-numeric properties are case-sensitive and must be lowercase, with the exception of mountpoint and sharenfs. The values of these properties can have mixed upper and lower case letters.

For more information about the zfs set command, see zfs(1M).

Inheriting ZFS Properties

All settable properties, with the exception of quotas and reservations, inherit their value from their parent, unless a quota or reservation is explicitly set on the child. If no ancestor has an explicit value set for an inherited property, the default value for the property is used. You can use the zfs inherit command to clear a property setting, thus causing the setting to be inherited from the parent.

The following example uses the zfs set command to turn on compression for the tank/home/bonwick file system. Then, zfs inherit is used to unset the compression property, thus causing the property to inherit the default setting of off. Because neither home nor tank have the compression property set locally, the default value is used. If both had compression on, the value set in the most immediate ancestor would be used (home in this example).

# 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

The inherit subcommand is applied recursively when the -r option is specified. In the following example, the command causes the value for the compression property to be inherited by tank/home and any descendents it might have.

# zfs inherit -r compression tank/home

Note - Be aware that the use of the -r option clears the current property setting for all descendent datasets.


For more information about the zfs command, see zfs(1M).

Querying ZFS Properties

The simplest way to query property values is by using the zfs list command. For more information, see Listing Basic ZFS Information. However, for complicated queries and for scripting, use the zfs get command to provide more detailed information in a customized format.

You can use the zfs get command to retrieve any dataset property. The following example shows how to retrieve a single property on a dataset:

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

The fourth column, SOURCE, indicates where this property value has been set from. The following table defines the meaning of the possible source values.

Table 5-3 Possible SOURCE Values (zfs get)

Source Value

Description

default

This property was never explicitly set for this dataset or any of its ancestors. The default value for this property is being used.

inherited from dataset-name

This property value is being inherited from the parent as specified by dataset-name.

local

This property value was explicitly set for this dataset by using zfs set.

temporary

This property value was set by using the zfs mount -o option and is only valid for the lifetime of the mount. For more information about temporary mount point properties, see Using Temporary Mount Properties.

- (none)

This property is a read-only property. Its value is generated by ZFS.

You can use the special keyword all to retrieve all dataset properties. The following example uses the all keyword to retrieve all existing dataset properties:

# zfs get all tank
NAME  PROPERTY         VALUE                  SOURCE
tank  type             filesystem             -
tank  creation         Wed Jan 23  9:57 2008  -
tank  used             120K                   -
tank  available        33.1G                  -
tank  referenced       24.0K                  -
tank  compressratio    1.00x                  -
tank  mounted          yes                    -
tank  quota            none                   default
tank  reservation      none                   default
tank  recordsize       128K                   default
tank  mountpoint       /tank                  default
tank  sharenfs         off                    default
tank  checksum         on                     default
tank  compression      off                    default
tank  atime            on                     default
tank  devices          on                     default
tank  exec             on                     default
tank  setuid           on                     default
tank  readonly         off                    default
tank  zoned            off                    default
tank  snapdir          hidden                 default
tank  aclmode          groupmask              default
tank  aclinherit       secure                 default
tank  canmount         on                     default
tank  shareiscsi       off                    default
tank  xattr            on                     default
tank  copies           1                      default
tank  version          3                      -
tank  utf8only         off                    -
tank  normalization    none                   -
tank  casesensitivity  sensitive              -
tank  vscan            off                    default
tank  nbmand           off                    default
tank  sharesmb         off                    default
tank  refquota         none                   default
tank  refreservation   none                   default

The -s option to zfs get enables you to specify, by source value, the type of properties to display. This option takes a comma-separated list indicating the desired source types. Only properties with the specified source type are displayed. The valid source types are local, default, inherited, temporary, and none. The following example shows all properties that have been locally set on pool.

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

Any of the above options can be combined with the -r option to recursively display the specified properties on all children of the specified dataset. In the following example, all temporary properties on all datasets within tank are recursively displayed:

# 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

A recent feature enables you to make queries with the zfs get command without specifying a target file system, which means it operates on all pools or file systems. For example:

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

For more information about the zfs get command, see zfs(1M).

Querying ZFS Properties for Scripting

The zfs get command supports the -H and -o options, which are designed for scripting. The -H option indicates that any header information should be omitted and that all white space should come in the form of tab. Uniform white space allows for easily parseable data. You can use the -o option to customize the output. This option takes a comma-separated list of values to be output. All properties defined in Introducing ZFS Properties, along with the literals name, value, property and source can be supplied in the -o list.

The following example shows how to retrieve a single value by using the -H and -o options of zfs get.

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

The -p option reports numeric values as their exact values. For example, 1 Mbyte would be reported as 1000000. This option can be used as follows:

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

You can use the -r option along with any of the above options to recursively retrieve the requested values for all descendents. The following example uses the -r, -o, and -H options to retrieve the dataset name and the value of the used property for export/home and its descendents, while omitting any header output:

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