J'aimerais m'assurer qu'un point de montage ZFS est disponible avant que le service géré par systemd
ne démarre. J'utiliserais donc la strophe After=
dans l'unité systemd
. Mais quoi écrire comme argument?
J'utilise une installation locale de ZFS en raison de problèmes de performances persistants avec la version livrée et importe le seul pool avec
[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
parce que je n'ai jamais trouvé de documentation utile sur systemd
support sur Ubuntu et semble être ciblé par les développeurs seulement maintenant .
Cependant, sur un autre système, je rencontre également des problèmes avec les ressources intégrées, par exemple. zfs-mount.service
est chargé et en cours d'exécution même si aucun pool n'est importé et aucun montage n'a donc pu aboutir.
Existe-t-il une cible sur laquelle je peux faire dépendre mes services afin de ne démarrer que lorsque le point de montage est disponible et refuser de démarrer si tout le ZFS ou uniquement le point de montage n'a pas pu s'initialiser (et que je pouvais copier pour mon installation locale)?
J'utilise Ubuntu 17.10.
Il y a beaucoup de magie ici, mais sur Ubuntu 18.04, la réponse généralement semble être zfs.target
, qui est répertorié comme WantedBy
tous les divers zfs-*.service
s ( monter, modprobe, etc.). Vous verrez cela si vous parcourez
more /lib/systemd/system/zfs* | less
Vous remarquerez peut-être qu'il existe également un zfs-import.target
qui est satisfait une fois que zpool import
a été exécuté, mais avant que les systèmes de fichiers ne soient montés.
Dans mon cas, cependant, il faut d’abord passer par d’autres étapes (mappage de périphériques bloc chiffrés, par exemple) pour que celles-ci ne fonctionnent pas immédiatement.
Pour des points de montage spécifiques, je vous recommande de ne pas vous baser sur le zfs.target
général, mais plutôt d'ajouter votre propre service (peut-être avec Wants=zfs.target
) qui vérifie l'état des montages spécifiques sur lesquels votre système s'appuie. Par exemple, si vous comptez que /blah/my/zfs/mount
est monté, créez simplement un service permettant de vérifier l’état de montage de zfs avant de renvoyer, par exemple avec
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
Et puis vos autres services peuvent dépendre de celui-ci.