xref: /freebsd/sys/contrib/openzfs/man/man7/zpoolprops.7 (revision b64c5a0ace59af62eff52bfe110a521dc73c937b)
1.\"
2.\" CDDL HEADER START
3.\"
4.\" The contents of this file are subject to the terms of the
5.\" Common Development and Distribution License (the "License").
6.\" You may not use this file except in compliance with the License.
7.\"
8.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9.\" or https://opensource.org/licenses/CDDL-1.0.
10.\" See the License for the specific language governing permissions
11.\" and limitations under the License.
12.\"
13.\" When distributing Covered Code, include this CDDL HEADER in each
14.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15.\" If applicable, add the following below this CDDL HEADER, with the
16.\" fields enclosed by brackets "[]" replaced with your own identifying
17.\" information: Portions Copyright [yyyy] [name of copyright owner]
18.\"
19.\" CDDL HEADER END
20.\"
21.\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved.
22.\" Copyright (c) 2012, 2018 by Delphix. All rights reserved.
23.\" Copyright (c) 2012 Cyril Plisko. All Rights Reserved.
24.\" Copyright (c) 2017 Datto Inc.
25.\" Copyright (c) 2018 George Melikov. All Rights Reserved.
26.\" Copyright 2017 Nexenta Systems, Inc.
27.\" Copyright (c) 2017 Open-E, Inc. All Rights Reserved.
28.\" Copyright (c) 2021, Colm Buckley <colm@tuatha.org>
29.\" Copyright (c) 2023, Klara Inc.
30.\"
31.Dd November 18, 2024
32.Dt ZPOOLPROPS 7
33.Os
34.
35.Sh NAME
36.Nm zpoolprops
37.Nd properties of ZFS storage pools
38.
39.Sh DESCRIPTION
40Each pool has several properties associated with it.
41Some properties are read-only statistics while others are configurable and
42change the behavior of the pool.
43.Pp
44User properties have no effect on ZFS behavior.
45Use them to annotate pools in a way that is meaningful in your environment.
46For more information about user properties, see the
47.Sx User Properties
48section.
49.Pp
50The following are read-only properties:
51.Bl -tag -width "unsupported@guid"
52.It Sy allocated
53Amount of storage used within the pool.
54See
55.Sy fragmentation
56and
57.Sy free
58for more information.
59.It Sy bcloneratio
60The ratio of the total amount of storage that would be required to store all
61the cloned blocks without cloning to the actual storage used.
62The
63.Sy bcloneratio
64property is calculated as:
65.Pp
66.Sy ( ( bclonesaved + bcloneused ) * 100 ) / bcloneused
67.It Sy bclonesaved
68The amount of additional storage that would be required if block cloning
69was not used.
70.It Sy bcloneused
71The amount of storage used by cloned blocks.
72.It Sy capacity
73Percentage of pool space used.
74This property can also be referred to by its shortened column name,
75.Sy cap .
76.It Sy dedupcached
77Total size of the deduplication table currently loaded into the ARC.
78See
79.Xr zpool-prefetch 8 .
80.It Sy dedup_table_size
81Total on-disk size of the deduplication table.
82.It Sy expandsize
83Amount of uninitialized space within the pool or device that can be used to
84increase the total capacity of the pool.
85On whole-disk vdevs, this is the space beyond the end of the GPT –
86typically occurring when a LUN is dynamically expanded
87or a disk replaced with a larger one.
88On partition vdevs, this is the space appended to the partition after it was
89added to the pool – most likely by resizing it in-place.
90The space can be claimed for the pool by bringing it online with
91.Sy autoexpand=on
92or using
93.Nm zpool Cm online Fl e .
94.It Sy fragmentation
95The amount of fragmentation in the pool.
96As the amount of space
97.Sy allocated
98increases, it becomes more difficult to locate
99.Sy free
100space.
101This may result in lower write performance compared to pools with more
102unfragmented free space.
103.It Sy free
104The amount of free space available in the pool.
105By contrast, the
106.Xr zfs 8
107.Sy available
108property describes how much new data can be written to ZFS filesystems/volumes.
109The zpool
110.Sy free
111property is not generally useful for this purpose, and can be substantially more
112than the zfs
113.Sy available
114space.
115This discrepancy is due to several factors, including raidz parity;
116zfs reservation, quota, refreservation, and refquota properties; and space set
117aside by
118.Sy spa_slop_shift
119(see
120.Xr zfs 4
121for more information).
122.It Sy freeing
123After a file system or snapshot is destroyed, the space it was using is
124returned to the pool asynchronously.
125.Sy freeing
126is the amount of space remaining to be reclaimed.
127Over time
128.Sy freeing
129will decrease while
130.Sy free
131increases.
132.It Sy guid
133A unique identifier for the pool.
134.It Sy health
135The current health of the pool.
136Health can be one of
137.Sy ONLINE , DEGRADED , FAULTED , OFFLINE, REMOVED , UNAVAIL .
138.It Sy last_scrubbed_txg
139Indicates the transaction group (TXG) up to which the most recent scrub
140operation has checked and repaired the dataset.
141This provides insight into the data integrity status of their pool at
142a specific point in time.
143.Xr zpool-scrub 8
144can utilize this property to scan only data that has changed since the last
145scrub completed, when given the
146.Fl C
147flag.
148This property is not updated when performing an error scrub with the
149.Fl e
150flag.
151.It Sy leaked
152Space not released while
153.Sy freeing
154due to corruption, now permanently leaked into the pool.
155.It Sy load_guid
156A unique identifier for the pool.
157Unlike the
158.Sy guid
159property, this identifier is generated every time we load the pool (i.e. does
160not persist across imports/exports) and never changes while the pool is loaded
161(even if a
162.Sy reguid
163operation takes place).
164.It Sy size
165Total size of the storage pool.
166.It Sy unsupported@ Ns Em guid
167Information about unsupported features that are enabled on the pool.
168See
169.Xr zpool-features 7
170for details.
171.El
172.Pp
173The space usage properties report actual physical space available to the
174storage pool.
175The physical space can be different from the total amount of space that any
176contained datasets can actually use.
177The amount of space used in a raidz configuration depends on the characteristics
178of the data being written.
179In addition, ZFS reserves some space for internal accounting that the
180.Xr zfs 8
181command takes into account, but the
182.Nm
183command does not.
184For non-full pools of a reasonable size, these effects should be invisible.
185For small pools, or pools that are close to being completely full, these
186discrepancies may become more noticeable.
187.Pp
188The following property can be set at creation time and import time:
189.Bl -tag -width Ds
190.It Sy altroot
191Alternate root directory.
192If set, this directory is prepended to any mount points within the pool.
193This can be used when examining an unknown pool where the mount points cannot be
194trusted, or in an alternate boot environment, where the typical paths are not
195valid.
196.Sy altroot
197is not a persistent property.
198It is valid only while the system is up.
199Setting
200.Sy altroot
201defaults to using
202.Sy cachefile Ns = Ns Sy none ,
203though this may be overridden using an explicit setting.
204.El
205.Pp
206The following property can be set only at import time:
207.Bl -tag -width Ds
208.It Sy readonly Ns = Ns Sy on Ns | Ns Sy off
209If set to
210.Sy on ,
211the pool will be imported in read-only mode.
212This property can also be referred to by its shortened column name,
213.Sy rdonly .
214.El
215.Pp
216The following properties can be set at creation time and import time, and later
217changed with the
218.Nm zpool Cm set
219command:
220.Bl -tag -width Ds
221.It Sy ashift Ns = Ns Ar ashift
222Pool sector size exponent, to the power of
223.Sy 2
224(internally referred to as
225.Sy ashift ) .
226Values from 9 to 16, inclusive, are valid; also, the
227value 0 (the default) means to auto-detect using the kernel's block
228layer and a ZFS internal exception list.
229I/O operations will be aligned to the specified size boundaries.
230Additionally, the minimum (disk)
231write size will be set to the specified size, so this represents a
232space/performance trade-off.
233For optimal performance, the pool sector size should be greater than
234or equal to the sector size of the underlying disks.
235The typical case for setting this property is when
236performance is important and the underlying disks use 4KiB sectors but
237report 512B sectors to the OS (for compatibility reasons); in that
238case, set
239.Sy ashift Ns = Ns Sy 12
240(which is
241.Sy 1<<12 No = Sy 4096 ) .
242When set, this property is
243used as the default hint value in subsequent vdev operations (add,
244attach and replace).
245Changing this value will not modify any existing
246vdev, not even on disk replacement; however it can be used, for
247instance, to replace a dying 512B sectors disk with a newer 4KiB
248sectors device: this will probably result in bad performance but at the
249same time could prevent loss of data.
250.It Sy autoexpand Ns = Ns Sy on Ns | Ns Sy off
251Controls automatic pool expansion when the underlying LUN is grown.
252If set to
253.Sy on ,
254the pool will be resized according to the size of the expanded device.
255If the device is part of a mirror or raidz then all devices within that
256mirror/raidz group must be expanded before the new space is made available to
257the pool.
258The default behavior is
259.Sy off .
260This property can also be referred to by its shortened column name,
261.Sy expand .
262.It Sy autoreplace Ns = Ns Sy on Ns | Ns Sy off
263Controls automatic device replacement.
264If set to
265.Sy off ,
266device replacement must be initiated by the administrator by using the
267.Nm zpool Cm replace
268command.
269If set to
270.Sy on ,
271any new device, found in the same physical location as a device that previously
272belonged to the pool, is automatically formatted and replaced.
273The default behavior is
274.Sy off .
275This property can also be referred to by its shortened column name,
276.Sy replace .
277Autoreplace can also be used with virtual disks (like device
278mapper) provided that you use the /dev/disk/by-vdev paths setup by
279vdev_id.conf.
280See the
281.Xr vdev_id 8
282manual page for more details.
283Autoreplace and autoonline require the ZFS Event Daemon be configured and
284running.
285See the
286.Xr zed 8
287manual page for more details.
288.It Sy autotrim Ns = Ns Sy on Ns | Ns Sy off
289When set to
290.Sy on
291space which has been recently freed, and is no longer allocated by the pool,
292will be periodically trimmed.
293This allows block device vdevs which support
294BLKDISCARD, such as SSDs, or file vdevs on which the underlying file system
295supports hole-punching, to reclaim unused blocks.
296The default value for this property is
297.Sy off .
298.Pp
299Automatic TRIM does not immediately reclaim blocks after a free.
300Instead, it will optimistically delay allowing smaller ranges to be aggregated
301into a few larger ones.
302These can then be issued more efficiently to the storage.
303TRIM on L2ARC devices is enabled by setting
304.Sy l2arc_trim_ahead > 0 .
305.Pp
306Be aware that automatic trimming of recently freed data blocks can put
307significant stress on the underlying storage devices.
308This will vary depending of how well the specific device handles these commands.
309For lower-end devices it is often possible to achieve most of the benefits
310of automatic trimming by running an on-demand (manual) TRIM periodically
311using the
312.Nm zpool Cm trim
313command.
314.It Sy bootfs Ns = Ns Sy (unset) Ns | Ns Ar pool Ns Op / Ns Ar dataset
315Identifies the default bootable dataset for the root pool.
316This property is expected to be set mainly by the installation and upgrade
317programs.
318Not all Linux distribution boot processes use the bootfs property.
319.It Sy cachefile Ns = Ns Ar path Ns | Ns Sy none
320Controls the location of where the pool configuration is cached.
321Discovering all pools on system startup requires a cached copy of the
322configuration data that is stored on the root file system.
323All pools in this cache are automatically imported when the system boots.
324Some environments, such as install and clustering, need to cache this
325information in a different location so that pools are not automatically
326imported.
327Setting this property caches the pool configuration in a different location that
328can later be imported with
329.Nm zpool Cm import Fl c .
330Setting it to the value
331.Sy none
332creates a temporary pool that is never cached, and the
333.Qq
334.Pq empty string
335uses the default location.
336.Pp
337Multiple pools can share the same cache file.
338Because the kernel destroys and recreates this file when pools are added and
339removed, care should be taken when attempting to access this file.
340When the last pool using a
341.Sy cachefile
342is exported or destroyed, the file will be empty.
343.It Sy comment Ns = Ns Ar text
344A text string consisting of printable ASCII characters that will be stored
345such that it is available even if the pool becomes faulted.
346An administrator can provide additional information about a pool using this
347property.
348.It Sy compatibility Ns = Ns Sy off Ns | Ns Sy legacy Ns | Ns Ar file Ns Oo , Ns Ar file Oc Ns …
349Specifies that the pool maintain compatibility with specific feature sets.
350When set to
351.Sy off
352(or unset) compatibility is disabled (all features may be enabled); when set to
353.Sy legacy
354no features may be enabled.
355When set to a comma-separated list of filenames
356(each filename may either be an absolute path, or relative to
357.Pa /etc/zfs/compatibility.d
358or
359.Pa /usr/share/zfs/compatibility.d )
360the lists of requested features are read from those files, separated by
361whitespace and/or commas.
362Only features present in all files may be enabled.
363.Pp
364See
365.Xr zpool-features 7 ,
366.Xr zpool-create 8
367and
368.Xr zpool-upgrade 8
369for more information on the operation of compatibility feature sets.
370.It Sy dedup_table_quota Ns = Ns Ar number Ns | Ns Sy none Ns | Ns Sy auto
371This property sets a limit on the on-disk size of the pool's dedup table.
372Entries will not be added to the dedup table once this size is reached;
373if a dedup table already exists, and is larger than this size, they
374will not be removed as part of setting this property.
375Existing entries will still have their reference counts updated.
376.Pp
377The actual size limit of the table may be above or below the quota,
378depending on the actual on-disk size of the entries (which may be
379approximated for purposes of calculating the quota).
380That is, setting a quota size of 1M may result in the maximum size being
381slightly below, or slightly above, that value.
382Set to
383.Sy 'none'
384to disable.
385In automatic mode, which is the default, the size of a dedicated dedup vdev
386is used as the quota limit.
387.Pp
388The
389.Sy dedup_table_quota
390property works for both legacy and fast dedup tables.
391.It Sy dedupditto Ns = Ns Ar number
392This property is deprecated and no longer has any effect.
393.It Sy delegation Ns = Ns Sy on Ns | Ns Sy off
394Controls whether a non-privileged user is granted access based on the dataset
395permissions defined on the dataset.
396See
397.Xr zfs 8
398for more information on ZFS delegated administration.
399.It Sy failmode Ns = Ns Sy wait Ns | Ns Sy continue Ns | Ns Sy panic
400Controls the system behavior in the event of catastrophic pool failure.
401This condition is typically a result of a loss of connectivity to the underlying
402storage device(s) or a failure of all devices within the pool.
403The behavior of such an event is determined as follows:
404.Bl -tag -width "continue"
405.It Sy wait
406Blocks all I/O access until the device connectivity is recovered and the errors
407are cleared with
408.Nm zpool Cm clear .
409This is the default behavior.
410.It Sy continue
411Returns
412.Er EIO
413to any new write I/O requests but allows reads to any of the remaining healthy
414devices.
415Any write requests that have yet to be committed to disk would be blocked.
416.It Sy panic
417Prints out a message to the console and generates a system crash dump.
418.El
419.It Sy feature@ Ns Ar feature_name Ns = Ns Sy enabled
420The value of this property is the current state of
421.Ar feature_name .
422The only valid value when setting this property is
423.Sy enabled
424which moves
425.Ar feature_name
426to the enabled state.
427See
428.Xr zpool-features 7
429for details on feature states.
430.It Sy listsnapshots Ns = Ns Sy on Ns | Ns Sy off
431Controls whether information about snapshots associated with this pool is
432output when
433.Nm zfs Cm list
434is run without the
435.Fl t
436option.
437The default value is
438.Sy off .
439This property can also be referred to by its shortened name,
440.Sy listsnaps .
441.It Sy multihost Ns = Ns Sy on Ns | Ns Sy off
442Controls whether a pool activity check should be performed during
443.Nm zpool Cm import .
444When a pool is determined to be active it cannot be imported, even with the
445.Fl f
446option.
447This property is intended to be used in failover configurations
448where multiple hosts have access to a pool on shared storage.
449.Pp
450Multihost provides protection on import only.
451It does not protect against an
452individual device being used in multiple pools, regardless of the type of vdev.
453See the discussion under
454.Nm zpool Cm create .
455.Pp
456When this property is on, periodic writes to storage occur to show the pool is
457in use.
458See
459.Sy zfs_multihost_interval
460in the
461.Xr zfs 4
462manual page.
463In order to enable this property each host must set a unique hostid.
464See
465.Xr genhostid 1
466.Xr zgenhostid 8
467.Xr spl 4
468for additional details.
469The default value is
470.Sy off .
471.It Sy version Ns = Ns Ar version
472The current on-disk version of the pool.
473This can be increased, but never decreased.
474The preferred method of updating pools is with the
475.Nm zpool Cm upgrade
476command, though this property can be used when a specific version is needed for
477backwards compatibility.
478Once feature flags are enabled on a pool this property will no longer have a
479value.
480.El
481.
482.Ss User Properties
483In addition to the standard native properties, ZFS supports arbitrary user
484properties.
485User properties have no effect on ZFS behavior, but applications or
486administrators can use them to annotate pools.
487.Pp
488User property names must contain a colon
489.Pq Qq Sy \&:
490character to distinguish them from native properties.
491They may contain lowercase letters, numbers, and the following punctuation
492characters: colon
493.Pq Qq Sy \&: ,
494dash
495.Pq Qq Sy - ,
496period
497.Pq Qq Sy \&. ,
498and underscore
499.Pq Qq Sy _ .
500The expected convention is that the property name is divided into two portions
501such as
502.Ar module : Ns Ar property ,
503but this namespace is not enforced by ZFS.
504User property names can be at most 255 characters, and cannot begin with a dash
505.Pq Qq Sy - .
506.Pp
507When making programmatic use of user properties, it is strongly suggested to use
508a reversed DNS domain name for the
509.Ar module
510component of property names to reduce the chance that two
511independently-developed packages use the same property name for different
512purposes.
513.Pp
514The values of user properties are arbitrary strings and
515are never validated.
516All of the commands that operate on properties
517.Po Nm zpool Cm list ,
518.Nm zpool Cm get ,
519.Nm zpool Cm set ,
520and so forth
521.Pc
522can be used to manipulate both native properties and user properties.
523Use
524.Nm zpool Cm set Ar name Ns =
525to clear a user property.
526Property values are limited to 8192 bytes.
527