[pbs-devel] [RFC zfsonlinux 1/1] Add systemd-unit for importing specific pools

Stoiko Ivanov s.ivanov at proxmox.com
Wed Sep 16 14:14:17 CEST 2020


This patch addresses the problems some users experience when some zpools are
created/imported with cachefile (which then causes other pools not to get
imported during boot) - when our tooling creates a pool we explictly
instantiate the service with the pool's name, ensuring that it will get
imported by scanning.

Suggested-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
 ...md-unit-for-importing-specific-pools.patch | 75 +++++++++++++++++++
 debian/patches/series                         |  1 +
 debian/zfsutils-linux.install                 |  1 +
 3 files changed, 77 insertions(+)
 create mode 100644 debian/patches/0008-Add-systemd-unit-for-importing-specific-pools.patch

diff --git a/debian/patches/0008-Add-systemd-unit-for-importing-specific-pools.patch b/debian/patches/0008-Add-systemd-unit-for-importing-specific-pools.patch
new file mode 100644
index 00000000..61c4e94a
--- /dev/null
+++ b/debian/patches/0008-Add-systemd-unit-for-importing-specific-pools.patch
@@ -0,0 +1,75 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Stoiko Ivanov <s.ivanov at proxmox.com>
+Date: Tue, 15 Sep 2020 19:07:24 +0200
+Subject: [PATCH] Add systemd-unit for importing specific pools
+
+The unit can be instantiated with a specific poolname, which will get imported
+by scanning /dev/disk/by-id, irrespective of the existence and content of
+/etc/zfs/zpool.cache.
+
+the instance name is used unescaped (see systemd.unit(5)), since zpool names
+can contain characters which will be escaped by systemd.
+
+Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
+---
+ etc/systemd/system/50-zfs.preset.in       |  1 +
+ etc/systemd/system/Makefile.am            |  2 ++
+ etc/systemd/system/zfs-import at .service.in | 17 +++++++++++++++++
+ 3 files changed, 20 insertions(+)
+ create mode 100644 etc/systemd/system/zfs-import at .service.in
+
+diff --git a/etc/systemd/system/50-zfs.preset.in b/etc/systemd/system/50-zfs.preset.in
+index e4056a92c..030611419 100644
+--- a/etc/systemd/system/50-zfs.preset.in
++++ b/etc/systemd/system/50-zfs.preset.in
+@@ -1,6 +1,7 @@
+ # ZFS is enabled by default
+ enable zfs-import-cache.service
+ disable zfs-import-scan.service
++enable zfs-import at .service
+ enable zfs-import.target
+ enable zfs-mount.service
+ enable zfs-share.service
+diff --git a/etc/systemd/system/Makefile.am b/etc/systemd/system/Makefile.am
+index 4e14467a0..ae72102af 100644
+--- a/etc/systemd/system/Makefile.am
++++ b/etc/systemd/system/Makefile.am
+@@ -5,6 +5,7 @@ systemdunit_DATA = \
+ 	zfs-zed.service \
+ 	zfs-import-cache.service \
+ 	zfs-import-scan.service \
++	zfs-import at .service \
+ 	zfs-mount.service \
+ 	zfs-share.service \
+ 	zfs-volume-wait.service \
+@@ -16,6 +17,7 @@ EXTRA_DIST = \
+ 	$(top_srcdir)/etc/systemd/system/zfs-zed.service.in \
+ 	$(top_srcdir)/etc/systemd/system/zfs-import-cache.service.in \
+ 	$(top_srcdir)/etc/systemd/system/zfs-import-scan.service.in \
++	$(top_srcdir)/etc/systemd/system/zfs-import at .service.in \
+ 	$(top_srcdir)/etc/systemd/system/zfs-mount.service.in \
+ 	$(top_srcdir)/etc/systemd/system/zfs-share.service.in \
+ 	$(top_srcdir)/etc/systemd/system/zfs-import.target.in \
+diff --git a/etc/systemd/system/zfs-import at .service.in b/etc/systemd/system/zfs-import at .service.in
+new file mode 100644
+index 000000000..2db9fdaab
+--- /dev/null
++++ b/etc/systemd/system/zfs-import at .service.in
+@@ -0,0 +1,17 @@
++[Unit]
++Description=Import ZFS pool %i
++Documentation=man:zpool(8)
++DefaultDependencies=no
++Requires=systemd-udev-settle.service
++After=systemd-udev-settle.service
++After=cryptsetup.target
++After=multipathd.target
++Before=zfs-import.target
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=@sbindir@/zpool import -N -d /dev/disk/by-id -o cachefile=none %I
++
++[Install]
++WantedBy=zfs-import.target
diff --git a/debian/patches/series b/debian/patches/series
index 33a76ef1..e1d7c485 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,4 @@
 0005-Enable-zed-emails.patch
 0006-dont-symlink-zed-scripts.patch
 0007-Use-installed-python3.patch
+0008-Add-systemd-unit-for-importing-specific-pools.patch
diff --git a/debian/zfsutils-linux.install b/debian/zfsutils-linux.install
index aa62d505..229ff2ea 100644
--- a/debian/zfsutils-linux.install
+++ b/debian/zfsutils-linux.install
@@ -5,6 +5,7 @@ etc/zfs/zpool.d/
 lib/systemd/system-preset/
 lib/systemd/system/zfs-import-cache.service
 lib/systemd/system/zfs-import-scan.service
+lib/systemd/system/zfs-import at .service
 lib/systemd/system/zfs-import.target
 lib/systemd/system/zfs-import.service
 lib/systemd/system/zfs-mount.service
-- 
2.20.1






More information about the pbs-devel mailing list