是否可以在 systemd 安装单元配置中使用变量?

sob*_*sob 4 systemd

是否可以在what=systemd 挂载配置文件的字段中使用变量而不是绝对路径字符串?

例如:

[Unit]
Before=local-fs.target

[Mount]
What=/dev/disk/by-partlabel/${part_variable}
Where=/mnt/optional/config/
Run Code Online (Sandbox Code Playgroud)

我试图找到一种使用自定义内核命令行引导参数的方法,并挂载该引导参数提供的分区。

don*_*sti 5

作为记录:

是否可以在What=systemd 挂载配置文件的字段中使用变量而不是绝对路径字符串?

是的,这是可能的,例如(刚刚测试过systemd v.238):

mnt-data.mount 内容:

[Unit]
Description=Mount System Backups Directory

[Mount]
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults
Run Code Online (Sandbox Code Playgroud)

如果你跑

systemctl set-environment SOMEPATH=/dev/disk/by-label/DATA
Run Code Online (Sandbox Code Playgroud)

进而

systemctl start mnt-date.mount
Run Code Online (Sandbox Code Playgroud)

它将安装/dev/disk/by-label/DATA到/mnt/data

或者,通过 env 文件:

mnt-data.mount 内容:

[Unit]
Description=Mount System Backups Directory

[Mount]
EnvironmentFile=/path/to/env_file
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults
Run Code Online (Sandbox Code Playgroud)

/path/to/env_file 内容:

SOMEPATH=/dev/disk/by-uuid/1b5a38ca-9f0d-4f1a-8fc1-7c418e79bf07
Run Code Online (Sandbox Code Playgroud)

这可能无法帮助您

找到一种使用自定义内核命令行引导参数的方法,并挂载该引导参数提供的分区。

但绝对可以使用What=${SOMEVAR}.


Mar*_*erg 1

根据man systemd.mount,那里不支持变量替换。

我相信仍然可以编写一个在启动过程早期运行的 systemd 服务,该服务会写出动态生成的.mount文件。