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.service … 56716fd348SMartin 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