Comment 0 for bug 1845298

Revision history for this message
Didier Roche-Tolomelli (didrocks) wrote :

 If /var/lib is a dataset not under <pool>/ROOT/<root_dataset>, as proposed
 in the ubuntu root on zfs upstream guide
 (https://github.com/zfsonlinux/zfs/wiki/Ubuntu-18.04-Root-on-ZFS), we end up
 with a race where some services, like systemd-random-seed are writing under
 /var/lib, while zfs-mount is called. zfs mount will then potentially fail
 because of /var/lib isn't empty, and so, can't be mounted.
 Order those 2 units for now (more may be needed) as we can't declare
 virtually a provide mount point to match
 "RequiresMountsFor=/var/lib/systemd/random-seed" from
 systemd-random-seed.service.
 The optional generator for zfs 0.8 fixes it, but it's not enabled by default
 nor necessarily required.
 Example:
 - rpool/ROOT/ubuntu (mountpoint = /)
 - rpool/var/ (mountpoint = /var)
 - rpool/var/lib (mountpoint = /var/lib)

Both zfs-mount.service and systemd-random-seed.service are starting After=systemd-remount-fs.service. zfs-mount.service should be done before local-fs.target while systemd-random-seed.service should finish before sysinit.target (which is a later target).

Ideally, we would have a way for zfs mount -a unit to declare all paths or move systemd-random-seed after local-fs.target.