ZFS(8) | Maintenance Commands and Procedures | ZFS(8) |
zfs
— configures
ZFS file systems
zfs |
[-? ] |
zfs |
create [-Pnpv ]
[-o
property=value]...
filesystem |
zfs |
create [-Pnpsv ]
[-b blocksize]
[-o
property=value]...
-V size
volume |
zfs |
destroy [-Rfnprv ]
filesystem|volume |
zfs |
destroy [-Rdnprv ]
filesystem|volume@snap[%snap[,snap[%snap]]]... |
zfs |
destroy
filesystem|volume#bookmark |
zfs |
snapshot [-r ]
[-o property=value]...
filesystem@snapname|volume@snapname... |
zfs |
rollback [-Rfr ]
snapshot |
zfs |
clone [-p ]
[-o
property=value]...
snapshot
filesystem|volume |
zfs |
promote
clone-filesystem |
zfs |
rename [-f ]
filesystem|volume|snapshot
filesystem|volume|snapshot |
zfs |
rename [-fp ]
filesystem|volume
filesystem|volume |
zfs |
rename -r
snapshot snapshot |
zfs |
list
[-r |-d
depth] [-Hp ]
[-o
property[,property]...]
[-s property]...
[-S property]...
[-t
type[,type]...]
[filesystem|volume|snapshot]... |
zfs |
remap
filesystem|volume |
zfs |
set
property=value
[property=value]...
filesystem|volume|snapshot... |
zfs |
get
[-r |-d
depth] [-Hp ]
[-o
field[,field]...]
[-s
source[,source]...]
[-t
type[,type]...]
all |
property[,property]...
filesystem|volume|snapshot|bookmark... |
zfs |
inherit [-rS ]
property
filesystem|volume|snapshot... |
zfs |
upgrade |
zfs |
upgrade -v |
zfs |
upgrade [-r ]
[-V version]
-a | filesystem |
zfs |
userspace [-Hinp ]
[-o
field[,field]...]
[-s field]...
[-S field]...
[-t
type[,type]...]
filesystem|snapshot |
zfs |
groupspace [-Hinp ]
[-o
field[,field]...]
[-s field]...
[-S field]...
[-t
type[,type]...]
filesystem|snapshot |
zfs |
projectspace [-Hp ]
[-o
field[,field]...]
[-s field]...
[-S field]...
filesystem|snapshot |
zfs |
project
[-d |-r ]
file|directory... |
zfs |
project -C
[-kr ]
file|directory... |
zfs |
project -c
[-0 ]
[-d |-r ]
[-p id]
file|directory... |
zfs |
project [-p
id] [-rs ]
file|directory... |
zfs |
mount |
zfs |
mount [-Olv ]
[-o options]
-a | filesystem |
zfs |
unmount [-f ]
-a |
filesystem|mountpoint |
zfs |
share -a |
filesystem |
zfs |
unshare -a |
filesystem|mountpoint |
zfs |
bookmark snapshot
bookmark |
zfs |
send [-DLPRbcehnpvw ]
[[-I |-i ]
snapshot] snapshot |
zfs |
send [-LPcenvw ]
[-i
snapshot|bookmark]
filesystem|volume|snapshot |
zfs |
send [-Penv ]
-t receive_resume_token |
zfs |
receive [-Fhnsuv ]
[-o
origin=snapshot]
[-o
property=value]
[-x property]
filesystem|volume|snapshot |
zfs |
receive [-Fhnsuv ]
[-d |-e ]
[-o
origin=snapshot]
[-o
property=value]
[-x property]
filesystem |
zfs |
receive -A
filesystem|volume |
zfs |
allow
filesystem|volume |
zfs |
allow [-dglu ]
user|group[,user|group]...
perm|@setname[,perm|@setname]...
filesystem|volume |
zfs |
allow [-dl ]
-e |everyone
perm|@setname[,perm|@setname]...
filesystem|volume |
zfs |
allow -c
perm|@setname[,perm|@setname]...
filesystem|volume |
zfs |
allow -s
@setname
perm|@setname[,perm|@setname]...
filesystem|volume |
zfs |
unallow [-dglru ]
user|group[,user|group]...
[perm|@setname[,perm|@setname]...]
filesystem|volume |
zfs |
unallow [-dlr ]
-e |everyone
[perm|@setname[,perm|@setname]...]
filesystem|volume |
zfs |
unallow [-r ]
-c
[perm|@setname[,perm|@setname]...]
filesystem|volume |
zfs |
unallow [-r ]
-s
-@ setname
[perm|@setname[,perm|@setname]...]
filesystem|volume |
zfs |
hold [-r ]
tag snapshot... |
zfs |
holds [-r ]
snapshot... |
zfs |
release [-r ]
tag snapshot... |
zfs |
diff [-FHt ]
snapshot
snapshot|filesystem |
zfs |
program [-jn ]
[-t timeout]
[-m memory_limit]
pool script [arg1
...] |
zfs |
load-key [-rn ]
[-L keylocation]
[-a |filesystem] |
zfs |
unload-key [-r ]
[-a |filesystem] |
zfs |
change-key [-l ]
[-o
keylocation=value]
[-o
keyformat=value]
[-o
pbkdf2iters=value]
filesystem |
The zfs
command configures ZFS datasets
within a ZFS storage pool, as described in
zpool(8). A dataset is identified by a
unique path within the ZFS namespace. For example:
pool/{filesystem,volume,snapshot}
where the maximum length of a dataset name is
MAXNAMELEN
(256 bytes) and the maximum amount of
nesting allowed in a path is 50 levels deep.
A dataset can be one of the following:
A ZFS storage pool is a logical collection of devices that provide space for datasets. A storage pool is also the root of the ZFS file system hierarchy.
The root of the pool can be accessed as a file system, such as mounting and unmounting, taking snapshots, and setting properties. The physical storage characteristics, however, are managed by the zpool(8) command.
See zpool(8) for more information on creating and administering pools.
A snapshot is a read-only copy of a file system or volume. Snapshots can be created extremely quickly, and initially consume no additional space within the pool. As data within the active dataset changes, the snapshot consumes more data than would otherwise be shared with the active dataset.
Snapshots can have arbitrary names. Snapshots of volumes can be cloned or rolled back, but cannot be accessed independently.
File system snapshots can be accessed under the .zfs/snapshot directory in the root of the file system. Snapshots are automatically mounted on demand and may be unmounted at regular intervals. The visibility of the .zfs directory can be controlled by the snapdir property.
A clone is a writable volume or file system whose initial contents are the same as another dataset. As with snapshots, creating a clone is nearly instantaneous, and initially consumes no additional space.
Clones can only be created from a snapshot. When a snapshot is
cloned, it creates an implicit dependency between the parent and child. Even
though the clone is created somewhere else in the dataset hierarchy, the
original snapshot cannot be destroyed as long as a clone exists. The
origin property exposes this dependency, and the
destroy
command lists any such dependencies, if they
exist.
The clone parent-child dependency relationship can be reversed by
using the promote
subcommand. This causes the
"origin" file system to become a clone of the specified file
system, which makes it possible to destroy the file system that the clone
was created from.
Creating a ZFS file system is a simple operation, so the number of file systems per system is likely to be numerous. To cope with this, ZFS automatically manages mounting and unmounting file systems without the need to edit the /etc/vfstab file. All automatically managed file systems are mounted by ZFS at boot time.
By default, file systems are mounted under /path, where path is the name of the file system in the ZFS namespace. Directories are created and destroyed as needed.
A file system can also have a mount point set
in the mountpoint property. This directory is created as
needed, and ZFS automatically mounts the file system when the
zfs
mount
-a
command is invoked (without editing
/etc/vfstab). The mountpoint
property can be inherited, so if pool/home has a mount
point of /export/stuff, then
pool/home/user
automatically inherits a mount point of
/export/stuff/user.
A file system mountpoint property of none prevents the file system from being mounted.
If needed, ZFS file systems can also be managed with traditional
tools (mount
, umount
,
/etc/vfstab). If a file system's mount point is set
to legacy, ZFS makes no attempt to manage the file system,
and the administrator is responsible for mounting and unmounting the file
system.
A ZFS file system can be added to a non-global zone by using the
zonecfg
add
fs subcommand.
A ZFS file system that is added to a non-global zone must have its
mountpoint property set to legacy.
The physical properties of an added file system are controlled by the global administrator. However, the zone administrator can create, modify, or destroy files within the added file system, depending on how the file system is mounted.
A dataset can also be delegated to a non-global zone
by using the zonecfg
add
dataset
subcommand. You cannot delegate a dataset to one zone and the children of
the same dataset to another zone. The zone administrator can change
properties of the dataset or any of its children. However, the
quota, filesystem_limit and
snapshot_limit properties of the delegated dataset can be
modified only by the global administrator.
A ZFS volume can be added as a device to a non-global
zone by using the zonecfg
add
device subcommand.
However, its physical properties can be modified only by the global
administrator.
For more information about zonecfg
syntax,
see zonecfg(8).
After a dataset is delegated to a non-global zone, the zoned property is automatically set. A zoned file system cannot be mounted in the global zone, since the zone administrator might have to set the mount point to an unacceptable value.
The global administrator can forcibly clear the zoned property, though this should be done with extreme care. The global administrator should verify that all the mount points are acceptable before clearing the property.
Properties are divided into two types, native properties and user-defined (or "user") properties. Native properties either export internal statistics or control ZFS behavior. In addition, native properties are either editable or read-only. User properties have no effect on ZFS behavior, but you can use them to annotate datasets in a way that is meaningful in your environment. For more information about user properties, see the User Properties section, below.
Every dataset has a set of properties that export statistics about the dataset as well as control various behaviors. Properties are inherited from the parent unless overridden by the child. Some properties apply only to certain types of datasets (file systems, volumes, or snapshots).
The values of numeric properties can be specified using
human-readable suffixes (for example, k,
KB,
M,
Gb, and so
forth, up to Z for zettabyte). The following are all valid
(and equal) specifications: 1536M, 1.5g, 1.50GB
.
The values of non-numeric properties are case sensitive and must be lowercase, except for mountpoint, sharenfs, and sharesmb.
The following native properties consist of read-only statistics about the dataset. These properties can be neither set, nor inherited. Native properties apply to all dataset types unless otherwise noted.
This property can also be referred to by its shortened column name, avail.
zfs
set
compression=on
dataset. The default value is
off.-r
or
-f
options).zfs
destroy
-d
command.
Otherwise, the property is off.zfs
load-key
and zfs
unload-key
). Clones will always share an
encryption key with their origin. See the Encryption
section for details.zfs
load-key
and zfs
unload-key
.This property can also be referred to by its shortened column name, lrefer.
This property can also be referred to by its shortened column name, lused.
This property can also be referred to by its shortened column name, refer.
The used space of a snapshot (see the Snapshots section) is space that is referenced exclusively by this snapshot. If this snapshot is destroyed, the amount of used space will be freed. Space that is shared by multiple snapshots isn't accounted for in this metric. When a snapshot is destroyed, space that was previously shared with this snapshot can become unique to snapshots adjacent to it, thus changing the used space of those snapshots. The used space of the latest snapshot can also be affected by changes in the file system. Note that the used space of a snapshot is a subset of the written space of the snapshot.
The amount of space used, available, or referenced does not
take into account pending changes. Pending changes are generally
accounted for within a few seconds. Committing a change to a disk using
fsync(3C) or
O_SYNC
does not necessarily guarantee that the
space usage information is updated immediately.
zpool
"version 13"
pools.ls
-l
. The amount of space
charged is displayed by du
and
ls
-s
. See the
zfs
userspace
subcommand
for more information.
Unprivileged users can access only their own space usage. The
root user, or a user who has been granted the userused
privilege with zfs
allow
, can access everyone's usage.
The userused@...
properties are not displayed by zfs
get
all. The user's name must
be appended after the @ symbol, using one of the following forms:
df
-i
.
When the property xattr=on is set on a file system additional objects will be created per-file to store extended attributes. These additional objects are reflected in the userobjused value and are counted against the user's userobjquota.
zfs
hold
command.ls
-l
. See the
userused@user property for more
information.
Unprivileged users can only access their own groups' space
usage. The root user, or a user who has been granted the
groupused privilege with zfs
allow
, can access all groups' usage.
Unprivileged users can only access their own groups' space
usage. The root user, or a user who has been granted the
groupobjused privilege with
zfs
allow
, can access
all groups' usage.
zfs project
-s
) when being created. The privileged user can
set and change object's project ID via zfs project
-s
anytime. Space is charged to the project of
each file, as displayed by zfs project
. See the
userused@user property for more
information.
The root user, or a user who has been granted the
projectused privilege with zfs
allow
, can access all projects' usage.
The root user, or a user who has been granted the
projectobjused privilege with zfs
allow
, can access all projects' objects usage.
This property can also be referred to by its shortened column name, volblock.
The snapshot may be specified as a short snapshot name (just the part after the @), in which case it will be interpreted as a snapshot in the same filesystem as this dataset. The snapshot may be a full snapshot name (filesystem@snapshot), which for clones may be a snapshot in the origin's filesystem (or the origin of the origin's filesystem, etc.)
The following native properties can be used to change the behavior of a ZFS dataset.
When the property value is set to passthrough, files are created with a mode determined by the inheritable ACEs. If no inheritable ACEs exist that affect the mode, then the mode is set in accordance to the requested mode from the application.
chmod(2) is required to change the set user ID, set group ID, or sticky bit on a file or directory, as they do not have equivalent ACEs. In order to use chmod(2) on a file or directory with a non-trivial ACL when aclmode is set to restricted, you must first remove all ACEs except for those that represent the current mode.
zfs
mount
-a
. Setting this
property to off is similar to setting the
mountpoint property to none, except
that the dataset still has a normal mountpoint property,
which can be inherited. Setting this property to off
allows datasets to be used solely as a mechanism to inherit properties.
One example of setting canmount=off is
to have two datasets with the same mountpoint, so that
the children of both datasets appear in the same directory, but might have
different inherited characteristics.
When set to noauto, a dataset can only be
mounted and unmounted explicitly. The dataset is not mounted
automatically when the dataset is created or imported, nor is it mounted
by the zfs
mount
-a
command or unmounted by the
zfs
unmount
-a
command.
This property is not inherited.
The sha512, skein, and edonr checksum algorithms require enabling the appropriate features on the pool. Please see zpool-features(7) for more information on these algorithms.
Changing this property affects only newly-written data.
Setting compression to on indicates that the current default compression algorithm should be used. The default balances compression and decompression speed, with compression ratio and is expected to work well on a wide variety of workloads. Unlike all other settings for this property, on does not select a fixed compression type. As new compression algorithms are added to ZFS and enabled on a pool, the default compression algorithm may change. The current default compression algorithm is either lzjb or, if the lz4_compress feature is enabled, lz4.
The lz4 compression algorithm is a high-performance replacement for the lzjb algorithm. It features significantly faster compression and decompression, as well as a moderately higher compression ratio than lzjb, but can only be used on pools with the lz4_compress feature set to enabled. See zpool-features(7) for details on ZFS feature flags and the lz4_compress feature.
The lzjb compression algorithm is optimized for performance while providing decent data compression.
The gzip compression algorithm uses the same compression as the gzip(1) command. You can specify the gzip level by using the value gzip-N, where N is an integer from 1 (fastest) to 9 (best compression ratio). Currently, gzip is equivalent to gzip-6 (which is also the default for gzip(1)).
The zle compression algorithm compresses runs of zeros.
This property can also be referred to by its shortened column name compress. Changing this property affects only newly-written data.
Changing this property only affects newly-written data.
Therefore, set this property at file system creation time by using the
-o
copies=N option.
Selecting encryption=on when creating a dataset indicates that the default encryption suite will be selected, which is currently aes-256-ccm. In order to provide consistent data protection, encryption must be specified at dataset creation time and it cannot be changed afterwards.
For more details and caveats about encryption see the Encryption section.
Raw keys and hex keys must be 32 bytes long (regardless of the chosen encryption suite) and must be randomly generated. A raw key can be generated with the following command:
# dd if=/dev/urandom of=/path/to/output/key bs=32 count=1
Passphrases must be between 8 and 512 bytes long and will be
processed through PBKDF2 before being used (see the
pbkdf2iters
property). Even though the
encryption suite cannot be changed after dataset creation, the keyformat
can be with zfs
change-key
.
zfs
load-key
and zfs
mount
-l
. This property is
only set for encrypted datasets which are encryption roots. If
unspecified, the default is prompt.
Even though the encryption suite cannot be changed after
dataset creation, the keylocation can be with either
zfs
set
or
zfs
change-key
. If
prompt is selected ZFS will ask for the key at the
command prompt when it is required to access the encrypted data (see
zfs
load-key
). This
setting will also allow the key to be passed in via STDIN, but users
should be careful not to place keys which should be kept secret on the
command line. If a file URI is selected, the key will be loaded from the
specified absolute file path.
Before setting this property, a special class vdev must be added to the pool. See zpool(8) for more details on the special allocation class.
When the mountpoint property is changed for a file system, the file system and any children that inherit the mount point are unmounted. If the new value is legacy, then they remain unmounted. Otherwise, they are automatically remounted in the new location if the property was previously legacy or none, or if they were mounted before the property was changed. In addition, any shared file systems are unshared and shared in the new location.
zfs
change-key
.Quotas cannot be set on volumes, as the volsize property acts as an implicit quota.
Enforcement of user quotas may be delayed by several seconds.
This delay means that a user might exceed their quota before the system
notices that they are over quota and begins to refuse additional writes
with the EDQUOT
error message. See the
zfs
userspace
subcommand
for more information.
Unprivileged users can only access their own groups' space
usage. The root user, or a user who has been granted the
userquota privilege with zfs
allow
, can get and set everyone's quota.
This property is not available on volumes, on file systems
before version 4, or on pools before version 15. The
userquota@... properties are not
displayed by zfs
get
all. The user's name must be appended after the
@ symbol, using one of the following forms:
Unprivileged users can access only their own groups' space
usage. The root user, or a user who has been granted the
groupquota privilege with zfs
allow
, can get and set all groups' quotas.
The root user, or a user who has been granted the
projectquota privilege with zfs
allow
, can access all projects' quotas.
This property can also be referred to by its shortened column name, rdonly.
For databases that create very large files but access them in small random chunks, these algorithms may be suboptimal. Specifying a recordsize greater than or equal to the record size of the database can result in significant performance gains. Use of this property for general purpose file systems is strongly discouraged, and may adversely affect performance.
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes. If the large_blocks feature is enabled on the pool, the size may be up to 1 Mbyte. See zpool-features(7) for details on ZFS feature flags.
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
This property can also be referred to by its shortened column name, recsize.
When set to all, ZFS stores an extra copy of all metadata. If a single on-disk block is corrupt, at worst a single block of user data (which is recordsize bytes long) can be lost.
When set to most, ZFS stores an extra copy of most types of metadata. This can improve performance of random writes, because less metadata must be written. In practice, at worst about 100 blocks (of recordsize bytes each) of user data can be lost if a single on-disk block is corrupt. The exact behavior of which metadata blocks are stored redundantly may change in future releases.
The default value is all.
If refreservation is set, a snapshot is only allowed if there is enough free pool space outside of this reservation to accommodate the current number of "referenced" bytes in the dataset.
If refreservation is set to auto, a volume is thick provisioned (or "not sparse"). refreservation=auto is only supported on volumes. See volsize in the Native Properties section for more information about sparse volumes.
This property can also be referred to by its shortened column name, refreserv.
This property can also be referred to by its shortened column name, reserv.
zfs
share
and
zfs
unshare
commands. If
the property is set to on, the
sharemgr(8) command is invoked
with no options. Otherwise, the
sharemgr(8) command is invoked
with options equivalent to the contents of this property.
Because SMB shares requires a resource name, a unique resource name is constructed from the dataset name. The constructed name is a copy of the dataset name except that the characters in the dataset name, which would be invalid in the resource name, are replaced with underscore (_) characters. A pseudo property "name" is also supported that allows you to replace the data set name with a specified name. The specified name is then used to replace the prefix dataset in the case of inheritance. For example, if the dataset data/home/john is set to name=john, then data/home/john has a resource name of john. If a child dataset data/home/john/backups is shared, it has a resource name of john_backups.
When SMB shares are created, the SMB share name appears as an
entry in the .zfs/shares directory. You can use
the ls
or chmod
command
to display the share-level ACLs on the entries in this directory.
When the sharesmb property is changed for a dataset, the dataset and any children inheriting the property are re-shared with the new options, only if the property was previously set to off, or if they were shared before the property was changed. If the new property is set to off, the file systems are unshared.
zfs
share
and
zfs
unshare
commands. If
the property is set to on,
share(8) command is invoked with no
options. Otherwise, the share(8)
command is invoked with options equivalent to the contents of this
property.
When the sharenfs property is changed for a dataset, the dataset and any children inheriting the property are re-shared with the new options, only if the property was previously off, or if they were shared before the property was changed. If the new property is off, the file systems are unshared.
zfs
upgrade
command.The reservation is kept equal to the volume's logical size to prevent unexpected behavior for consumers. Without the reservation, the volume could run out of space, resulting in undefined behavior or data corruption, depending on how the volume is used. These effects can also occur when the volume size is changed while it is in use (particularly when shrinking the size). Extreme care should be used when adjusting the volume size.
Though not recommended, a "sparse volume" (also
known as "thin provisioned") can be created by specifying the
-s
option to the zfs
create
-V
command, or by
changing the value of the refreservation property (or
reservation property on pool version 8 or earlier)
after the volume has been created. A "sparse volume" is a
volume where the value of refreservation is less than
the size of the volume plus the space required to store its metadata.
Consequently, writes to a sparse volume can fail with
ENOSPC
when the pool is low on space. For a
sparse volume, changes to volsize are not reflected in
the refreservation. A volume that is not sparse is
said to be "thick provisioned". A sparse volume can become
thick provisioned by setting refreservation to
auto.
The following three properties cannot be changed after the file
system is created, and therefore, should be set when the file system is
created. If the properties are not set with the zfs
create
or zpool
create
commands, these properties are inherited from
the parent dataset. If the parent dataset lacks these properties due to
having been created prior to these features being supported, the new file
system will have the default values for these properties.
The mixed value for the casesensitivity property indicates that the file system can support requests for both case-sensitive and case-insensitive matching behavior. Currently, case-insensitive matching behavior on a file system that supports mixed behavior is limited to the SMB server product. For more information about the mixed value behavior, see the "ZFS Administration Guide".
The casesensitivity, normalization, and utf8only properties are also new permissions that can be assigned to non-privileged users by using the ZFS delegated administration feature.
When a file system is mounted, either through
mount(8) for legacy mounts or the
zfs
mount
command for normal
file systems, its mount options are set according to its properties. The
correlation between properties and mount options is as follows:
PROPERTY MOUNT OPTION devices devices/nodevices exec exec/noexec readonly ro/rw setuid setuid/nosetuid xattr xattr/noxattr
In addition, these options can be set on a per-mount
basis using the -o
option, without affecting the
property that is stored on disk. The values specified on the command line
override the values stored in the dataset. The
nosuid option is
an alias for
nodevices,nosetuid.
These properties are reported as "temporary" by the
zfs
get
command. If the
properties are changed while the dataset is mounted, the new setting
overrides any temporary settings.
In addition to the standard native properties, ZFS supports arbitrary user properties. User properties have no effect on ZFS behavior, but applications or administrators can use them to annotate datasets (file systems, volumes, and snapshots).
User property names must contain a colon (":") character to distinguish them from native properties. They may contain lowercase letters, numbers, and the following punctuation characters: colon (":"), dash ("-"), period ("."), and underscore ("_"). The expected convention is that the property name is divided into two portions such as module:property, but this namespace is not enforced by ZFS. User property names can be at most 256 characters, and cannot begin with a dash ("-").
When making programmatic use of user properties, it is strongly suggested to use a reversed DNS domain name for the module component of property names to reduce the chance that two independently-developed packages use the same property name for different purposes.
The values of user properties are arbitrary strings, are always
inherited, and are never validated. All of the commands that operate on
properties (zfs
list
,
zfs
get
,
zfs
set
, and so forth) can
be used to manipulate both native properties and user properties. Use the
zfs
inherit
command to clear
a user property. If the property is not defined in any parent dataset, it is
removed entirely. Property values are limited to 8192 bytes.
During an initial installation a swap device and dump device are created on ZFS volumes in the ZFS root pool. By default, the swap area size is based on 1/2 the size of physical memory up to 2 Gbytes. The size of the dump device depends on the kernel's requirements at installation time. Separate ZFS volumes must be used for the swap area and dump devices. Do not swap to a file on a ZFS file system. A ZFS swap file configuration is not supported.
If you need to change your swap area or dump device after the system is installed or upgraded, use the swap(8) and dumpadm(8) commands.
Enabling the encryption feature allows for the
creation of encrypted filesystems and volumes. ZFS will encrypt all user
data including file and zvol data, file attributes, ACLs, permission bits,
directory listings, FUID mappings, and userused/groupused data. ZFS will not
encrypt metadata related to the pool structure, including dataset names,
dataset hierarchy, file size, file holes, and dedup tables. Key rotation is
managed internally by the ZFS kernel module and changing the user's key does
not require re-encrypting the entire dataset. Datasets can be scrubbed,
resilvered, renamed, and deleted without the encryption keys being loaded
(see the zfs
load-key
subcommand for more info on key loading).
Creating an encrypted dataset requires specifying the
encryption and keyformat properties at
creation time, along with an optional keylocation and
pbkdf2iters. After entering an encryption key, the created
dataset will become an encryption root. Any descendant datasets will inherit
their encryption key from the encryption root by default, meaning that
loading, unloading, or changing the key for the encryption root will
implicitly do the same for all inheriting datasets. If this inheritance is
not desired, simply supply a keyformat when creating the
child dataset or use zfs
change-key
to break an existing relationship,
creating a new encryption root on the child. Note that the child's
keyformat may match that of the parent while still
creating a new encryption root, and that changing the
encryption property alone does not create a new encryption
root; this would simply use a different cipher suite with the same key as
its encryption root. The one exception is that clones will always use their
origin's encryption key. As a result of this exception, some
encryption-related properties (namely keystatus,
keyformat, keylocation, and
pbkdf2iters) do not inherit like other ZFS properties and
instead use the value determined by their encryption root. Encryption root
inheritance can be tracked via the read-only
encryptionroot property.
Encryption changes the behavior of a few ZFS operations. Encryption is applied after compression so compression ratios are preserved. Normally checksums in ZFS are 256 bits long, but for encrypted data the checksum is 128 bits of the user-chosen checksum and 128 bits of MAC from the encryption suite, which provides additional protection against maliciously altered data. Deduplication is still possible with encryption enabled but for security, datasets will only dedup against themselves, their snapshots, and their clones.
There are a few limitations on encrypted datasets. Encrypted data cannot be embedded via the embedded_data feature. Encrypted datasets may not have copies=3 since the implementation stores some encryption metadata where the third copy would normally be. Since compression is applied before encryption datasets may be vulnerable to a CRIME-like attack if applications accessing the data allow for it. Deduplication with encryption will leak information about which blocks are equivalent in a dataset and will incur an extra CPU cost per block written.
All subcommands that modify state are logged persistently to the pool in their original form.
zfs
-?
zfs
create
[-Pnpv
] [-o
property=value]...
filesystem-o
property=valuezfs
set
property=value was invoked
at the same time the dataset was created. Any editable ZFS property
can also be set at creation time. Multiple -o
options can be specified. An error results if the same property is
specified in multiple -o
options.-p
-o
option is ignored. If the target filesystem
already exists, the operation completes successfully.-n
-v
or -P
flags to
validate properties that are passed via -o
options and those implied by other options. The actual dataset
creation can still fail due to insufficient privileges or available
capacity.-P
-p
option is used. The
property key has two values, a property's name and
that property's value. The property key may appear
zero or more times, once for each property that will be set local to
filesystem due to the use of the
-o
option.-v
zfs
create
[-ps
] [-b
blocksize] [-o
property=value]...
-V
size
volumesize is automatically rounded up to the nearest multiple of the blocksize.
-b
blocksize-o
volblocksize=blocksize. If
this option is specified in conjunction with
-o
volblocksize, the
resulting behavior is undefined.-o
property=valuezfs
set
property=value command was
invoked at the same time the dataset was created. Any editable ZFS
property can also be set at creation time. Multiple
-o
options can be specified. An error results
if the same property is specified in multiple
-o
options.-p
-o
option is ignored. If the target filesystem
already exists, the operation completes successfully.-s
-n
-v
or -P
flags to
validate properties that are passed via -o
options and those implied by other options. The actual dataset
creation can still fail due to insufficient privileges or available
capacity.-P
-p
option is used. The
property key has two values, a property's name and
that property's value. The property key may appear
zero or more times, once for each property that will be set local to
volume due to the use of the
-b
or -o
options, as
well as refreservation if the volume is not
sparse.-v
zfs
destroy
[-Rfnprv
]
filesystem|volume-R
-f
unmount
-f
command.
This option has no effect on non-file systems or unmounted file
systems.-n
-v
or
-p
flags to determine what data would be
deleted.-p
-r
-v
Extreme care should be taken when applying either the
-r
or the -R
options, as
they can destroy large portions of a pool and cause unexpected behavior
for mounted file systems in use.
zfs
destroy
[-Rdnprv
]
filesystem|volume@snap[%snap[,snap[%snap]]]...zfs
destroy
command
without the -d
option would have destroyed it.
Such immediate destruction would occur, for example, if the snapshot had
no clones and the user-initiated reference count were zero.
If a snapshot does not qualify for immediate destruction, it is marked for deferred deletion. In this state, it exists as a usable, visible snapshot until both of the preconditions listed above are met, at which point it is destroyed.
An inclusive range of snapshots may be specified by separating the first and last snapshots with a percent sign. The first and/or last snapshots may be left blank, in which case the filesystem's oldest or newest snapshot will be implied.
Multiple snapshots (or ranges of snapshots) of the same filesystem or volume may be specified in a comma-separated list of snapshots. Only the snapshot's short name (the part after the @) should be specified when using a range or comma-separated list to identify multiple snapshots.
-R
-d
flag will have no effect.-d
-n
-p
or
-v
flags to determine what data would be
deleted.-p
-r
-v
Extreme care should be taken when applying either the
-r
or the -R
options, as they can destroy large portions of a pool and cause
unexpected behavior for mounted file systems in use.
zfs
destroy
filesystem|volume#bookmarkzfs
snapshot
[-r
] [-o
property=value]...
filesystem@snapname|volume@snapname...zfs
rollback
[-Rfr
] snapshot-r
option.
The -rR
options do not recursively
destroy the child snapshots of a recursive snapshot. Only direct
snapshots of the specified filesystem are destroyed by either of these
options. To completely roll back a recursive snapshot, you must rollback
the individual child snapshots.
zfs
clone
[-p
] [-o
property=value]...
snapshot
filesystem|volume-o
property=valuezfs
create
for details.-p
zfs
promote
clone-filesystemThe snapshot that was cloned, and any snapshots previous to
this snapshot, are now owned by the promoted clone. The space they use
moves from the origin file system to the promoted clone, so enough space
must be available to accommodate these snapshots. No new space is
consumed by this operation, but the space accounting is adjusted. The
promoted clone must not have any conflicting snapshot names of its own.
The rename
subcommand can be used to rename any
conflicting snapshots.
zfs
rename
[-f
]
filesystem|volume|snapshot
filesystem|volume|snapshotzfs
rename
[-fp
]
filesystem|volume
filesystem|volumezfs
rename
-r
snapshot
snapshotzfs
list
[-r
|-d
depth] [-Hp
]
[-o
property[,property]...]
[-s
property]...
[-S
property]...
[-t
type[,type]...]
[filesystem|volume|snapshot]...-H
-S
property-s
option, but sorts by property
in descending order.-d
depth-o
property-o
name,avail,used,usedsnap,usedds,usedrefreserv,usedchild
-t
filesystem,volume syntax.-p
-r
-s
property-s
property options. Multiple
-s
options are evaluated from left to right in
decreasing order of importance. The following is a list of sorting
criteria:
If no sorting options are specified the existing behavior
of zfs
list
is
preserved.
-t
type-t
snapshot
displays only snapshots.zfs
set
property=value
[property=value]...
filesystem|volume|snapshot...zfs
get
[-r
|-d
depth] [-Hp
]
[-o
field[,field]...]
[-s
source[,source]...]
[-t
type[,type]...]
all
|
property[,property]...
filesystem|volume|snapshot|bookmark...name Dataset name property Property name value Property value source Property source. Can either be local, default, temporary, inherited, or none (-).
All columns are displayed by default, though this can be
controlled by using the -o
option. This command
takes a comma-separated list of properties as described in the
Native Properties and
User Properties sections.
The special value all can be used to display all properties that apply to the given dataset's type (filesystem, volume, snapshot, or bookmark).
-H
-d
depth-o
field-p
-r
-s
source-t
typezfs
inherit
[-rS
] property
filesystem|volume|snapshot...-S
option reverted to the received value if
one exists. See the Properties
section for a listing of default values, and details on which properties
can be inherited.
zfs
remap
filesystem|volumezfs
upgrade
zfs
upgrade
-v
zfs
upgrade
[-r
] [-V
version] -a
|
filesystemzfs
send
streams generated from new snapshots of these
file systems cannot be accessed on systems running older versions of the
software.
In general, the file system version is independent of the pool
version. See zpool(8) for
information on the zpool
upgrade
command.
In some cases, the file system version and the pool version are interrelated and the pool version must be upgraded before the file system version can be upgraded.
-V
version-V
flag is not specified, this command
upgrades to the most recent version. This option can only be used to
increase the version number, and only up to the most recent version
supported by this software.-a
-r
zfs
userspace
[-Hinp
]
[-o
field[,field]...]
[-s
field]...
[-S
field]...
[-t
type[,type]...]
filesystem|snapshot-H
-S
field-s
.-i
ls
-l
) perform this
translation, so the -i
option allows the
output from zfs
userspace
to be compared directly with those
utilities. However, -i
may lead to confusion
if some files were created by an SMB user before a SMB-to-POSIX name
mapping was established. In such a case, some files will be owned by
the SMB entity and some by the POSIX entity. However, the
-i
option will report that the POSIX entity
has the total usage and quota for both.-n
-o
field[,field]...-p
-s
field-s
and
-S
flags may be specified multiple times to
sort first by one field, then by another. The default is
-s
type
-s
name.-t
type[,type]...-t
posixuser,smbuser. The default can
be changed to include group types.zfs
groupspace
[-Hinp
] [-o
field[,field]...]
[-s
field]...
[-S
field]...
[-t
type[,type]...]
filesystem|snapshotzfs
userspace
, except that
the default types to display are -t
posixgroup,smbgroup.zfs
projectspace
[-Hp
] [-o
field[,field]...]
[-s
field]...
[-S
field]...
filesystem|snapshotzfs
userspace
, except that
the project identifier is numeral, not name. So need neither the option
-i for SID to POSIX ID nor -n for
numeric ID, nor -t for types.zfs
project
[-d
|-r
]
file|directory...zfs
project
-C
[-kr
]
file|directory...zfs
project
-c
[-0
]
[-d
|-r
]
[-p
id]
file|directory...-p
option) value or the target
directory's project ID.
-0
-d
-r
option.-p
-r
-d
option.zfs
project
[-p
id]
[-rs
]
file|directory...-p
-r
-s
-r
option specified together. When setup tree
quota, by default the directory's project ID will be set to all its
descendants unless you specify the project ID via
-p
option explicitly.zfs
mount
zfs
mount
[-Olv
] [-o
options] -a
|
filesystem-O
-a
-l
zfs
load-key
on each encryption root before
mounting it. Note that if a filesystem has a
keylocation of prompt this will
cause the terminal to interactively block after asking for the
key.-o
options-v
zfs
unmount
[-f
] -a
|
filesystem|mountpoint-a
-f
zfs
share
-a
| filesystem-a
zfs
unshare
-a
|
filesystem|mountpoint-a
zfs
bookmark
snapshot bookmarkzfs
send
command.
This feature must be enabled to be used. See zpool-features(7) for details on ZFS feature flags and the bookmarks feature.
zfs
send
[-DLPRbcehnpvw
]
[[-I
|-i
]
snapshot] snapshot-D
,
--dedup
-I
snapshot-I
@a fs@d
is similar to -i
@a
fs@b;
-i
@b
fs@c;
-i
@c
fs@d. The incremental source may be specified as
with the -i
option.-L
,
--large-block
-P
,
--parsable
-R
,
--replicate
If the -i
or
-I
flags are used in conjunction with the
-R
flag, an incremental replication stream
is generated. The current values of properties, and current snapshot
and file system names are set when the stream is received. If the
-F
flag is specified when this stream is
received, snapshots and file systems that do not exist on the
sending side are destroyed. If the -R
flag
is used to send encrypted datasets, then -w
must also be specified.
-e
,
--embed
-b,
--backup
zfs
receive
to restore received properties backed
up on the sent dataset and to avoid sending local settings that may
have nothing to do with the source dataset, but only with how the data
is backed up.-c
,
--compressed
-L
option is not
supplied in conjunction with -c
, then the data
will be decompressed before sending so it can be split into smaller
block sizes.-h,
--holds
-i
snapshotIf the destination is a clone, the source may be the origin snapshot, which must be fully specified (for example, pool/fs@origin, not just @origin).
-n
,
--dryrun
-v
or -P
flags to
determine what data will be sent. In this case, the verbose output
will be written to standard output (contrast with a non-dry-run, where
the stream is written to standard output and the verbose output goes
to standard error).-p
,
--props
-R
is specified. The receiving system
must also support this feature. Sends of encrypted datasets must use
-w
when using this flag.-w
,
--raw
-Lec
. Note that if you do not use this flag
for sending encrypted datasets, data will be sent unencrypted and may
be re-encrypted with a different encryption key on the receiving
system, which will disable the ability to do a raw send to that system
for incrementals.-v
,
--verbose
The format of the stream is committed. You will be able to receive your streams on future versions of ZFS .
zfs
send
[-Lcew
] [-i
snapshot|bookmark]
filesystem|volume|snapshot-L
,
--large-block
-c
,
--compressed
-L
option is not
supplied in conjunction with -c
, then the data
will be decompressed before sending so it can be split into smaller
block sizes.-e
,
--embed
-i
snapshot|bookmarkIf the incremental target is a clone, the incremental source can be the origin snapshot, or an earlier snapshot in the origin's filesystem, or the origin's origin, etc.
-w
,
--raw
-Lec
. Note that if you do not use this flag
for sending encrypted datasets, data will be sent unencrypted and may
be re-encrypted with a different encryption key on the receiving
system, which will disable the ability to do a raw send to that system
for incrementals.zfs
send
[-Penv
] -t
receive_resume_tokenzfs
receive
[-Fhnsuv
] [-o
origin=snapshot]
[-o
property=value]
[-x
property]
filesystem|volume|snapshotzfs
receive
[-Fhnsuv
]
[-d
|-e
]
[-o
origin=snapshot]
[-o
property=value]
[-x
property]
filesystemzfs
send
subcommand, which by default creates a full
stream. zfs
recv
can be
used as an alias for zfs
receive
.
If an incremental stream is received, then the
destination file system must already exist, and its most recent snapshot
must match the incremental stream's source. For
zvols, the
destination device link is destroyed and recreated, which means the
zvol
cannot be accessed during the receive
operation.
When a snapshot replication package stream that is generated
by using the zfs
send
-R
command is received, any snapshots that do
not exist on the sending location are destroyed by using the
zfs
destroy
-d
command.
If -o
property=value or
-x
property is specified, it
applies to the effective value of the property throughout the entire
subtree of replicated datasets. Effective property values will be set (
-o
) or inherited ( -x
)
on the topmost in the replicated subtree. In descendant datasets, if the
property is set by the send stream, it will be overridden by forcing the
property to be inherited from the top‐most file system. Received
properties are retained in spite of being overridden and may be restored
with zfs
inherit
-S
. Specifying -o
origin=snapshot is a special case
because, even if origin is a read-only property and
cannot be set, it's allowed to receive the send stream as a clone of the
given snapshot.
Raw encrypted send streams (created with
zfs
send
-w
) may only be received as is, and cannot be
re-encrypted, decrypted, or recompressed by the receive process.
Unencrypted streams can be received as encrypted datasets, either
through inheritance or by specifying encryption parameters with the
-o
options. Note that the
keylocation property cannot be overridden to
prompt during a receive. This is because the receive
process itself is already using stdin for the send stream. Instead, the
property can be overridden after the receive completes.
The added security provided by raw sends adds some restrictions to the send and receive process. ZFS will not allow a mix of raw receives and non-raw receives. Specifically, any raw incremental receives that are attempted after a non-raw receive will fail. Non-raw receives do not have this restriction and, therefore, are always possible. Because of this, it is best practice to always use either raw sends for their security benefits or non-raw sends for their flexibility when working with encrypted datasets, but not a combination.
The reason for this restriction stems from the inherent restrictions of the AEAD ciphers that ZFS uses to encrypt data. When using ZFS native encryption, each block of data is encrypted against a randomly generated number known as the "initialization vector" (IV), which is stored in the filesystem metadata. This number is required by the encryption algorithms whenever the data is to be decrypted. Together, all of the IVs provided for all of the blocks in a given snapshot are collectively called an "IV set". When ZFS performs a raw send, the IV set is transferred from the source to the destination in the send stream. When ZFS performs a non-raw send, the data is decrypted by the source system and re-encrypted by the destination system, creating a snapshot with effectively the same data, but a different IV set. In order for decryption to work after a raw send, ZFS must ensure that the IV set used on both the source and destination side match. When an incremental raw receive is performed on top of an existing snapshot, ZFS will check to confirm that the "from" snapshot on both the source and destination were using the same IV set, ensuring the new IV set is consistent.
The name of the snapshot (and file system, if a full stream is
received) that this subcommand creates depends on the argument type and
the use of the -d
or -e
options.
If the argument is a snapshot name, the specified
snapshot is created. If the argument is a file
system or volume name, a snapshot with the same name as the sent
snapshot is created within the specified
filesystem or volume. If
neither of the -d
or -e
options are specified, the provided target snapshot name is used exactly
as provided.
The -d
and -e
options cause the file system name of the target snapshot to be
determined by appending a portion of the sent snapshot's name to the
specified target filesystem. If the
-d
option is specified, all but the first
element of the sent snapshot's file system path (usually the pool name)
is used and any required intermediate file systems within the specified
one are created. If the -e
option is specified,
then only the last element of the sent snapshot's file system name (i.e.
the name of the source file system itself) is used as the target file
system name.
-F
zfs
send
-R
[-i
|-I
]), destroy
snapshots and file systems that do not exist on the sending side.-d
-e
-h
-n
-v
option to verify the name the
receive operation would use.-o
origin=snapshot-o
property=valuezfs
set
property=value was invoked
immediately before the receive. When receiving a stream from
zfs
send
-R
, causes the property to be inherited by all
descendant datasets, as though zfs
inherit
property was run on
any descendant datasets that have this property set on the sending
system.
Any editable property can be set at receive time. Set-once
properties bound to the received data, such as
normalization and
casesensitivity, cannot be set at receive time
even when the datasets are newly created by
zfs
receive
.
Additionally both settable properties version and
volsize cannot be set at receive time.
The -o
option may be specified
multiple times, for different properties. An error results if the
same property is specified in multiple -o
or
-x
options.
The -o
option may also be used to
override encryption properties upon initial receive. This allows
unencrypted streams to be received as encrypted datasets. To cause
the received dataset (or root dataset of a recursive stream) to be
received as an encryption root, specify encryption properties in the
same manner as is required for zfs
create
. For instance:
# zfs send tank/test@snap1 | zfs recv -o encryption=on -o keyformat=passphrase -o keylocation=file:///path/to/keyfile
Note that [-o
keylocation=prompt] may
not be specified here, since stdin is already being utilized for the
send stream. Once the receive has completed, you can use
zfs
set
to change
this setting after the fact. Similarly, you can receive a dataset as
an encrypted child by specifying [-x
encryption] to force the property to be
inherited. Overriding encryption properties (except for
keylocation) is not possible with raw send
streams.
-s
zfs
receive
process,
or unclean shutdown of the system.
The receive can be resumed with a stream generated by
zfs
send
-t
token, where the
token is the value of the
receive_resume_token property of the filesystem or
volume which is received into.
To use this flag, the storage pool must have the extensible_dataset feature enabled. See zpool-features(7) for details on ZFS feature flags.
-u
-v
-x
propertyIf the specified property is not present in the send stream, this option does nothing.
If a received property needs to be overridden, the effective value will be set or inherited, depending on whether the property is inheritable or not.
In the case of an incremental update,
-x
leaves any existing local setting or
explicit inheritance unchanged.
All -o
restrictions (e.g.
set-once) apply equally to -x
.
zfs
receive
-A
filesystem|volumezfs
receive
-s
, deleting its
saved partially received state.zfs
allow
filesystem|volumezfs
allow
for more information.zfs
allow
[-dglu
]
user|group[,user|group]...
perm|@setname[,perm|@setname]...
filesystem|volumezfs
allow
[-dl
]
-e
|everyone
perm|@setname[,perm|@setname]...
filesystem|volume-d
-e
|everyone-g
group[,group]...-l
-u
user[,user]...-gu
options are specified, then the argument
is interpreted preferentially as the keyword
everyone, then as a user name, and lastly as a group
name. To specify a user or group named "everyone", use the
-g
or -u
options. To
specify a group with the same name as a user, use the
-g
options.-s
form below for details.If neither of the -dl
options are
specified, or both are, then the permissions are allowed for the file
system or volume, and all of its descendents.
Permissions are generally the ability to use a ZFS subcommand or change a ZFS property. The following permissions are available:
NAME TYPE NOTES allow subcommand Must also have the permission that is being allowed clone subcommand Must also have the 'create' ability and 'mount' ability in the origin file system create subcommand Must also have the 'mount' ability destroy subcommand Must also have the 'mount' ability diff subcommand Allows lookup of paths within a dataset given an object number, and the ability to create snapshots necessary to 'zfs diff'. load-key subcommand Allows loading and unloading of encryption key (see 'zfs load-key' and 'zfs unload-key'). change-key subcommand Allows changing an encryption key via 'zfs change-key'. mount subcommand Allows mount/umount of ZFS datasets promote subcommand Must also have the 'mount' and 'promote' ability in the origin file system receive subcommand Must also have the 'mount' and 'create' ability rename subcommand Must also have the 'mount' and 'create' ability in the new parent rollback subcommand Must also have the 'mount' ability send subcommand share subcommand Allows sharing file systems over NFS or SMB protocols snapshot subcommand Must also have the 'mount' ability groupquota other Allows accessing any groupquota@... property groupused other Allows reading any groupused@... property userprop other Allows changing any user property userquota other Allows accessing any userquota@... property userused other Allows reading any userused@... property projectobjquota other Allows accessing any projectobjquota@... property projectquota other Allows accessing any projectquota@... property projectobjused other Allows reading any projectobjused@... property projectused other Allows reading any projectused@... property aclinherit property aclmode property atime property canmount property casesensitivity property checksum property compression property copies property devices property exec property filesystem_limit property mountpoint property nbmand property normalization property primarycache property quota property readonly property recordsize property refquota property refreservation property reservation property secondarycache property setuid property sharenfs property sharesmb property snapdir property snapshot_limit property utf8only property version property volblocksize property volsize property vscan property xattr property zoned property
zfs
allow
-c
perm|@setname[,perm|@setname]...
filesystem|volumezfs
allow
-s
@setname
perm|@setname[,perm|@setname]...
filesystem|volumezfs
allow
commands
for the specified file system and its descendents. Sets are evaluated
dynamically, so changes to a set are immediately reflected. Permission
sets follow the same naming restrictions as ZFS file systems, but the name
must begin with @, and can be no more than 64 characters
long.zfs
unallow
[-dglru
]
user|group[,user|group]...
[perm|@setname[,perm|@setname]...]
filesystem|volumezfs
unallow
[-dlr
]
-e
|everyone
[perm|@setname[,perm|@setname]...]
filesystem|volumezfs
unallow
[-r
] -c
[perm|@setname[,perm|@setname]...]
filesystem|volumezfs
allow
command. No permissions are explicitly
denied, so other permissions granted are still in effect. For example, if
the permission is granted by an ancestor. If no permissions are specified,
then all permissions for the specified user,
group, or everyone are removed.
Specifying everyone (or using the
-e
option) only removes the permissions that were
granted to everyone, not all permissions for every user and group. See the
zfs
allow
command for a
description of the -ldugec
options.
-r
zfs
unallow
[-r
] -s
@setname
[perm|@setname[,perm|@setname]...]
filesystem|volumezfs
hold
[-r
] tag
snapshot...If a hold exists on a snapshot, attempts to destroy that
snapshot by using the zfs
destroy
command return
EBUSY
.
-r
zfs
holds
[-r
] snapshot...-r
zfs
release
[-r
] tag
snapshot...zfs
destroy
command return
EBUSY
.
-r
zfs
diff
[-FHt
] snapshot
snapshot|filesystem- The path has been removed + The path has been created M The path has been modified R The path has been renamed
-F
-
option of
ls(1).
B Block device C Character device / Directory > Door | Named pipe @ Symbolic link P Event port = Socket F Regular file
-H
-t
zfs
program
[-jn
] [-t
timeout] [-m
memory_limit] pool script
[arg1 ...]For full documentation of the ZFS channel program interface, see the manual page for zfs-program(8).
-j
-n
-t
timeout-m
memory-limitAll remaining argument strings are passed directly to the channel program as arguments. See zfs-program(8) for more information.
zfs
load-key
[-nr
] [-L
keylocation]
-a
|filesystem-r
or -a
keylocation may only be given as
prompt.
-a
-n
load-key
. This will cause zfs to
simply check that the provided key is correct. This command may be run
even if the key is already loaded.-r
zfs
unload-key
[-r
]
-a
|filesystemzfs
change-key
[-il
] [-o
keylocation=value]
[-o
keyformat=value]
[-o
pbkdf2iters=value]
filesystem-i
flag may be provided to cause an encryption
root to inherit the parent's key instead.
-i
-l
zfs
load-key
filesystem;
zfs
change-key
filesystem".-o
property=valueThe zfs
utility exits 0 on success, 1 if
an error occurs, and 2 if invalid command line options were specified.
# zfs create pool/home # zfs set mountpoint=/export/home pool/home # zfs create pool/home/bob
# zfs snapshot pool/home/bob@yesterday
# zfs snapshot -r pool/home@yesterday # zfs destroy -r pool/home@yesterday
# zfs set compression=off pool/home # zfs set compression=on pool/home/anne
# zfs list NAME USED AVAIL REFER MOUNTPOINT pool 450K 457G 18K /pool pool/home 315K 457G 21K /export/home pool/home/anne 18K 457G 18K /export/home/anne pool/home/bob 276K 457G 276K /export/home/bob
# zfs set quota=50G pool/home/bob
# zfs get all pool/home/bob NAME PROPERTY VALUE SOURCE pool/home/bob type filesystem - pool/home/bob creation Tue Jul 21 15:53 2009 - pool/home/bob used 21K - pool/home/bob available 20.0G - pool/home/bob referenced 21K - pool/home/bob compressratio 1.00x - pool/home/bob mounted yes - pool/home/bob quota 20G local pool/home/bob reservation none default pool/home/bob recordsize 128K default pool/home/bob mountpoint /pool/home/bob default pool/home/bob sharenfs off default pool/home/bob checksum on default pool/home/bob compression on local pool/home/bob atime on default pool/home/bob devices on default pool/home/bob exec on default pool/home/bob setuid on default pool/home/bob readonly off default pool/home/bob zoned off default pool/home/bob snapdir hidden default pool/home/bob aclmode discard default pool/home/bob aclinherit restricted default pool/home/bob canmount on default pool/home/bob xattr on default pool/home/bob copies 1 default pool/home/bob version 4 - pool/home/bob utf8only off - pool/home/bob normalization none - pool/home/bob casesensitivity sensitive - pool/home/bob vscan off default pool/home/bob nbmand off default pool/home/bob sharesmb off default pool/home/bob refquota none default pool/home/bob refreservation none default pool/home/bob primarycache all default pool/home/bob secondarycache all default pool/home/bob usedbysnapshots 0 - pool/home/bob usedbydataset 21K - pool/home/bob usedbychildren 0 - pool/home/bob usedbyrefreservation 0 -
The following command gets a single property value.
# zfs get -H -o value compression pool/home/bob on
# zfs get -r -s local -o name,property,value all pool/home/bob NAME PROPERTY VALUE pool/home/bob quota 20G pool/home/bob compression on
# zfs rollback -r pool/home/anne@yesterday
# zfs clone pool/home/bob@yesterday pool/clone
# zfs create pool/project/production populate /pool/project/production with data # zfs snapshot pool/project/production@today # zfs clone pool/project/production@today pool/project/beta make changes to /pool/project/beta and test them # zfs promote pool/project/beta # zfs rename pool/project/production pool/project/legacy # zfs rename pool/project/beta pool/project/production once the legacy version is no longer needed, it can be destroyed # zfs destroy pool/project/legacy
# zfs inherit checksum pool/home/bob pool/home/anne
# zfs send pool/fs@a | \ ssh host zfs receive poolB/received/fs@a # zfs send -i a pool/fs@b | \ ssh host zfs receive poolB/received/fs
# zfs send poolA/fsA/fsB@snap | \ ssh host zfs receive -d poolB/received
# zfs set com.example:department=12345 tank/accounting
# zfs destroy -r pool/users@7daysago # zfs rename -r pool/users@6daysago @7daysago # zfs rename -r pool/users@5daysago @6daysago # zfs rename -r pool/users@4daysago @5daysago # zfs rename -r pool/users@3daysago @4daysago # zfs rename -r pool/users@2daysago @3daysago # zfs rename -r pool/users@yesterday @2daysago # zfs rename -r pool/users@today @yesterday # zfs snapshot -r pool/users@today
# zfs set sharenfs='rw=@123.123.0.0/16,root=neo' tank/home
If you are using DNS for host name resolution, specify the fully qualified hostname.
# zfs allow cindys create,destroy,mount,snapshot tank/cindys # zfs allow tank/cindys ---- Permissions on tank/cindys -------------------------------------- Local+Descendent permissions: user cindys create,destroy,mount,snapshot
Because the tank/cindys mount point permission is set to 755 by default, user cindys will be unable to mount file systems under tank/cindys. Add an ACE similar to the following syntax to provide mount point access:
# chmod A+user:cindys:add_subdirectory:allow /tank/cindys
# zfs allow staff create,mount tank/users # zfs allow -c destroy tank/users # zfs allow tank/users ---- Permissions on tank/users --------------------------------------- Permission sets: destroy Local+Descendent permissions: group staff create,mount
# zfs allow -s @pset create,destroy,snapshot,mount tank/users # zfs allow staff @pset tank/users # zfs allow tank/users ---- Permissions on tank/users --------------------------------------- Permission sets: @pset create,destroy,mount,snapshot Local+Descendent permissions: group staff @pset
# zfs allow cindys quota,reservation users/home # zfs allow users/home ---- Permissions on users/home --------------------------------------- Local+Descendent permissions: user cindys quota,reservation cindys% zfs set quota=10G users/home/marks cindys% zfs get quota users/home/marks NAME PROPERTY VALUE SOURCE users/home/marks quota 10G local
# zfs unallow staff snapshot tank/users # zfs allow tank/users ---- Permissions on tank/users --------------------------------------- Permission sets: @pset create,destroy,mount,snapshot Local+Descendent permissions: group staff @pset
-F
option is used to indicate type information for
the files affected.
# zfs diff -F tank/test@before tank/test M / /tank/test/ M F /tank/test/linked (+1) R F /tank/test/oldname -> /tank/test/newname - F /tank/test/deleted + F /tank/test/created M F /tank/test/modified
gzip(1), ssh(1), chmod(2), stat(2), write(2), fsync(3C), dfstab(5), acl(7), attributes(7), mount(8), share(8), sharemgr(8), unshare(8), zfs-program(8), zonecfg(8), zpool(8)
November 3, 2023 | OmniOS |