ZFS(8) | System Manager's Manual (smm) | ZFS(8) |
zfs
— configures
ZFS file systems
zfs |
- ? |
zfs |
create [-p ]
[-o
property=value]...
filesystem |
zfs |
create [-ps ]
[-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 |
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 |
mount |
zfs |
mount [-Ov ]
[-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 [-DLPRcenpv ]
[[-I |-i ]
snapshot] snapshot |
zfs |
send [-Lce ]
[-i
snapshot|bookmark]
filesystem|volume|snapshot |
zfs |
send [-Penv ]
-t receive_resume_token |
zfs |
receive [-Fnsuv ]
[-o
origin=snapshot]
[-o
property=value]
[-x property]
filesystem|volume|snapshot |
zfs |
receive [-Fnsuv ]
[-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 |
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).
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, visibility is determined by the snapdev property of the parent volume.
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 bookmark is like a snapshot, a read-only copy of a file system or volume. Bookmarks can be created extremely quickly, compared to snapshots, and they consume no additional space within the pool. Bookmarks can also have arbitrary names, much like snapshots.
Unlike snapshots, bookmarks can not be accessed through the filesystem in any way. From a storage standpoint a bookmark just provides a way to reference when a snapshot was created as a distinct object. Bookmarks are initially tied to a snapshot, not the filesystem or volume, and they will survive if the snapshot itself is destroyed. Since they are very light weight there's little incentive to destroy them.
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/fstab 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/fstab). 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/fstab). 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. Because pools must be imported before a legacy mount can succeed,
administrators should ensure that legacy mounts are only attempted after the
zpool import process finishes at boot time. For example, on machines using
systemd, the mount option
x-systemd.requires=zfs-import.target
will ensure that the zfs-import completes before systemd attempts mounting the filesystem. See systemd.mount(5) for details.
Deduplication is the process for removing redundant data at the block level, reducing the total amount of data stored. If a file system has the dedup property enabled, duplicate data blocks are removed synchronously. The result is that only unique data is stored and common components are shared among files.
Deduplicating data is a very resource-intensive operation. It is generally recommended that you have at least 1.25 GiB of RAM per 1 TiB of storage when you enable deduplication. Calculating the exact requirement depends heavily on the type of data stored in the pool.
Enabling deduplication on an improperly-designed system can result in performance issues (slow IO and administrative operations). It can potentially lead to problems importing a pool due to memory exhaustion. Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
Before creating a pool with deduplication enabled, ensure that you have planned your hardware requirements appropriately and implemented appropriate recovery practices, such as regular backups. As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
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). The roles of origin and clone can be
swapped by promoting the clone with the zfs
promote
command.zfs
destroy
-d
command.
Otherwise, the property is off.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(2) 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:
Files created on Linux always have POSIX owners.
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. When a file system is configured to use xattr=sa no additional internal objects are normally required.
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.
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.
The aclinherit property does not apply to posix ACLs.
To obtain the best performance when setting posixacl users are strongly encouraged to set the xattr=sa property. This will result in the posix ACL being stored more efficiently on disk. But as a consequence of this all new extended attributes will only be accessible from OpenZFS implementations which support the xattr=sa property. See the xattr property for more details.
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. These algorithms are not supported by GRUB and should not be set on the bootfs filesystem when using GRUB to boot the system. Please see zpool-features(5) 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(5) 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.
Remember that ZFS will not import a pool with a missing top-level vdev. Do NOT create, for example a two-disk striped pool and set copies=2 on some datasets thinking you have setup redundancy for them. When a disk fails you will not be able to import the pool and will have lost all of your data.
Consider setting dnodesize to auto if the dataset uses the xattr=sa property setting and the workload makes heavy use of extended attributes. This may be applicable to SELinux-enabled systems, Lustre servers, and Samba servers, for example. Literal values are supported for cases where the optimal size is known in advance and for performance testing.
Leave dnodesize set to legacy if you need to receive a send stream of this dataset on a pool that doesn't enable the large_dnode feature, or if you need to import this pool on a system that doesn't support the large_dnode feature.
This property can also be referred to by its shortened column name, dnsize.
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.
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:
Files created on Linux always have POSIX owners.
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.
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(5) 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.
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 net(8) command is invoked
to create a USERSHARE.
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. Linux does not currently support additional options which might be available on Solaris.
If the sharesmb property is set to off, the file systems are unshared.
The share is created with the ACL (Access Control List) "Everyone:F" ("F" stands for "full permissions", ie. read and write permissions) and no guest access (which means Samba must be able to authenticate a real user, system passwd/shadow, LDAP or smbpasswd based) by default. This means that any additional access control (disallow specific user specific access etc) must be done on the underlying file system.
zfs
share
and
zfs
unshare
commands. If
the property is set to on, the dataset is shared using
the default options:
sec=sys,rw,crossmnt,no_subtree_check,no_root_squash
See exports(5) for the meaning of the default options. Otherwise, the exportfs(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 provisioning") can be created by specifying the
-s
option to the zfs
create
-V
command, or by
changing the reservation after the volume has been created. A
"sparse volume" is a volume where the reservation is less then
the volume size. 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 reservation.
default
|
full
|
geom
| dev
|
none
The default value of on enables directory based extended attributes. This style of extended attribute imposes no practical limit on either the size or number of attributes which can be set on a file. Although under Linux the getxattr(2) and setxattr(2) system calls limit the maximum size to 64K. This is the most compatible style of extended attribute and is supported by all OpenZFS implementations.
System attribute based xattrs can be enabled by setting the value to sa. The key advantage of this type of xattr is improved performance. Storing extended attributes as system attributes significantly decreases the amount of disk IO required. Up to 64K of data may be stored per-file in the space reserved for system attributes. If there is not enough space available for an extended attribute then it will be automatically written as a directory based xattr. System attribute based extended attributes are not accessible on platforms which do not support the xattr=sa feature.
The use of system attribute based xattrs is strongly encouraged for users of SELinux or posix ACLs. Both of these features heavily rely of extended attributes and benefit significantly from the reduced access time.
The values on and off are equivalent to the xattr and noxattr mount options.
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 atime atime/noatime canmount auto/noauto devices dev/nodev exec exec/noexec readonly ro/rw relatime relatime/norelatime setuid suid/nosuid 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.
ZFS volumes may be used as swap devices. After creating the volume
with the zfs
create
-V
command set up and enable the swap area using the
mkswap(8) and swapon(8) commands. Do not
swap to a file on a ZFS file system. A ZFS swap file configuration is not
supported.
All subcommands that modify state are logged persistently to the pool in their original form.
zfs
-
?zfs
create
[-p
] [-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.zfs
create
[-ps
] [-b
blocksize] [-o
property=value]...
-V
size
volumesize is automatically rounded up to the nearest 128 Kbytes to ensure that the volume has an integral number of blocks regardless of 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
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
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
mount
zfs
mount
[-Ov
] [-o
options] -a
|
filesystem-O
-a
-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(5) for details on ZFS feature flags and the bookmarks feature.
zfs
send
[-DLPRcenpv
]
[[-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.
-e,
--embed
-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.-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.-v,
--verbose
The format of the stream is committed. You will be able to receive your streams on future versions of ZFS .
zfs
send
[-Lce
] [-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.
zfs
send
[-Penv
] -t
receive_resume_tokenzfs
receive
[-Fnsuv
] [-o
origin=snapshot]
[-o
property=value]
[-x
property]
filesystem|volume|snapshotzfs
receive
[-Fnsuv
]
[-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.
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
-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 through
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.
-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(5) 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 on set-once
and special properties 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.
Delegations are supported under Linux with the exception of mount, unmount, mountpoint, canmount, rename, and share. These permissions cannot be delegated because the Linux mount(8) command restricts modifications of the global namespace to the root user.
zfs
allow
[-dglu
]
user|group[,user|group]...
perm|@setname[,perm|@setname]...
filesystem|volume
zfs
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'. 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 aclinherit property acltype 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|volume
zfs
unallow
[-dlr
]
-e
|everyone
[perm|@setname[,perm|@setname]...]
filesystem|volume
zfs
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
The 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 acltype off 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@yesterday @5daysago # zfs rename -r pool/users@yesterday @4daysago # zfs rename -r pool/users@yesterday @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
# zfs bookmark rpool@snapshot rpool#bookmark
# smbmount //127.0.0.1/share_tmp /mnt/tmp \ -o user=workgroup/turbo,password=obrut,uid=1000
Minimal /etc/samba/smb.conf configuration required:
Samba will need to listen to 'localhost' (127.0.0.1) for the ZFS utilities to communicate with Samba. This is the default behavior for most Linux distributions.
Samba must be able to authenticate a user. This can be done in a number of ways, depending on if using the system password file, LDAP or the Samba specific smbpasswd file. How to do this is outside the scope of this manual. Please refer to the smb.conf(5) man page for more information.
See the USERSHARE section of the smb.conf(5) man page for all configuration options in case you need to modify any options to the share afterwards. Do note that any changes done with the net(8) command will be undone if the share is ever unshared (such as at a reboot etc).
gzip(1), ssh(1), mount(8), zpool(8), selinux(8), chmod(2), stat(2), write(2), fsync(2), attr(1), acl(5), exports(5), exportfs(8), net(8), attributes(5)
July 13, 2018 | Linux |