systemd
によって管理されるサービスが開始される前に、ZFSマウントポイントが利用可能であることを確認したいと思います。したがって、systemd
ユニットでAfter=
スタンザを使用します。しかし、引数として何を書くべきでしょうか?
出荷されたバージョンで継続的なパフォーマンスの問題があるため、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
ubuntuでsystemd
のサポートに関する有用なドキュメントを見つけたことがなく、 開発者がターゲットにしているようだ .
ただし、別のシステムでは、組み込みリソースで問題が発生します。 zfs-mount.service
は、プールがインポートされず、マウントが成功しなかった場合でもロードされ実行されます。
マウントポイントが利用可能になった後にのみ起動し、ZFS全体またはマウントポイントのみの初期化に失敗した場合(およびローカルインストール用にコピーできる場合)に起動を拒否するために、サービスに依存できるターゲットはありますか?
Ubuntu 17.10を使用しています。
ここにはたくさんの魔法がありますが、Ubuntu 18.04では、答えは一般的にはzfs.target
であるようです。これはWantedBy
として示され、さまざまなzfs-*.service
s(マウント、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
そして、他のサービスはこれに依存できます。