如何向 /bin/mount 激活的 systemd.mount 添加依赖项?

如何向 /bin/mount 激活的 systemd.mount 添加依赖项?

我希望 systemd在安装文件系统之前和卸载之后mount /mnt/test自动调用一个程序(在现实生活中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(作为 root)。

mount /mnt/test然而,Onsystemctl 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 收到了通知。

答案1

我最近问了自己同样的问题,但我很快意识到事实并非如此。

当您使用mount命令行程序时,不涉及 systemd:mount读取/etc/fstab(或从命令行获取选项)并安装设备。当您启动 systemd 挂载单元时,它会由 systemd 进行解析,并在内部使用 mount 系统调用来执行挂载。

所以你使用的时候systemd是没有办法介入的mount

顺便说一句,using 和 systemd 之间有一个有趣的区别,mount即它们在/etc/fstab. Systemd 解析该文件并创建随后使用的安装单元。当它这样做时,它接受的参数比mount需要的要少。

如果您使用 systemd,则只需提供设备和安装点,但mount需要更多选项,例如文件系统和选项。

相关内容