是否可以在 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
为此编写一个早期启动()服务单元。