xref: /freebsd-src/sys/contrib/openzfs/man/man7/dracut.zfs.7 (revision 75e1fea68aaa613a20dfdcd0c59dd403aca02c49)
1716fd348SMartin Matuska.\" SPDX-License-Identifier: 0BSD
2716fd348SMartin Matuska.\"
3d411c1d6SMartin Matuska.Dd March 28, 2023
4716fd348SMartin Matuska.Dt DRACUT.ZFS 7
5716fd348SMartin Matuska.Os
6716fd348SMartin Matuska.
7716fd348SMartin Matuska.Sh NAME
8716fd348SMartin Matuska.Nm dracut.zfs
9716fd348SMartin Matuska.Nd overview of ZFS dracut hooks
10716fd348SMartin Matuska.
11716fd348SMartin Matuska.Sh SYNOPSIS
12716fd348SMartin Matuska.Bd -literal -compact
13716fd348SMartin Matuska                      parse-zfs.sh \(-> dracut-cmdline.service
14716fd348SMartin Matuska                          |                     \(da
15716fd348SMartin Matuska                          |                     …
16716fd348SMartin Matuska                          |                     \(da
17716fd348SMartin Matuska                          \e\(em\(em\(em\(em\(em\(em\(em\(em\(-> dracut-initqueue.service
18716fd348SMartin Matuska                                                |                      zfs-import-opts.sh
19716fd348SMartin Matuska   zfs-load-module.service                      \(da                          |       |
20716fd348SMartin Matuska     |                  |                sysinit.target                    \(da       |
21716fd348SMartin Matuska     \(da                  |                       |        zfs-import-scan.service   \(da
22716fd348SMartin Matuskazfs-import-scan.service \(da                       \(da           | zfs-import-cache.service
23716fd348SMartin Matuska     |   zfs-import-cache.service         basic.target      |     |
24716fd348SMartin Matuska     \e__________________|                       |           \(da     \(da
25716fd348SMartin Matuska                        \(da                       |     zfs-load-key.sh
26716fd348SMartin Matuska     zfs-env-bootfs.service                     |         |
27716fd348SMartin Matuska                        \(da                       \(da         \(da
28716fd348SMartin Matuska                 zfs-import.target \(-> dracut-pre-mount.service
29716fd348SMartin Matuska                        |          \(ua            |
30716fd348SMartin Matuska                        | dracut-zfs-generator  |
31d411c1d6SMartin Matuska                        | _____________________/|
32716fd348SMartin Matuska                        |/                      \(da
33d411c1d6SMartin Matuska                        |                   sysroot.mount \(<-\(em\(em\(em dracut-zfs-generator
34d411c1d6SMartin Matuska                        |                       |
35d411c1d6SMartin Matuska                        |                       \(da
36d411c1d6SMartin Matuska                        |             initrd-root-fs.target \(<-\(em zfs-nonroot-necessities.service
37d411c1d6SMartin Matuska                        |                       |                                 |
38716fd348SMartin Matuska                        |                       \(da                                 |
39716fd348SMartin Matuska                        \(da             dracut-mount.service                        |
40716fd348SMartin Matuska       zfs-snapshot-bootfs.service              |                                 |
41716fd348SMartin Matuska                        |                       \(da                                 |
42716fd348SMartin Matuska                        \(da                       …                                 |
43716fd348SMartin Matuska       zfs-rollback-bootfs.service              |                                 |
44716fd348SMartin Matuska                        |                       \(da                                 |
45d411c1d6SMartin Matuska                        |          /sysroot/{usr,etc,lib,&c.} \(<-\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em\(em/
46716fd348SMartin Matuska                        |                       |
47716fd348SMartin Matuska                        |                       \(da
48716fd348SMartin Matuska                        |                initrd-fs.target
49716fd348SMartin Matuska                        \e______________________ |
50716fd348SMartin Matuska                                               \e|
51716fd348SMartin Matuska                                                \(da
52716fd348SMartin Matuska        export-zfs.sh                      initrd.target
53716fd348SMartin Matuska              |                                 |
54716fd348SMartin Matuska              \(da                                 \(da
55716fd348SMartin Matuska   dracut-shutdown.service56716fd348SMartin Matuska                                                |
57716fd348SMartin Matuska                                                \(da
58716fd348SMartin Matuska                 zfs-needshutdown.sh \(-> initrd-cleanup.service
59716fd348SMartin Matuska.Ed
60716fd348SMartin Matuska.Pp
61716fd348SMartin MatuskaCompare
62716fd348SMartin Matuska.Xr dracut.bootup 7
63716fd348SMartin Matuskafor the full flowchart.
64716fd348SMartin Matuska.
65716fd348SMartin Matuska.Sh DESCRIPTION
66716fd348SMartin MatuskaUnder dracut, booting with
67716fd348SMartin Matuska.No ZFS-on- Ns Pa /
68716fd348SMartin Matuskais facilitated by a number of hooks in the
69716fd348SMartin Matuska.Nm 90zfs
70716fd348SMartin Matuskamodule.
71716fd348SMartin Matuska.Pp
72716fd348SMartin MatuskaBooting into a ZFS dataset requires
73716fd348SMartin Matuska.Sy mountpoint Ns = Ns Pa /
74bb2d13b6SMartin Matuskato be set on the dataset containing the root filesystem (henceforth "the boot
75bb2d13b6SMartin Matuskadataset") and at the very least either the
76716fd348SMartin Matuska.Sy bootfs
77716fd348SMartin Matuskaproperty to be set to that dataset, or the
78716fd348SMartin Matuska.Sy root=
79716fd348SMartin Matuskakernel cmdline (or dracut drop-in) argument to specify it.
80716fd348SMartin Matuska.Pp
81716fd348SMartin MatuskaAll children of the boot dataset with
82716fd348SMartin Matuska.Sy canmount Ns = Ns Sy on
83716fd348SMartin Matuskawith
84716fd348SMartin Matuska.Sy mountpoint Ns s
85716fd348SMartin Matuskamatching
86716fd348SMartin Matuska.Pa /etc , /bin , /lib , /lib?? , /libx32 , No and Pa /usr
87716fd348SMartin Matuskaglobs are deemed essential and will be mounted as well.
88716fd348SMartin Matuska.Pp
89716fd348SMartin Matuska.Xr zfs-mount-generator 8
90bb2d13b6SMartin Matuskais recommended for proper functioning of the system afterward (correct mount
91bb2d13b6SMartin Matuskaproperties, remounting, &c.).
92716fd348SMartin Matuska.
93716fd348SMartin Matuska.Sh CMDLINE
94716fd348SMartin Matuska.Ss Standard
95716fd348SMartin Matuska.Bl -tag -compact -width ".Sy root=zfs:AUTO , root=zfs: , root=zfs , Op Sy root="
96716fd348SMartin Matuska.It Sy root=zfs:\& Ns Ar dataset , Sy root=ZFS= Ns Ar dataset
97716fd348SMartin MatuskaUse
98716fd348SMartin Matuska.Ar dataset
99716fd348SMartin Matuskaas the boot dataset.
100716fd348SMartin MatuskaAll pluses
101716fd348SMartin Matuska.Pq Sq +
102716fd348SMartin Matuskaare replaced with spaces
103716fd348SMartin Matuska.Pq Sq \  .
104716fd348SMartin Matuska.
105716fd348SMartin Matuska.It Sy root=zfs:AUTO , root=zfs:\& , root=zfs , Op Sy root=
106716fd348SMartin MatuskaAfter import, search for the first pool with the
107716fd348SMartin Matuska.Sy bootfs
108716fd348SMartin Matuskaproperty set, use its value as-if specified as the
109716fd348SMartin Matuska.Ar dataset
110716fd348SMartin Matuskaabove.
111716fd348SMartin Matuska.
112716fd348SMartin Matuska.It Sy rootfstype=zfs root= Ns Ar dataset
113716fd348SMartin MatuskaEquivalent to
114716fd348SMartin Matuska.Sy root=zfs:\& Ns Ar dataset .
115716fd348SMartin Matuska.
116716fd348SMartin Matuska.It Sy rootfstype=zfs Op Sy root=
117716fd348SMartin MatuskaEquivalent to
118716fd348SMartin Matuska.Sy root=zfs:AUTO .
119716fd348SMartin Matuska.
120716fd348SMartin Matuska.It Sy rootflags= Ns Ar flags
121716fd348SMartin MatuskaMount the boot dataset with
122716fd348SMartin Matuska.Fl o Ar flags ;
123716fd348SMartin Matuskacf.\&
124716fd348SMartin Matuska.Sx Temporary Mount Point Properties
125716fd348SMartin Matuskain
126716fd348SMartin Matuska.Xr zfsprops 7 .
127bb2d13b6SMartin MatuskaThese properties will not last, since all filesystems will be re-mounted from
128bb2d13b6SMartin Matuskathe real root.
129716fd348SMartin Matuska.
130716fd348SMartin Matuska.It Sy debug
131716fd348SMartin MatuskaIf specified,
132716fd348SMartin Matuska.Nm dracut-zfs-generator
133716fd348SMartin Matuskalogs to the journal.
134716fd348SMartin Matuska.El
135716fd348SMartin Matuska.Pp
136716fd348SMartin MatuskaBe careful about setting neither
137716fd348SMartin Matuska.Sy rootfstype=zfs
138716fd348SMartin Matuskanor
139716fd348SMartin Matuska.Sy root=zfs:\& Ns Ar dataset
140716fd348SMartin Matuska\(em other automatic boot selection methods, like
141716fd348SMartin Matuska.Nm systemd-gpt-auto-generator
142716fd348SMartin Matuskaand
143716fd348SMartin Matuska.Nm systemd-fstab-generator
144716fd348SMartin Matuskamight take precedent.
145716fd348SMartin Matuska.
146716fd348SMartin Matuska.Ss ZFS-specific
147716fd348SMartin Matuska.Bl -tag -compact -width ".Sy bootfs.snapshot Ns Op Sy = Ns Ar snapshot-name"
148716fd348SMartin Matuska.It Sy bootfs.snapshot Ns Op Sy = Ns Ar snapshot-name
149716fd348SMartin MatuskaExecute
150716fd348SMartin Matuska.Nm zfs Cm snapshot Ar boot-dataset Ns Sy @ Ns Ar snapshot-name
151716fd348SMartin Matuskabefore pivoting to the real root.
152716fd348SMartin Matuska.Ar snapshot-name
153716fd348SMartin Matuskadefaults to the current kernel release.
154716fd348SMartin Matuska.
155716fd348SMartin Matuska.It Sy bootfs.rollback Ns Op Sy = Ns Ar snapshot-name
156716fd348SMartin MatuskaExecute
157*75e1fea6SMartin Matuska.Nm zfs Cm rollback Fl Rf Ar boot-dataset Ns Sy @ Ns Ar snapshot-name
158716fd348SMartin Matuskabefore pivoting to the real root.
159716fd348SMartin Matuska.Ar snapshot-name
160716fd348SMartin Matuskadefaults to the current kernel release.
161716fd348SMartin Matuska.
162716fd348SMartin Matuska.It Sy spl_hostid= Ns Ar host-id
163716fd348SMartin MatuskaUse
164716fd348SMartin Matuska.Xr zgenhostid 8
165716fd348SMartin Matuskato set the host ID to
166716fd348SMartin Matuska.Ar host-id ;
167716fd348SMartin Matuskaotherwise,
168716fd348SMartin Matuska.Pa /etc/hostid
169716fd348SMartin Matuskainherited from the real root is used.
170716fd348SMartin Matuska.
171716fd348SMartin Matuska.It Sy zfs_force , zfs.force , zfsforce
172716fd348SMartin MatuskaAppends
173716fd348SMartin Matuska.Fl f
174716fd348SMartin Matuskato all
175716fd348SMartin Matuska.Nm zpool Cm import
176716fd348SMartin Matuskainvocations; primarily useful in conjunction with
177716fd348SMartin Matuska.Sy spl_hostid= ,
178716fd348SMartin Matuskaor if no host ID was inherited.
179716fd348SMartin Matuska.El
180716fd348SMartin Matuska.
181716fd348SMartin Matuska.Sh FILES
182716fd348SMartin Matuska.Bl -tag -width 0
183716fd348SMartin Matuska.It Pa parse-zfs.sh Pq Sy cmdline
184716fd348SMartin MatuskaProcesses
185716fd348SMartin Matuska.Sy spl_hostid= .
186716fd348SMartin MatuskaIf
187716fd348SMartin Matuska.Sy root=
188716fd348SMartin Matuskamatches a known pattern, above, provides
189716fd348SMartin Matuska.Pa /dev/root
190716fd348SMartin Matuskaand delays the initqueue until
191716fd348SMartin Matuska.Xr zfs 4
192716fd348SMartin Matuskais loaded,
193716fd348SMartin Matuska.
194716fd348SMartin Matuska.It Pa zfs-import-opts.sh Pq Nm systemd No environment generator
195716fd348SMartin MatuskaTurns
196716fd348SMartin Matuska.Sy zfs_force , zfs.force , No or Sy zfsforce
197716fd348SMartin Matuskainto
198716fd348SMartin Matuska.Ev ZPOOL_IMPORT_OPTS Ns = Ns Fl f
199716fd348SMartin Matuskafor
200716fd348SMartin Matuska.Pa zfs-import-scan.service
201716fd348SMartin Matuskaor
202716fd348SMartin Matuska.Pa zfs-import-cache.service .
203716fd348SMartin Matuska.
204716fd348SMartin Matuska.It Pa zfs-load-key.sh Pq Sy pre-mount
205716fd348SMartin MatuskaLoads encryption keys for the boot dataset and its essential descendants.
206716fd348SMartin Matuska.Bl -tag -compact -offset 4n -width ".Sy keylocation Ns = Ns Sy https:// Ns Ar URL , Sy keylocation Ns = Ns Sy http:// Ns Ar URL"
207716fd348SMartin Matuska.It Sy keylocation Ns = Ns Sy prompt
208716fd348SMartin MatuskaIs prompted for via
209716fd348SMartin Matuska.Nm systemd-ask-password
210716fd348SMartin Matuskathrice.
211716fd348SMartin Matuska.
212716fd348SMartin Matuska.It Sy keylocation Ns = Ns Sy https:// Ns Ar URL , Sy keylocation Ns = Ns Sy http:// Ns Ar URL
213716fd348SMartin Matuska.Pa network-online.target
214716fd348SMartin Matuskais started before loading.
215716fd348SMartin Matuska.
216716fd348SMartin Matuska.It Sy keylocation Ns = Ns Sy file:// Ns Ar path
217716fd348SMartin MatuskaIf
218716fd348SMartin Matuska.Ar path
219716fd348SMartin Matuskadoesn't exist,
220716fd348SMartin Matuska.Nm udevadm No is Cm settle Ns d .
221716fd348SMartin MatuskaIf it still doesn't, it's waited for for up to
222716fd348SMartin Matuska.Sy 10 Ns s .
223716fd348SMartin Matuska.El
224716fd348SMartin Matuska.
225716fd348SMartin Matuska.It Pa zfs-env-bootfs.service Pq Nm systemd No service
226716fd348SMartin MatuskaAfter pool import, sets
227716fd348SMartin Matuska.Ev BOOTFS Ns =
228716fd348SMartin Matuskain the systemd environment to the first non-null
229716fd348SMartin Matuska.Sy bootfs
230716fd348SMartin Matuskavalue in iteration order.
231716fd348SMartin Matuska.
232716fd348SMartin Matuska.It Pa dracut-zfs-generator Pq Nm systemd No generator
233716fd348SMartin MatuskaGenerates
234716fd348SMartin Matuska.Pa sysroot.mount Pq using Sy rootflags= , No if any .
235716fd348SMartin MatuskaIf an explicit boot dataset was specified, also generates essential mountpoints
236716fd348SMartin Matuska.Pq Pa sysroot-etc.mount , sysroot-bin.mount , No &c.\& ,
237716fd348SMartin Matuskaotherwise generates
238716fd348SMartin Matuska.Pa zfs-nonroot-necessities.service
239716fd348SMartin Matuskawhich mounts them explicitly after
240716fd348SMartin Matuska.Pa /sysroot
241716fd348SMartin Matuskausing
242716fd348SMartin Matuska.Ev BOOTFS Ns = .
243716fd348SMartin Matuska.
244716fd348SMartin Matuska.It Pa zfs-snapshot-bootfs.service , zfs-rollback-bootfs.service Pq Nm systemd No services
245716fd348SMartin MatuskaConsume
246716fd348SMartin Matuska.Sy bootfs.snapshot
247716fd348SMartin Matuskaand
248716fd348SMartin Matuska.Sy bootfs.rollback
249716fd348SMartin Matuskaas described in
250716fd348SMartin Matuska.Sx CMDLINE  .
251716fd348SMartin MatuskaUse
252716fd348SMartin Matuska.Ev BOOTFS Ns =
253716fd348SMartin Matuskaif no explicit boot dataset was specified.
254716fd348SMartin Matuska.
255716fd348SMartin Matuska.It Pa zfs-needshutdown.sh Pq Sy cleanup
256716fd348SMartin MatuskaIf any pools were imported, signals that shutdown hooks are required.
257716fd348SMartin Matuska.
258716fd348SMartin Matuska.It Pa export-zfs.sh Pq Sy shutdown
259716fd348SMartin MatuskaForcibly exports all pools.
260716fd348SMartin Matuska.
261716fd348SMartin Matuska.It Pa /etc/hostid , /etc/zfs/zpool.cache , /etc/zfs/vdev_id.conf Pq regular files
262716fd348SMartin MatuskaIncluded verbatim, hostonly.
263716fd348SMartin Matuska.
264716fd348SMartin Matuska.It Pa mount-zfs.sh Pq Sy mount
265716fd348SMartin MatuskaDoes nothing on
266716fd348SMartin Matuska.Nm systemd
267716fd348SMartin Matuskasystems
268716fd348SMartin Matuska.Pq if Pa dracut-zfs-generator No succeeded .
269bb2d13b6SMartin MatuskaOtherwise, loads encryption key for the boot dataset from the console or via
270bb2d13b6SMartin Matuskaplymouth.
271716fd348SMartin MatuskaIt may not work at all!
272716fd348SMartin Matuska.El
273716fd348SMartin Matuska.
274716fd348SMartin Matuska.Sh SEE ALSO
275716fd348SMartin Matuska.Xr dracut.bootup 7 ,
276716fd348SMartin Matuska.Xr zfsprops 7 ,
277716fd348SMartin Matuska.Xr zpoolprops 7 ,
278716fd348SMartin Matuska.Xr dracut-shutdown.service 8 ,
279716fd348SMartin Matuska.Xr systemd-fstab-generator 8 ,
280716fd348SMartin Matuska.Xr systemd-gpt-auto-generator 8 ,
281716fd348SMartin Matuska.Xr zfs-mount-generator 8 ,
282716fd348SMartin Matuska.Xr zgenhostid 8
283