[systemd-devel] advice for zfs-mount-generator
Jörg Thalheim
joerg.systemd at higgsboson.tk
Tue Jun 28 03:49:48 UTC 2016
Hi,
when using zfs in combination with systemd, users run into the following problem:
- zfs manages mountpoints on its own and systemd is not aware of those.
- this leads to problems, when mountpoints for other filesystems are mounted
on directories in a zfs dataset or files are created in a directory before zfs could
mount its dataset there.
- the default behaviour in zfs case is to refuse to mount a filesystem on top of a non-empty directory.
In case zfs is loaded via initrd (to allow to use zfs as bootfs) during early boot, writing a generator should be easy:
```
$ zfs get all -H | grep mountpoint
zroot/home mountpoint /home local
zroot/journal mountpoint /var/lib/journal local
zroot/postgres mountpoint /var/lib/postgres local
zroot/root mountpoint / local
zroot/root/nix mountpoint /nix local
zroot/root/tmp mountpoint /tmp local
```
It should be also noted that those filesystems will be not mounted using mount(2),
but the command interface `zfs mount` except mountpoint is set the `legacy`
However currently some zfs services exists which import zfs pools after the generator run:
```/usr/lib/systemd/system/zfs-import-scan.service
[Unit]
Description=Import ZFS pools by device scanning
DefaultDependencies=no
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service
After=cryptsetup.target
Before=dracut-mount.service
ConditionPathExists=!/etc/zfs/zpool.cache
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe zfs
ExecStart=/usr/bin/zpool import -aN -o cachefile=none
[Install]
WantedBy=zfs-mount.service
WantedBy=zfs.target
```
```/usr/lib/systemd/system/zfs-mount.service
[Unit]
Description=Mount ZFS filesystems
DefaultDependencies=no
After=systemd-udev-settle.service
After=zfs-import-cache.service
After=zfs-import-scan.service
After=systemd-remount-fs.service
Before=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/zfs mount -a
[Install]
WantedBy=zfs-share.service
WantedBy=zfs.target
```
As generators will run before unit I run into a Chicken or the egg problem.
I would appreciate, if you have suggestions how to make this scheme compatible
with the way systemd handle mounts.
Thanks Jörg Thalheim.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 603 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20160628/f8f41b9a/attachment-0001.sig>
More information about the systemd-devel
mailing list