xref: /freebsd/sys/contrib/openzfs/man/man7/zfsconcepts.7 (revision d7d962ead0b6e5e8a39202d0590022082bf5bfb6)
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 http://www.opensolaris.org/os/licensing.
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) 2009 Sun Microsystems, Inc. All Rights Reserved.
22.\" Copyright 2011 Joshua M. Clulow <josh@sysmgr.org>
23.\" Copyright (c) 2011, 2019 by Delphix. All rights reserved.
24.\" Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
25.\" Copyright (c) 2014, Joyent, Inc. All rights reserved.
26.\" Copyright (c) 2014 by Adam Stevko. All rights reserved.
27.\" Copyright (c) 2014 Integros [integros.com]
28.\" Copyright 2019 Richard Laager. All rights reserved.
29.\" Copyright 2018 Nexenta Systems, Inc.
30.\" Copyright 2019 Joyent, Inc.
31.\"
32.Dd June 30, 2019
33.Dt ZFSCONCEPTS 7
34.Os
35.
36.Sh NAME
37.Nm zfsconcepts
38.Nd overview of ZFS concepts
39.
40.Sh DESCRIPTION
41.Ss ZFS File System Hierarchy
42A ZFS storage pool is a logical collection of devices that provide space for
43datasets.
44A storage pool is also the root of the ZFS file system hierarchy.
45.Pp
46The root of the pool can be accessed as a file system, such as mounting and
47unmounting, taking snapshots, and setting properties.
48The physical storage characteristics, however, are managed by the
49.Xr zpool 8
50command.
51.Pp
52See
53.Xr zpool 8
54for more information on creating and administering pools.
55.Ss Snapshots
56A snapshot is a read-only copy of a file system or volume.
57Snapshots can be created extremely quickly, and initially consume no additional
58space within the pool.
59As data within the active dataset changes, the snapshot consumes more data than
60would otherwise be shared with the active dataset.
61.Pp
62Snapshots can have arbitrary names.
63Snapshots of volumes can be cloned or rolled back, visibility is determined
64by the
65.Sy snapdev
66property of the parent volume.
67.Pp
68File system snapshots can be accessed under the
69.Pa .zfs/snapshot
70directory in the root of the file system.
71Snapshots are automatically mounted on demand and may be unmounted at regular
72intervals.
73The visibility of the
74.Pa .zfs
75directory can be controlled by the
76.Sy snapdir
77property.
78.Ss Bookmarks
79A bookmark is like a snapshot, a read-only copy of a file system or volume.
80Bookmarks can be created extremely quickly, compared to snapshots, and they
81consume no additional space within the pool.
82Bookmarks can also have arbitrary names, much like snapshots.
83.Pp
84Unlike snapshots, bookmarks can not be accessed through the filesystem in any way.
85From a storage standpoint a bookmark just provides a way to reference
86when a snapshot was created as a distinct object.
87Bookmarks are initially tied to a snapshot, not the filesystem or volume,
88and they will survive if the snapshot itself is destroyed.
89Since they are very light weight there's little incentive to destroy them.
90.Ss Clones
91A clone is a writable volume or file system whose initial contents are the same
92as another dataset.
93As with snapshots, creating a clone is nearly instantaneous, and initially
94consumes no additional space.
95.Pp
96Clones can only be created from a snapshot.
97When a snapshot is cloned, it creates an implicit dependency between the parent
98and child.
99Even though the clone is created somewhere else in the dataset hierarchy, the
100original snapshot cannot be destroyed as long as a clone exists.
101The
102.Sy origin
103property exposes this dependency, and the
104.Cm destroy
105command lists any such dependencies, if they exist.
106.Pp
107The clone parent-child dependency relationship can be reversed by using the
108.Cm promote
109subcommand.
110This causes the
111.Qq origin
112file system to become a clone of the specified file system, which makes it
113possible to destroy the file system that the clone was created from.
114.Ss "Mount Points"
115Creating a ZFS file system is a simple operation, so the number of file systems
116per system is likely to be numerous.
117To cope with this, ZFS automatically manages mounting and unmounting file
118systems without the need to edit the
119.Pa /etc/fstab
120file.
121All automatically managed file systems are mounted by ZFS at boot time.
122.Pp
123By default, file systems are mounted under
124.Pa /path ,
125where
126.Ar path
127is the name of the file system in the ZFS namespace.
128Directories are created and destroyed as needed.
129.Pp
130A file system can also have a mount point set in the
131.Sy mountpoint
132property.
133This directory is created as needed, and ZFS automatically mounts the file
134system when the
135.Nm zfs Cm mount Fl a
136command is invoked
137.Po without editing
138.Pa /etc/fstab
139.Pc .
140The
141.Sy mountpoint
142property can be inherited, so if
143.Em pool/home
144has a mount point of
145.Pa /export/stuff ,
146then
147.Em pool/home/user
148automatically inherits a mount point of
149.Pa /export/stuff/user .
150.Pp
151A file system
152.Sy mountpoint
153property of
154.Sy none
155prevents the file system from being mounted.
156.Pp
157If needed, ZFS file systems can also be managed with traditional tools
158.Po
159.Nm mount ,
160.Nm umount ,
161.Pa /etc/fstab
162.Pc .
163If a file system's mount point is set to
164.Sy legacy ,
165ZFS makes no attempt to manage the file system, and the administrator is
166responsible for mounting and unmounting the file system.
167Because pools must
168be imported before a legacy mount can succeed, administrators should ensure
169that legacy mounts are only attempted after the zpool import process
170finishes at boot time.
171For example, on machines using systemd, the mount option
172.Pp
173.Nm x-systemd.requires=zfs-import.target
174.Pp
175will ensure that the zfs-import completes before systemd attempts mounting
176the filesystem.
177See
178.Xr systemd.mount 5
179for details.
180.Ss Deduplication
181Deduplication is the process for removing redundant data at the block level,
182reducing the total amount of data stored.
183If a file system has the
184.Sy dedup
185property enabled, duplicate data blocks are removed synchronously.
186The result
187is that only unique data is stored and common components are shared among files.
188.Pp
189Deduplicating data is a very resource-intensive operation.
190It is generally recommended that you have at least 1.25 GiB of RAM
191per 1 TiB of storage when you enable deduplication.
192Calculating the exact requirement depends heavily
193on the type of data stored in the pool.
194.Pp
195Enabling deduplication on an improperly-designed system can result in
196performance issues (slow IO and administrative operations).
197It can potentially lead to problems importing a pool due to memory exhaustion.
198Deduplication can consume significant processing power (CPU) and memory as well
199as generate additional disk IO.
200.Pp
201Before creating a pool with deduplication enabled, ensure that you have planned
202your hardware requirements appropriately and implemented appropriate recovery
203practices, such as regular backups.
204Consider using the
205.Sy compression
206property as a less resource-intensive alternative.
207