我一直在错误的假设下工作,即自动创建的挂载点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