xref: /freebsd/sys/contrib/openzfs/man/man8/zfs-mount-generator.8.in (revision 1603881667360c015f6685131f2f25474fa67a72)
1eda14cbcSMatt Macy.\"
2eda14cbcSMatt Macy.\" Copyright 2018 Antonio Russo <antonio.e.russo@gmail.com>
3eda14cbcSMatt Macy.\" Copyright 2019 Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl>
4eda14cbcSMatt Macy.\" Copyright 2020 InsanePrawn <insane.prawny@gmail.com>
5eda14cbcSMatt Macy.\"
6eda14cbcSMatt Macy.\" Permission is hereby granted, free of charge, to any person obtaining
7eda14cbcSMatt Macy.\" a copy of this software and associated documentation files (the
8eda14cbcSMatt Macy.\" "Software"), to deal in the Software without restriction, including
9eda14cbcSMatt Macy.\" without limitation the rights to use, copy, modify, merge, publish,
10eda14cbcSMatt Macy.\" distribute, sublicense, and/or sell copies of the Software, and to
11eda14cbcSMatt Macy.\" permit persons to whom the Software is furnished to do so, subject to
12eda14cbcSMatt Macy.\" the following conditions:
13eda14cbcSMatt Macy.\"
14eda14cbcSMatt Macy.\" The above copyright notice and this permission notice shall be
15eda14cbcSMatt Macy.\" included in all copies or substantial portions of the Software.
16eda14cbcSMatt Macy.\"
17eda14cbcSMatt Macy.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18eda14cbcSMatt Macy.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19eda14cbcSMatt Macy.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20eda14cbcSMatt Macy.\" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21eda14cbcSMatt Macy.\" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22eda14cbcSMatt Macy.\" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23eda14cbcSMatt Macy.\" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24*16038816SMartin Matuska.\"
25*16038816SMartin Matuska.Dd May 31, 2021
26*16038816SMartin Matuska.Dt ZFS-MOUNT-GENERATOR 8
27*16038816SMartin Matuska.Os
28eda14cbcSMatt Macy.
29*16038816SMartin Matuska.Sh NAME
30*16038816SMartin Matuska.Nm zfs-mount-generator
31*16038816SMartin Matuska.Nd generate systemd mount units for ZFS filesystems
32*16038816SMartin Matuska.Sh SYNOPSIS
33*16038816SMartin Matuska.Pa @systemdgeneratordir@/zfs-mount-generator
34*16038816SMartin Matuska.
35*16038816SMartin Matuska.Sh DESCRIPTION
36*16038816SMartin Matuska.Nm
37*16038816SMartin Matuskais a
38*16038816SMartin Matuska.Xr systemd.generator 7
39*16038816SMartin Matuskathat generates native
40*16038816SMartin Matuska.Xr systemd.mount 5
41*16038816SMartin Matuskaunits for configured ZFS datasets.
42*16038816SMartin Matuska.
43*16038816SMartin Matuska.Ss Properties
44*16038816SMartin Matuska.Bl -tag -compact -width "org.openzfs.systemd:required-by=unit[ unit]…"
45*16038816SMartin Matuska.It Sy mountpoint Ns =
46*16038816SMartin Matuska.No Skipped if Sy legacy No or Sy none .
47*16038816SMartin Matuska.
48*16038816SMartin Matuska.It Sy canmount Ns =
49*16038816SMartin Matuska.No Skipped if Sy off .
50*16038816SMartin Matuska.No Skipped if only Sy noauto
51*16038816SMartin Matuskadatasets exist for a given mountpoint and there's more than one.
52*16038816SMartin Matuska.No Datasets with Sy yes No take precedence over ones with Sy noauto No for the same mountpoint.
53*16038816SMartin Matuska.No Sets logical Em noauto No flag if Sy noauto .
54*16038816SMartin MatuskaEncryption roots always generate
55*16038816SMartin Matuska.Sy zfs-load-key@ Ns Ar root Ns Sy .service ,
56*16038816SMartin Matuskaeven if
57*16038816SMartin Matuska.Sy off .
58*16038816SMartin Matuska.
59*16038816SMartin Matuska.It Sy atime Ns = , Sy relatime Ns = , Sy devices Ns = , Sy exec Ns = , Sy readonly Ns = , Sy setuid Ns = , Sy nbmand Ns =
60*16038816SMartin MatuskaUsed to generate mount options equivalent to
61*16038816SMartin Matuska.Nm zfs Cm mount .
62*16038816SMartin Matuska.
63*16038816SMartin Matuska.It Sy encroot Ns = , Sy keylocation Ns =
64*16038816SMartin MatuskaIf the dataset is an encryption root, its mount unit will bind to
65*16038816SMartin Matuska.Sy zfs-load-key@ Ns Ar root Ns Sy .service ,
66*16038816SMartin Matuskawith additional dependencies as follows:
67*16038816SMartin Matuska.Bl -tag -compact -offset Ds -width "keylocation=https://URL (et al.)"
68*16038816SMartin Matuska.It Sy keylocation Ns = Ns Sy prompt
69*16038816SMartin MatuskaNone, uses
70*16038816SMartin Matuska.Xr systemd-ask-password 1
71*16038816SMartin Matuska.It Sy keylocation Ns = Ns Sy https:// Ns Ar URL Pq et al.\&
72*16038816SMartin Matuska.Sy Wants Ns = , Sy After Ns = : Pa network-online.target
73*16038816SMartin Matuska.It Sy keylocation Ns = Ns Sy file:// Ns < Ns Ar path Ns >
74*16038816SMartin Matuska.Sy RequiresMountsFor Ns = Ns Ar path
75*16038816SMartin Matuska.El
76*16038816SMartin Matuska.
77*16038816SMartin MatuskaThe service also uses the same
78*16038816SMartin Matuska.Sy Wants Ns = ,
79*16038816SMartin Matuska.Sy After Ns = ,
80*16038816SMartin Matuska.Sy Requires Ns = , No and
81*16038816SMartin Matuska.Sy RequiresMountsFor Ns = ,
82*16038816SMartin Matuskaas the mount unit.
83*16038816SMartin Matuska.
84*16038816SMartin Matuska.It Sy org.openzfs.systemd:requires Ns = Ns Pa path Ns Oo " " Ns Pa path Oc Ns …
85*16038816SMartin Matuska.No Sets Sy Requires Ns = for the mount- and key-loading unit.
86*16038816SMartin Matuska.
87*16038816SMartin Matuska.It Sy org.openzfs.systemd:requires-mounts-for Ns = Ns Pa path Ns Oo " " Ns Pa path Oc Ns …
88*16038816SMartin Matuska.No Sets Sy RequiresMountsFor Ns = for the mount- and key-loading unit.
89*16038816SMartin Matuska.
90*16038816SMartin Matuska.It Sy org.openzfs.systemd:before Ns = Ns Pa unit Ns Oo " " Ns Pa unit Oc Ns …
91*16038816SMartin Matuska.No Sets Sy Before Ns = for the mount unit.
92*16038816SMartin Matuska.
93*16038816SMartin Matuska.It Sy org.openzfs.systemd:after Ns = Ns Pa unit Ns Oo " " Ns Pa unit Oc Ns …
94*16038816SMartin Matuska.No Sets Sy After Ns = for the mount unit.
95*16038816SMartin Matuska.
96*16038816SMartin Matuska.It Sy org.openzfs.systemd:wanted-by Ns = Ns Pa unit Ns Oo " " Ns Pa unit Oc Ns …
97*16038816SMartin Matuska.No Sets logical Em noauto No flag (see below).
98*16038816SMartin Matuska.No If not Sy none , No sets Sy WantedBy Ns = for the mount unit.
99*16038816SMartin Matuska.It Sy org.openzfs.systemd:required-by Ns = Ns Pa unit Ns Oo " " Ns Pa unit Oc Ns …
100*16038816SMartin Matuska.No Sets logical Em noauto No flag (see below).
101*16038816SMartin Matuska.No If not Sy none , No sets Sy RequiredBy Ns = for the mount unit.
102*16038816SMartin Matuska.
103*16038816SMartin Matuska.It Sy org.openzfs.systemd:nofail Ns = Ns (unset) Ns | Ns Sy on Ns | Ns Sy off
104*16038816SMartin MatuskaWaxes or wanes strength of default reverse dependencies of the mount unit, see below.
105*16038816SMartin Matuska.
106*16038816SMartin Matuska.It Sy org.openzfs.systemd:ignore Ns = Ns Sy on Ns | Ns Sy off
107*16038816SMartin Matuska.No Skip if Sy on .
108*16038816SMartin Matuska.No Defaults to Sy off .
109*16038816SMartin Matuska.El
110*16038816SMartin Matuska.
111*16038816SMartin Matuska.Ss Unit Ordering And Dependencies
112*16038816SMartin MatuskaAdditionally, unless the pool the dataset resides on
113*16038816SMartin Matuskais imported at generation time, both units gain
114*16038816SMartin Matuska.Sy Wants Ns = Ns Pa zfs-import.target
115eda14cbcSMatt Macyand
116*16038816SMartin Matuska.Sy After Ns = Ns Pa zfs-import.target .
117*16038816SMartin Matuska.Pp
118*16038816SMartin MatuskaAdditionally, unless the logical
119*16038816SMartin Matuska.Em noauto
120*16038816SMartin Matuskaflag is set, the mount unit gains a reverse-dependency for
121*16038816SMartin Matuska.Pa local-fs.target
122*16038816SMartin Matuskaof strength
123*16038816SMartin Matuska.Bl -tag -compact -offset Ds -width "(unset)"
124*16038816SMartin Matuska.It (unset)
125*16038816SMartin Matuska.Sy WantedBy Ns = No + Sy Before Ns =
126*16038816SMartin Matuska.It Sy on
127*16038816SMartin Matuska.Sy WantedBy Ns =
128*16038816SMartin Matuska.It Sy off
129*16038816SMartin Matuska.Sy RequiredBy Ns = No + Sy Before Ns =
130*16038816SMartin Matuska.El
131*16038816SMartin Matuska.
132*16038816SMartin Matuska.Ss Cache File
133*16038816SMartin MatuskaBecause ZFS pools may not be available very early in the boot process,
134*16038816SMartin Matuskainformation on ZFS mountpoints must be stored separately.
135*16038816SMartin MatuskaThe output of
136*16038816SMartin Matuska.Dl Nm zfs Cm list Fl Ho Ar name , Ns Aq every property above in order
137*16038816SMartin Matuskafor datasets that should be mounted by systemd should be kept at
138*16038816SMartin Matuska.Pa @sysconfdir@/zfs/zfs-list.cache/ Ns Ar poolname ,
139*16038816SMartin Matuskaand, if writeable, will be kept synchronized for the entire pool by the
140*16038816SMartin Matuska.Pa history_event-zfs-list-cacher.sh
141*16038816SMartin MatuskaZEDLET, if enabled
142*16038816SMartin Matuska.Pq see Xr zed 8 .
143*16038816SMartin Matuska.
144*16038816SMartin Matuska.Sh ENVIRONMENT
145*16038816SMartin MatuskaThe
146*16038816SMartin Matuska.Sy ZFS_DEBUG
147*16038816SMartin Matuskaenvironment variable can either be
148*16038816SMartin Matuska.Sy 0
149*16038816SMartin Matuska(default),
150*16038816SMartin Matuska.Sy 1
151*16038816SMartin Matuska(print summary accounting information at the end), or at least
152*16038816SMartin Matuska.Sy 2
153*16038816SMartin Matuska(print accounting information for each subprocess as it finishes).
154*16038816SMartin Matuska.
155*16038816SMartin MatuskaIf not present,
156*16038816SMartin Matuska.Pa /proc/cmdline
157*16038816SMartin Matuskais additionally checked for
158*16038816SMartin Matuska.Qq debug ,
159*16038816SMartin Matuskain which case the debug level is set to
160*16038816SMartin Matuska.Sy 2 .
161*16038816SMartin Matuska.
162*16038816SMartin Matuska.Sh EXAMPLES
163eda14cbcSMatt MacyTo begin, enable tracking for the pool:
164*16038816SMartin Matuska.Dl # Nm touch Pa @sysconfdir@/zfs/zfs-list.cache/ Ns Ar poolname
165*16038816SMartin MatuskaThen enable the tracking ZEDLET:
166*16038816SMartin Matuska.Dl # Nm ln Fl s Pa @zfsexecdir@/zed.d/history_event-zfs-list-cacher.sh @sysconfdir@/zfs/zed.d
167*16038816SMartin Matuska.Dl # Nm systemctl Cm enable Pa zfs-zed.service
168*16038816SMartin Matuska.Dl # Nm systemctl Cm restart Pa zfs-zed.service
169*16038816SMartin Matuska.Pp
170*16038816SMartin MatuskaIf no history event is in the queue,
171*16038816SMartin Matuskainject one to ensure the ZEDLET runs to refresh the cache file
172*16038816SMartin Matuskaby setting a monitored property somewhere on the pool:
173*16038816SMartin Matuska.Dl # Nm zfs Cm set Sy relatime Ns = Ns Sy off Ar poolname/dset
174*16038816SMartin Matuska.Dl # Nm zfs Cm inherit Sy relatime Ar poolname/dset
175*16038816SMartin Matuska.Pp
176*16038816SMartin MatuskaTo test the generator output:
177*16038816SMartin Matuska.Dl $ Nm mkdir Pa /tmp/zfs-mount-generator
178*16038816SMartin Matuska.Dl $ Nm @systemdgeneratordir@/zfs-mount-generator Pa /tmp/zfs-mount-generator
179*16038816SMartin Matuska.
180*16038816SMartin MatuskaIf the generated units are satisfactory, instruct
181*16038816SMartin Matuska.Nm systemd
182*16038816SMartin Matuskato re-run all generators:
183*16038816SMartin Matuska.Dl # Nm systemctl daemon-reload
184*16038816SMartin Matuska.
185*16038816SMartin Matuska.Sh SEE ALSO
186*16038816SMartin Matuska.Xr systemd.mount 5 ,
187*16038816SMartin Matuska.Xr systemd.target 5 ,
188*16038816SMartin Matuska.Xr zfs 5 ,
189*16038816SMartin Matuska.Xr zfs-events 5 ,
190*16038816SMartin Matuska.Xr systemd.generator 7 ,
191*16038816SMartin Matuska.Xr systemd.special 7 ,
192*16038816SMartin Matuska.Xr zed 8
193