'\" te
.\" Copyright (c) 2013, 2017 by Delphix. All rights reserved.
.\" Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
.\" Copyright (c) 2014, Joyent, Inc. All rights reserved.
.\" The contents of this file are subject to the terms of the Common Development
.\" and Distribution License (the "License").  You may not use this file except
.\" in compliance with the License. You can obtain a copy of the license at
.\" usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.
.\"
.\" See the License for the specific language governing permissions and
.\" limitations under the License. When distributing Covered Code, include this
.\" CDDL HEADER in each file and include the License file at
.\" usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this
.\" CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your
.\" own identifying information:
.\" Portions Copyright [yyyy] [name of copyright owner]
.TH ZPOOL-FEATURES 5 "Jun 8, 2018"
.SH NAME
zpool\-features \- ZFS pool feature descriptions
.SH DESCRIPTION
.sp
.LP
ZFS pool on\-disk format versions are specified via "features" which replace
the old on\-disk format numbers (the last supported on\-disk format number is
28). To enable a feature on a pool use the \fBupgrade\fR subcommand of the
zpool(8) command, or set the \fBfeature@\fR\fIfeature_name\fR property
to \fBenabled\fR.
.sp
.LP
The pool format does not affect file system version compatibility or the ability
to send file systems between pools.
.sp
.LP
Since most features can be enabled independently of each other the on\-disk
format of the pool is specified by the set of all features marked as
\fBactive\fR on the pool. If the pool was created by another software version
this set may include unsupported features.
.SS "Identifying features"
.sp
.LP
Every feature has a GUID of the form \fIcom.example:feature_name\fR. The
reverse DNS name ensures that the feature's GUID is unique across all ZFS
implementations. When unsupported features are encountered on a pool they will
be identified by their GUIDs. Refer to the documentation for the ZFS
implementation that created the pool for information about those features.
.sp
.LP
Each supported feature also has a short name. By convention a feature's short
name is the portion of its GUID which follows the ':' (e.g.
\fIcom.example:feature_name\fR would have the short name \fIfeature_name\fR),
however a feature's short name may differ across ZFS implementations if
following the convention would result in name conflicts.
.SS "Feature states"
.sp
.LP
Features can be in one of three states:
.sp
.ne 2
.na
\fBactive\fR
.ad
.RS 12n
This feature's on\-disk format changes are in effect on the pool. Support for
this feature is required to import the pool in read\-write mode. If this
feature is not read-only compatible, support is also required to import the pool
in read\-only mode (see "Read\-only compatibility").
.RE

.sp
.ne 2
.na
\fBenabled\fR
.ad
.RS 12n
An administrator has marked this feature as enabled on the pool, but the
feature's on\-disk format changes have not been made yet. The pool can still be
imported by software that does not support this feature, but changes may be made
to the on\-disk format at any time which will move the feature to the
\fBactive\fR state. Some features may support returning to the \fBenabled\fR
state after becoming \fBactive\fR. See feature\-specific documentation for
details.
.RE

.sp
.ne 2
.na
\fBdisabled\fR
.ad
.RS 12n
This feature's on\-disk format changes have not been made and will not be made
unless an administrator moves the feature to the \fBenabled\fR state. Features
cannot be disabled once they have been enabled.
.RE

.sp
.LP
The state of supported features is exposed through pool properties of the form
\fIfeature@short_name\fR.
.SS "Read\-only compatibility"
.sp
.LP
Some features may make on\-disk format changes that do not interfere with other
software's ability to read from the pool. These features are referred to as
"read\-only compatible". If all unsupported features on a pool are read\-only
compatible, the pool can be imported in read\-only mode by setting the
\fBreadonly\fR property during import (see zpool(8) for details on
importing pools).
.SS "Unsupported features"
.sp
.LP
For each unsupported feature enabled on an imported pool a pool property
named \fIunsupported@feature_name\fR will indicate why the import was allowed
despite the unsupported feature. Possible values for this property are:

.sp
.ne 2
.na
\fBinactive\fR
.ad
.RS 12n
The feature is in the \fBenabled\fR state and therefore the pool's on\-disk
format is still compatible with software that does not support this feature.
.RE

.sp
.ne 2
.na
\fBreadonly\fR
.ad
.RS 12n
The feature is read\-only compatible and the pool has been imported in
read\-only mode.
.RE

.SS "Feature dependencies"
.sp
.LP
Some features depend on other features being enabled in order to function
properly. Enabling a feature will automatically enable any features it
depends on.
.SH FEATURES
.sp
.LP
The following features are supported on this system:

.sp
.ne 2
.na
\fBallocation_classes\fR
.ad
.RS 4n
.TS
l l .
GUID	org.zfsonlinux:allocation_classes
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This feature enables support for separate allocation classes.

This feature becomes \fBactive\fR when a dedicated allocation class vdev
(dedup or special) is created with the \fBzpool create\fR or \fBzpool add\fR
subcommands. With device removal, it can be returned to the \fBenabled\fR
state if all the dedicated allocation class vdevs are removed.
.RE

.sp
.ne 2
.na
\fBasync_destroy\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:async_destroy
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

Destroying a file system requires traversing all of its data in order to
return its used space to the pool. Without \fBasync_destroy\fR the file system
is not fully removed until all space has been reclaimed. If the destroy
operation is interrupted by a reboot or power outage the next attempt to open
the pool will need to complete the destroy operation synchronously.

When \fBasync_destroy\fR is enabled the file system's data will be reclaimed
by a background process, allowing the destroy operation to complete without
traversing the entire file system. The background process is able to resume
interrupted destroys after the pool has been opened, eliminating the need
to finish interrupted destroys as part of the open operation. The amount
of space remaining to be reclaimed by the background process is available
through the \fBfreeing\fR property.

This feature is only \fBactive\fR while \fBfreeing\fR is non\-zero.
.RE

.sp
.ne 2
.na
\fBbookmarks\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:bookmarks
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	extensible_dataset
.TE

This feature enables use of the \fBzfs bookmark\fR subcommand.

This feature is \fBactive\fR while any bookmarks exist in the pool.
All bookmarks in the pool can be listed by running
\fBzfs list -t bookmark -r \fIpoolname\fR\fR.
.RE

.sp
.ne 2
.na
\fBbookmark_v2\fR
.ad
.RS 4n
.TS
l l .
GUID	com.datto:bookmark_v2
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	bookmark, extensible_dataset
.TE

This feature enables the creation and management of larger bookmarks which are
needed for other features in ZFS.

This feature becomes \fBactive\fR when a v2 bookmark is created and will be
returned to the \fBenabled\fR state when all v2 bookmarks are destroyed.
.RE

.sp
.ne 2
.na
\fBdevice_removal\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:device_removal
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	none
.TE

This feature enables the \fBzpool remove\fR subcommand to remove top-level
vdevs, evacuating them to reduce the total size of the pool.

This feature becomes \fBactive\fR when the \fBzpool remove\fR subcommand is used
on a top-level vdev, and will never return to being \fBenabled\fR.
.RE

.sp
.ne 2
.na
\fBedonr\fR
.ad
.RS 4n
.TS
l l .
GUID	org.illumos:edonr
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	extensible_dataset
.TE

This feature enables the use of the Edon-R hash algorithm for checksum,
including for nopwrite (if compression is also enabled, an overwrite of
a block whose checksum matches the data being written will be ignored).
In an abundance of caution, Edon-R requires verification when used with
dedup: \fBzfs set dedup=edonr,verify\fR.  See \fBzfs\fR(8).

Edon-R is a very high-performance hash algorithm that was part
of the NIST SHA-3 competition. It provides extremely high hash
performance (over 350% faster than SHA-256), but was not selected
because of its unsuitability as a general purpose secure hash algorithm.
This implementation utilizes the new salted checksumming functionality
in ZFS, which means that the checksum is pre-seeded with a secret
256-bit random key (stored on the pool) before being fed the data block
to be checksummed. Thus the produced checksums are unique to a given
pool.

When the \fBedonr\fR feature is set to \fBenabled\fR, the administrator
can turn on the \fBedonr\fR checksum on any dataset using the
\fBzfs set checksum=edonr\fR. See zfs(8). This feature becomes
\fBactive\fR once a \fBchecksum\fR property has been set to \fBedonr\fR,
and will return to being \fBenabled\fR once all filesystems that have
ever had their checksum set to \fBedonr\fR are destroyed.

The \fBedonr\fR feature is not supported by GRUB and must not be used on
the pool if GRUB needs to access the pool (e.g. for /boot).
.RE

.sp
.ne 2
.na
\fBembedded_data\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:embedded_data
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	none
.TE

This feature improves the performance and compression ratio of
highly-compressible blocks.  Blocks whose contents can compress to 112 bytes
or smaller can take advantage of this feature.

When this feature is enabled, the contents of highly-compressible blocks are
stored in the block "pointer" itself (a misnomer in this case, as it contains
the compressed data, rather than a pointer to its location on disk).  Thus
the space of the block (one sector, typically 512 bytes or 4KB) is saved,
and no additional i/o is needed to read and write the data block.

This feature becomes \fBactive\fR as soon as it is enabled and will
never return to being \fBenabled\fR.
.RE

.sp
.ne 2
.na
\fBempty_bpobj\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:empty_bpobj
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This feature increases the performance of creating and using a large
number of snapshots of a single filesystem or volume, and also reduces
the disk space required.

When there are many snapshots, each snapshot uses many Block Pointer
Objects (bpobj's) to track blocks associated with that snapshot.
However, in common use cases, most of these bpobj's are empty.  This
feature allows us to create each bpobj on-demand, thus eliminating the
empty bpobjs.

This feature is \fBactive\fR while there are any filesystems, volumes,
or snapshots which were created after enabling this feature.
.RE

.sp
.ne 2
.na
\fBenabled_txg\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:enabled_txg
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

Once this feature is enabled ZFS records the transaction group number
in which new features are enabled. This has no user-visible impact,
but other features may depend on this feature.

This feature becomes \fBactive\fR as soon as it is enabled and will
never return to being \fBenabled\fB.
.RE

.sp
.ne 2
.na
\fBencryption\fR
.ad
.RS 4n
.TS
l l .
GUID	com.datto:encryption
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	bookmark_v2, extensible_dataset
.TE

This feature enables the creation and management of natively encrypted datasets.

This feature becomes \fBactive\fR when an encrypted dataset is created and will
be returned to the \fBenabled\fR state when all datasets that use this feature
are destroyed.
.RE

.sp
.ne 2
.na
\fBextensible_dataset\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:extensible_dataset
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	none
.TE

This feature allows more flexible use of internal ZFS data structures,
and exists for other features to depend on.

This feature will be \fBactive\fR when the first dependent feature uses it,
and will be returned to the \fBenabled\fR state when all datasets that use
this feature are destroyed.
.RE

.sp
.ne 2
.na
\fBfilesystem_limits\fR
.ad
.RS 4n
.TS
l l .
GUID	com.joyent:filesystem_limits
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	extensible_dataset
.TE

This feature enables filesystem and snapshot limits. These limits can be used
to control how many filesystems and/or snapshots can be created at the point in
the tree on which the limits are set.

This feature is \fBactive\fR once either of the limit properties has been
set on a dataset. Once activated the feature is never deactivated.
.RE

.sp
.ne 2
.na
\fBhole_birth\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:hole_birth
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	enabled_txg
.TE

This feature has/had bugs, the result of which is that, if you do a
\fBzfs send -i\fR (or \fB-R\fR, since it uses \fB-i\fR) from an affected
dataset, the receiver will not see any checksum or other errors, but the
resulting destination snapshot will not match the source.  Its use by
\fBzfs send -i\fR has been disabled by default.  See the
\fBsend_holes_without_birth_time\fR module parameter in
zfs-module-parameters(5).

This feature improves performance of incremental sends (\fBzfs send -i\fR)
and receives for objects with many holes. The most common case of
hole-filled objects is zvols.

An incremental send stream from snapshot \fBA\fR to snapshot \fBB\fR
contains information about every block that changed between \fBA\fR and
\fBB\fR. Blocks which did not change between those snapshots can be
identified and omitted from the stream using a piece of metadata called
the 'block birth time', but birth times are not recorded for holes (blocks
filled only with zeroes). Since holes created after \fBA\fR cannot be
distinguished from holes created before \fBA\fR, information about every
hole in the entire filesystem or zvol is included in the send stream.

For workloads where holes are rare this is not a problem. However, when
incrementally replicating filesystems or zvols with many holes (for
example a zvol formatted with another filesystem) a lot of time will
be spent sending and receiving unnecessary information about holes that
already exist on the receiving side.

Once the \fBhole_birth\fR feature has been enabled the block birth times
of all new holes will be recorded. Incremental sends between snapshots
created after this feature is enabled will use this new metadata to avoid
sending information about holes that already exist on the receiving side.

This feature becomes \fBactive\fR as soon as it is enabled and will
never return to being \fBenabled\fB.
.RE

.sp
.ne 2
.na
\fBlarge_blocks\fR
.ad
.RS 4n
.TS
l l .
GUID	org.open-zfs:large_blocks
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	extensible_dataset
.TE

The \fBlarge_block\fR feature allows the record size on a dataset to be
set larger than 128KB.

This feature becomes \fBactive\fR once a dataset contains a file with
a block size larger than 128KB, and will return to being \fBenabled\fR once all
filesystems that have ever had their recordsize larger than 128KB are destroyed.
.RE

.sp
.ne 2
.na
\fBlarge_dnode\fR
.ad
.RS 4n
.TS
l l .
GUID	org.zfsonlinux:large_dnode
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	extensible_dataset
.TE

The \fBlarge_dnode\fR feature allows the size of dnodes in a dataset to be
set larger than 512B.

This feature becomes \fBactive\fR once a dataset contains an object with
a dnode larger than 512B, which occurs as a result of setting the
\fBdnodesize\fR dataset property to a value other than \fBlegacy\fR. The
feature will return to being \fBenabled\fR once all filesystems that
have ever contained a dnode larger than 512B are destroyed. Large dnodes
allow more data to be stored in the bonus buffer, thus potentially
improving performance by avoiding the use of spill blocks.
.RE

.sp
.ne 2
.na
\fBlz4_compress\fR
.ad
.RS 4n
.TS
l l .
GUID	org.illumos:lz4_compress
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	none
.TE

\fBlz4\fR is a high-performance real-time compression algorithm that
features significantly faster compression and decompression as well as a
higher compression ratio than the older \fBlzjb\fR compression.
Typically, \fBlz4\fR compression is approximately 50% faster on
compressible data and 200% faster on incompressible data than
\fBlzjb\fR. It is also approximately 80% faster on decompression, while
giving approximately 10% better compression ratio.

When the \fBlz4_compress\fR feature is set to \fBenabled\fR, the
administrator can turn on \fBlz4\fR compression on any dataset on the
pool using the zfs(8) command. Please note that doing so will
immediately activate the \fBlz4_compress\fR feature on the underlying
pool using the zfs(8) command. Also, all newly written metadata
will be compressed with \fBlz4\fR algorithm. Since this feature is not
read-only compatible, this operation will render the pool unimportable
on systems without support for the \fBlz4_compress\fR feature.

Booting off of \fBlz4\fR-compressed root pools is supported.

This feature becomes \fBactive\fR as soon as it is enabled and will
never return to being \fBenabled\fB.
.RE

.sp
.ne 2
.na
\fBmulti_vdev_crash_dump\fR
.ad
.RS 4n
.TS
l l .
GUID	com.joyent:multi_vdev_crash_dump
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	none
.TE

This feature allows a dump device to be configured with a pool comprised
of multiple vdevs.  Those vdevs may be arranged in any mirrored or raidz
configuration.

When the \fBmulti_vdev_crash_dump\fR feature is set to \fBenabled\fR,
the administrator can use the \fBdumpadm\fR(1M) command to configure a
dump device on a pool comprised of multiple vdevs.

Under Linux this feature is registered for compatibility but not used.
New pools created under Linux will have the feature \fBenabled\fR but
will never transition to \fB\fBactive\fR.  This functionality is not
required in order to support crash dumps under Linux.  Existing pools
where this feature is \fB\fBactive\fR can be imported.
.RE

.sp
.ne 2
.na
\fBobsolete_counts\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:obsolete_counts
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	device_removal
.TE

This feature is an enhancement of device_removal, which will over time
reduce the memory used to track removed devices.  When indirect blocks
are freed or remapped, we note that their part of the indirect mapping
is "obsolete", i.e. no longer needed.

This feature becomes \fBactive\fR when the \fBzpool remove\fR subcommand is
used on a top-level vdev, and will never return to being \fBenabled\fR.
.RE

.sp
.ne 2
.na
\fBproject_quota\fR
.ad
.RS 4n
.TS
l l .
GUID	org.zfsonlinux:project_quota
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	extensible_dataset
.TE

This feature allows administrators to account the spaces and objects usage
information against the project identifier (ID).

The project ID is new object-based attribute. When upgrading an existing
filesystem, object without project ID attribute will be assigned a zero
project ID. After this feature is enabled, newly created object will inherit
its parent directory's project ID if the parent inherit flag is set (via
\fBchattr +/-P\fR or \fBzfs project [-s|-C]\fR). Otherwise, the new object's
project ID will be set as zero. An object's project ID can be changed at
anytime by the owner (or privileged user) via \fBchattr -p $prjid\fR or
\fBzfs project -p $prjid\fR.

This feature will become \fBactive\fR as soon as it is enabled and will never
return to being \fBdisabled\fR. Each filesystem will be upgraded automatically
when remounted or when new file is created under that filesystem. The upgrade
can also be triggered on filesystems via `zfs set version=current <pool/fs>`.
The upgrade process runs in the background and may take a while to complete
for the filesystems containing a large number of files.
.RE

.sp
.ne 2
.na
\fBresilver_defer\fR
.ad
.RS 4n
.TS
l l .
GUID	com.datto:resilver_defer
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This feature allows zfs to postpone new resilvers if an existing one is already
in progress. Without this feature, any new resilvers will cause the currently
running one to be immediately restarted from the beginning.

This feature becomes \fBactive\fR once a resilver has been deferred, and
returns to being \fBenabled\fR when the deferred resilver begins.
.RE

.sp
.ne 2
.na
\fBsha512\fR
.ad
.RS 4n
.TS
l l .
GUID	org.illumos:sha512
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	extensible_dataset
.TE

This feature enables the use of the SHA-512/256 truncated hash algorithm
(FIPS 180-4) for checksum and dedup. The native 64-bit arithmetic of
SHA-512 provides an approximate 50% performance boost over SHA-256 on
64-bit hardware and is thus a good minimum-change replacement candidate
for systems where hash performance is important, but these systems
cannot for whatever reason utilize the faster \fBskein\fR and
\fBedonr\fR algorithms.

When the \fBsha512\fR feature is set to \fBenabled\fR, the administrator
can turn on the \fBsha512\fR checksum on any dataset using
\fBzfs set checksum=sha512\fR. See zfs(8). This feature becomes
\fBactive\fR once a \fBchecksum\fR property has been set to \fBsha512\fR,
and will return to being \fBenabled\fR once all filesystems that have
ever had their checksum set to \fBsha512\fR are destroyed.

The \fBsha512\fR feature is not supported by GRUB and must not be used on
the pool if GRUB needs to access the pool (e.g. for /boot).
.RE

.sp
.ne 2
.na
\fBskein\fR
.ad
.RS 4n
.TS
l l .
GUID	org.illumos:skein
READ\-ONLY COMPATIBLE	no
DEPENDENCIES	extensible_dataset
.TE

This feature enables the use of the Skein hash algorithm for checksum
and dedup. Skein is a high-performance secure hash algorithm that was a
finalist in the NIST SHA-3 competition. It provides a very high security
margin and high performance on 64-bit hardware (80% faster than
SHA-256). This implementation also utilizes the new salted checksumming
functionality in ZFS, which means that the checksum is pre-seeded with a
secret 256-bit random key (stored on the pool) before being fed the data
block to be checksummed. Thus the produced checksums are unique to a
given pool, preventing hash collision attacks on systems with dedup.

When the \fBskein\fR feature is set to \fBenabled\fR, the administrator
can turn on the \fBskein\fR checksum on any dataset using
\fBzfs set checksum=skein\fR. See zfs(8). This feature becomes
\fBactive\fR once a \fBchecksum\fR property has been set to \fBskein\fR,
and will return to being \fBenabled\fR once all filesystems that have
ever had their checksum set to \fBskein\fR are destroyed.

The \fBskein\fR feature is not supported by GRUB and must not be used on
the pool if GRUB needs to access the pool (e.g. for /boot).
.RE

.sp
.ne 2
.na
\fBspacemap_histogram\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:spacemap_histogram
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This features allows ZFS to maintain more information about how free space
is organized within the pool. If this feature is \fBenabled\fR, ZFS will
set this feature to \fBactive\fR when a new space map object is created or
an existing space map is upgraded to the new format. Once the feature is
\fBactive\fR, it will remain in that state until the pool is destroyed.
.RE

.sp
.ne 2
.na
\fBspacemap_v2\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:spacemap_v2
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This feature enables the use of the new space map encoding which
consists of two words (instead of one) whenever it is advantageous.
The new encoding allows space maps to represent large regions of
space more efficiently on-disk while also increasing their maximum
addressable offset.

This feature becomes \fBactive\fR once it is \fBenabled\fR, and never
returns back to being \fBenabled\fR.
.RE

.sp
.ne 2
.na
\fBuserobj_accounting\fR
.ad
.RS 4n
.TS
l l .
GUID	org.zfsonlinux:userobj_accounting
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	extensible_dataset
.TE

This feature allows administrators to account the object usage information
by user and group.

This feature becomes \fBactive\fR as soon as it is enabled and will never
return to being \fBenabled\fR. Each filesystem will be upgraded automatically
when remounted, or when new files are created under that filesystem.
The upgrade can also be started manually on filesystems by running
`zfs set version=current <pool/fs>`. The upgrade process runs in the background
and may take a while to complete for filesystems containing a large number of
files.
.RE

.sp
.ne 2
.na
\fBzpool_checkpoint\fR
.ad
.RS 4n
.TS
l l .
GUID	com.delphix:zpool_checkpoint
READ\-ONLY COMPATIBLE	yes
DEPENDENCIES	none
.TE

This feature enables the \fBzpool checkpoint\fR subcommand that can
checkpoint the state of the pool at the time it was issued and later
rewind back to it or discard it.

This feature becomes \fBactive\fR when the \fBzpool checkpoint\fR subcommand
is used to checkpoint the pool.
The feature will only return back to being \fBenabled\fR when the pool
is rewound or the checkpoint has been discarded.
.RE

.SH "SEE ALSO"
zpool(8)
