web-dev-qa-db-ja.com

/ bin / mountによってアクティブ化されるsystemd.mountに依存関係を追加するにはどうすればよいですか?

私は_mount /mnt/test_のsystemdにプログラムを自動的に呼び出して(実際にはcryptsetupで基礎となるデバイスのロックを解除し、ここでテストするためにecho)、ファイルシステムがマウントされる前と後でマウント解除。

_/etc/systemd/system/stickbak-encryption.service_の場合:

_[Unit]
Description=stickbak encryption
Before=mnt-test.mount
StopWhenUnneeded=true

[Service]
Type=oneshot
ExecStart=/bin/echo Unlock device.
RemainAfterExit=true
ExecStop=/bin/echo Lock device.

[Install]
RequiredBy=mnt-test.mount
_

および_/etc/fstab_(一部):

_/dev/$DEVICE /mnt/test auto noauto 0 0
_

これは、_systemctl start mnt-test.mount_およびそれぞれ_systemctl stop mnt-test.mount_(ルートとして)に対して(デーモンのリロードおよびサービスの有効化後に)機能します。

ただし、_mount /mnt/test_では、_systemctl status mnt-test.mount stickbak-encryption_は後者のサービスがinactive (dead)であり、前者がactive (mounted)であることを示しています。

_/bin/mount_が呼び出されたときに守られる依存関係を設定するにはどうすればよいですか(できないのですか?)マウントユニットのステータスは、_mount /mnt/test_が_ExecMount=/bin/mount /dev/$DEVICE /mnt/test -t auto -o noauto_に変換されているように見えるため、systemdに通知されるようです。

7
Tim Landscheidt

ごく最近、同じ質問をしましたが、すぐにそのようには機能しないことに気づきました。

mountコマンドラインプログラムを使用する場合、systemdは関与しません。mount/etc/fstabを読み取り(またはコマンドラインからオプションを取得し)、デバイスをマウントします。 systemdマウントユニットを開始すると、systemdによって解析され、mountシステムコールを内部的に使用してマウントを実行します。

したがって、mountを使用するときにsystemdに参加する方法はありません。

余談ですが、mountとsystemdの使用には、/etc/fstabで有効と見なされるものに興味深い違いがあります。 Systemdはファイルを解析し、マウントユニットを作成して使用します。その場合、mountが必要とするよりも少ないパラメーターを受け入れます。

Systemdを使用する場合は、デバイスとマウントポイントを指定するだけで済みますが、mountには、ファイルシステムやオプションなどの追加オプションが必要です。

5
starfry