我希望 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
需要更多选项,例如文件系统和选项。