Я хотел бы убедиться, что точка монтирования ZFS доступна до запуска службы, управляемой systemd
. Поэтому я бы использовал раздел After=
в блоке systemd
. Но что писать в качестве аргумента?
Я использую локальную установку ZFS из-за постоянных проблем с производительностью поставляемой версии и импортирую единственный пул с
[Unit]
Description=ZFS pool import for source installations of ZFS
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/zpool import -d /dev data
[Install]
WantedBy=multi-user.target
, потому что я никогда нашел какую-либо полезную документацию поддержки systemd
в Ubuntu, и она , похоже, предназначена для разработчиков только сейчас .
Однако в другой системе у меня также возникают проблемы со встроенными ресурсами, например, zfs-mount.service
загружается и работает, даже если пулы не импортированы, и, следовательно, монтирование не могло быть успешным.
Есть ли цель, от которой я могу сделать так, чтобы мои службы зависели для запуска только после того, как точка монтирования доступна, и отказывается запускаться, если не удалось инициализировать весь ZFS или только точку монтирования (и что я могу скопировать для локальной установки )?
Я использую Ubuntu 17.10.
Здесь много магии, но в Ubuntu 18.04 ответ обычно выглядит как zfs.target
, который указан как WantedBy
для всех различных zfs-*.service
s (mount, modprobe и т. Д.). Вы увидите это, если просмотрите
more /lib/systemd/system/zfs* | less
. Вы можете заметить, что есть также zfs-import.target
, который удовлетворяется после выполнения zpool import
, но до монтирования файловых систем.
В моем случае, однако, есть другие шаги, которые должны произойти в первую очередь (например, зашифрованное сопоставление блочных устройств), поэтому они не будут работать из коробки для меня.
Для конкретных точек монтирования я бы рекомендовал не полагаться на общее zfs.target
, а вместо этого добавить свой собственный сервис (возможно, с Wants=zfs.target
), который проверяет состояние конкретных монтирований вашего Система опирается на. Например, если вы полагаетесь на монтируемое /blah/my/zfs/mount
, просто создайте сервис для того, который может проверять состояние монтирования zfs перед возвратом, возможно, с помощью
zfs get mounted blah/my/zfs/mount | grep yes
/etc/systemd/system/my-zfs-mount.service
[Unit]
Description=ZFS mount blah/my/zfs/mount
Wants=zfs.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/zfs get mounted blah/my/zfs/mount | grep yes
[Install]
WantedBy=multi-user.target
И тогда другие ваши услуги могут зависеть от этого.