删除挂载单元停止/卸载时自动创建挂载点

删除挂载单元停止/卸载时自动创建挂载点

我一直在错误的假设下工作,即自动创建的挂载点systemd也会被自动删除。当我了解到systemd如果挂载点尚不存在,则为挂载单元创建挂载点时,我发现它的行为类似于 macOS,在/Volumes挂载设备之前和卸载设备之后分别创建和删除挂载点。

我的 Linux 设置之一是通过挂载单元或 进行配置fstab,具体取决于在任何给定时刻哪个似乎更好 - 在 处挂载 tmpfs /mnt。这相当于我的/Volumes。我的安装单元/mnt/<mount point name>用作各自的安装点。一个例子是安装/dev/cdrom/mnt/cdrom. (附带请求:如果有人也可以告诉我如何获取非 root 用户的挂载,这些挂载是使用诸如udisksctl挂载之类的工具执行的/mnt,那就太好了。)

我尝试寻找一种指令形式的解决方案,我可以添加到每个安装单元文件中,rmdir当安装单元“停止”时,该文件将调用其自己的安装点,但我发现的搜索结果中没有任何明确的内容。ExecStop无法识别安装单位systemctl

希望有一个优雅的解决方案专门systemd针对这种情况的开发人员。

答案1

我不知道执行此操作的内置方法,但可以使用服务模板文件来完成:

# /etc/systemd/system/[email protected]
[Unit]
Description=Remove mount point when stopped
Before=%i.mount
PartOf=%i.mount

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=rmdir %f

然后您可以将此行添加到[Unit]安装单元的部分:

Wants=cleanup-mount-point@%N.service

其中%N,挂载单元的名称成为%i上述服务模板中的 。

或者,如果您喜欢冒险,可以使用嵌入式文件将其应用到所有安装单元:

# /etc/systemd/system/mount.d/10-cleanup-mount-points.conf
[Unit]
Wants=cleanup-mount-point@%i.service

相关内容