Skip to content

Commit

Permalink
Systemd configuration fixes
Browse files Browse the repository at this point in the history
* Disable zfs-import-scan.service by default.  This ensures that
pools will not be automatically imported unless they appear in
the cache file.  When this service is explicitly enabled pools
will be imported with the "cachefile=none" property set.  This
prevents the creation of, or update to, an existing cache file.

    $ systemctl list-unit-files | grep zfs
    zfs-import-cache.service                  enabled
    zfs-import-scan.service                   disabled
    zfs-mount.service                         enabled
    zfs-share.service                         enabled
    zfs-zed.service                           enabled
    zfs.target                                enabled

* Change services to dynamic from static by adding an [Install]
section and adding 'WantedBy' tags in favor of 'Requires' tags.
This allows for easier customization of the boot behavior.

* Start the zfs-import-cache.service after the root pivot so
the cache file is available in the standard location.

* Start the zfs-mount.service after the systemd-remount-fs.service
to ensure the root fs is writeable and the ZFS filesystems can
create their mount points.

* Change the default behavior to only load the ZFS kernel modules
in zfs-import-*.service or when blkid(8) detects a pool.  Users
who wish to unconditionally load the kernel modules must uncomment
the list of modules in /lib/modules-load.d/zfs.conf.

Reviewed-by: Richard Laager <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes openzfs#4325
Closes openzfs#4496
Closes openzfs#4658
Closes openzfs#4699
  • Loading branch information
behlendorf authored and Chunwei Chen committed Sep 7, 2016
1 parent 4f85477 commit bb90e5e
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 11 deletions.
4 changes: 3 additions & 1 deletion etc/modules-load.d/zfs.conf.in
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
zfs
# Always load kernel modules at boot. The default behavior is to load the
# kernel modules in the zfs-import-*.service or when blkid(8) detects a pool.
#zfs
7 changes: 6 additions & 1 deletion etc/systemd/system/50-zfs.preset.in
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
# ZFS is enabled by default
enable zfs.*
enable zfs-import-cache.service
disable zfs-import-scan.service
enable zfs-mount.service
enable zfs-share.service
enable zfs-zed.service
enable zfs.target
5 changes: 5 additions & 0 deletions etc/systemd/system/zfs-import-cache.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ DefaultDependencies=no
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service
After=cryptsetup.target
After=systemd-remount-fs.service
ConditionPathExists=@sysconfdir@/zfs/zpool.cache

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe zfs
ExecStart=@sbindir@/zpool import -c @sysconfdir@/zfs/zpool.cache -aN

[Install]
WantedBy=zfs-mount.service
WantedBy=zfs.target
6 changes: 5 additions & 1 deletion etc/systemd/system/zfs-import-scan.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ ConditionPathExists=!@sysconfdir@/zfs/zpool.cache
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe zfs
ExecStart=@sbindir@/zpool import -d /dev/disk/by-id -aN
ExecStart=@sbindir@/zpool import -aN -o cachefile=none

[Install]
WantedBy=zfs-mount.service
WantedBy=zfs.target
8 changes: 5 additions & 3 deletions etc/systemd/system/zfs-mount.service.in
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
[Unit]
Description=Mount ZFS filesystems
DefaultDependencies=no
Wants=zfs-import-cache.service
Wants=zfs-import-scan.service
Requires=systemd-udev-settle.service
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=@sbindir@/zfs mount -a

[Install]
WantedBy=zfs-share.service
WantedBy=zfs.target
6 changes: 4 additions & 2 deletions etc/systemd/system/zfs-share.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ Description=ZFS file system shares
After=nfs-server.service nfs-kernel-server.service
After=smb.service
After=zfs-mount.service
Requires=zfs-mount.service
PartOf=nfs-server.service nfs-kernel-server.service
PartOf=smb.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-@bindir@/rm /etc/dfs/sharetab
ExecStartPre=-@bindir@/rm -f /etc/dfs/sharetab
ExecStart=@sbindir@/zfs share -a

[Install]
WantedBy=zfs.target
1 change: 1 addition & 0 deletions etc/systemd/system/zfs-zed.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ Restart=on-abort

[Install]
Alias=zed.service
WantedBy=zfs.target
3 changes: 0 additions & 3 deletions etc/systemd/system/zfs.target.in
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
[Unit]
Description=ZFS startup target
Requires=zfs-mount.service
Requires=zfs-share.service
Wants=zfs-zed.service

[Install]
WantedBy=multi-user.target

0 comments on commit bb90e5e

Please sign in to comment.