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

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

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

例如:

[Unit]
Before=local-fs.target

[Mount]
What=/dev/disk/by-partlabel/${part_variable}
Where=/mnt/optional/config/

我正在尝试找到一种方法来使用自定义内核命令行 bootparam,并安装该 bootparam 提供的分区。

答案1

作为记录:

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

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

mnt-data.mount内容:

[Unit]
Description=Mount System Backups Directory

[Mount]
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults

如果你跑

systemctl set-environment SOMEPATH=/dev/disk/by-label/DATA

进而

systemctl start mnt-date.mount

它将安装/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

/path/to/env_file内容:

SOMEPATH=/dev/disk/by-uuid/1b5a38ca-9f0d-4f1a-8fc1-7c418e79bf07

这可能无法帮助您

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

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

答案2

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

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

答案3

不。

您所描述的正是生成器的用途,请参阅man systemd.generators。比较man systemd-fstab-generator从 生成安装单元,它还从内核命令行/etc/fstab读取。root=也就是说,如果您只支持内核命令行选项,并且没有配置文件,那么您可能会很乐意DefaultDependencies=no为此编写一个早期启动()服务单元。

相关内容