使用建立的子資料夾在啟動時掛載 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命令中。

相關內容