使用创建的子文件夹在启动时挂载 tmpfs 文件夹(易失性)

使用创建的子文件夹在启动时挂载 tmpfs 文件夹(易失性)

当前使用 Debian 9.5 和此fstab文件:

# /etc/fstab: static file system information.
#
/dev/mmcblk1p1  /              ext4   noatime,errors=remount-ro  0  1    
tmpfs           /var/volatile  tmpfs  defaults,x-mount.mkdir     0  0

现在,如果该文件夹/var/volatile不存在,则会创建该文件夹 ( x-mount.mkdir)。/var/volatile/subfolder在安装过程成功后创建子文件夹(例如)的正确方法是什么?

我希望在 systemd 继续执行其任务直至完成启动之前创建此子文件夹。

答案1

在探索了 systemd 之后,我偶然发现了一个令人惊奇的发现。事实证明,无需创建自定义服务来处理此问题,因为 systemd 已经为此提供了解决方案:systemd-tmpfiles。它是一种管理临时目录和文件的结构化且可配置的方法。

https://www.freedesktop.org/software/systemd/man/systemd-tmpfiles.html https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html

/etc/tmpfiles.d/volatile-subfolder.conf只需创建一个包含以下内容的文件:

d       /var/volatile/subfolder 0755 root root - -

并重新加载。

答案2

解决这个问题的一种方法是创建一个新的 systemd 服务(或修改现有的服务)来/var/volatile使用After=local-fs.targetunit 指令在 tempfs 中创建此目录。

[Unit]
Description=Tempfs initialize
After=local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=mkdir -p /var/volatile/subfolder


[Install]
WantedBy=multiuser.target

将其添加到/etc/systemd/system/tmpfsinit然后执行通常的systemctl daemon-reload && systemctl enable tempfsinit.

或者,如果您已经有自定义 systemd 服务,您还可以将Afterunit 指令和用于创建所需子目录的命令添加到ExecStartPre命令中。

相关内容