zfs-mount-generator8
Generate systemd mount units for zfs filesystems
Usage
/usr/lib/systemd/system-generators/zfs-mount-generator
Overview
zfs-mount-generator is a systemd.generator(7) that generates native systemd.mount(5) units for configured ZFS datasets.
Properties
mountpoint=-
Skipped if
legacyornone. canmount=-
Skipped if
off. Skipped if onlynoautodatasets exist for a given mountpoint and there's more than one. Datasets withyestake precedence over ones withnoautofor the same mountpoint. Sets logical noauto flag ifnoauto. Encryption roots always generatezfs-load-key@root.service, even ifoff. atime=,relatime=,devices=,exec=,readonly=,setuid=,nbmand=-
Used to generate mount options equivalent to
zfsmount. encroot=,keylocation=-
If the dataset is an encryption root, its mount unit will bind to
zfs-load-key@root.service, with additional dependencies as follows:keylocation=prompt-
None, uses systemd-ask-password(1)
keylocation=https://URL (et al.)-
Wants=,After=: network-online.target keylocation=file://<path>-
RequiresMountsFor=pathThe service also uses the same
Wants=,After=,Requires=, andRequiresMountsFor=, as the mount unit.
org.openzfs.systemd:requires=path[ path]…-
Sets
Requires= for the mount- and key-loading unit. org.openzfs.systemd:requires-mounts-for=path[ path]…-
Sets
RequiresMountsFor= for the mount- and key-loading unit. org.openzfs.systemd:before=unit[ unit]…-
Sets
Before= for the mount unit. org.openzfs.systemd:after=unit[ unit]…-
Sets
After= for the mount unit. org.openzfs.systemd:wanted-by=unit[ unit]…-
Sets logical noauto flag (see below). If not
none, setsWantedBy= for the mount unit. org.openzfs.systemd:required-by=unit[ unit]…-
Sets logical noauto flag (see below). If not
none, setsRequiredBy= for the mount unit. org.openzfs.systemd:nofail=(unset)|on|off-
Waxes or wanes strength of default reverse dependencies of the mount unit, see below.
org.openzfs.systemd:ignore=on|off-
Skip if
on. Defaults tooff.
Unit Ordering And Dependencies
Additionally, unless the pool the dataset resides on is imported at generation time, both units gain Wants=zfs-import.target and After=zfs-import.target.
Additionally, unless the logical noauto flag is set, the mount unit gains a reverse-dependency for local-fs.target of strength
- (unset)
-
WantedBy= +Before= on-
WantedBy= off-
RequiredBy= +Before=
Cache File
Because ZFS pools may not be available very early in the boot process, information on ZFS mountpoints must be stored separately. The output of
zfs list -Ho name,⟨every property above in order⟩
for datasets that should be mounted by systemd should be kept at /etc/zfs/zfs-list.cache/poolname, and, if writeable, will be kept synchronized for the entire pool by the history_event-zfs-list-cacher.sh ZEDLET, if enabled (see zed(8)).
Environment
If the ZFS_DEBUG environment variable is nonzero (or unset and /proc/cmdline contains "debug"), print summary accounting information at the end.
Examples
To begin, enable tracking for the pool:
# touch /etc/zfs/zfs-list.cache/poolname
Then enable the tracking ZEDLET:
# ln -s /usr/lib/zfs-linux/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d
# systemctl enable zfs-zed.service
# systemctl restart zfs-zed.service
If no history event is in the queue, inject one to ensure the ZEDLET runs to refresh the cache file by setting a monitored property somewhere on the pool:
# zfs set relatime=off poolname/dset
# zfs inherit relatime poolname/dset
To test the generator output:
$ mkdir /tmp/zfs-mount-generator
$ /usr/lib/systemd/system-generators/zfs-mount-generator /tmp/zfs-mount-generator
If the generated units are satisfactory, instruct systemd to re-run all generators:
# systemctl daemon-reload
Releases
3 releases since Debian 11 (Bullseye); the text changed 2 times.