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