本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd.device — 设备单元配置
device
.device
以
".device
" 为后缀的单元文件,
封装了一个位于
sysfs/udev(7)
中的设备。
此类单元没有专用的配置选项。
systemd.unit(5)
中描述了通用于所有单元类型的配置选项(亦称"配置指令"或"单元属性"),
它们位于
"[Unit]
" 与 "[Install]
"
小节。由于此类单元没有专用的配置选项,
所以并不存在专用的 "[Device]
" 小节。
systemd 会自动动态的为所有带有"systemd"标记的设备创建 device 单元。
可以利用这个特性定义设备与单元之间的依赖关系。
可以通过在 udev 的 .rules 文件中使用 "TAG+="systemd"
" 来添加"systemd"标记。
所有块设备与所有网络设备都默认带有"systemd"标记,
此外,还有个别其他设备也默认带有"systemd"标记。
详见
udev(7)
手册。
device 单元的名称由该设备在 /sys
与 /dev
中的路径决定。
例如 /dev/sda5
对应的单元名称是
dev-sda5.device
。
有关将路径转化为单元名称的详细规则,
参见
systemd.unit(5) 手册。
每当有设备生成 "changed
" 事件时,
systemd 都会重新加载对应的设备单元。
其他单元可以使用 ReloadPropagatedFrom=
对设备事件作出反应。
许多单元依赖于特定的设备,
并且可以自动获得对相应 device 单元的依赖。例如,
.socket
单元可以自动获得对
BindToDevice=
指定的网络接口的 device 单元的依赖。
同样,swap 与 mount 单元也可以自动获得对所需块设备的 device
单元的依赖。
对 device 单元的配置,既可以通过修改单元文件实现,也可以直接通过配置 udev 规则库实现。因为 systemd 仅为带有 "systemd
"
标记的设备创建 device 单元,所以,下列属性仅可用于带有 "systemd
" 标记的设备。可配置的 udev 设备属性如下:
SYSTEMD_WANTS=
, SYSTEMD_USER_WANTS=
¶添加对其他单元的 Wants=
依赖。
systemd 系统实例使用 SYSTEMD_WANTS=
属性、
systemd 用户实例使用 SYSTEMD_USER_WANTS=
属性。
这两个属性可用于实现在特定设备可用时自动启动期望的单元。
注意,仅在设备首次激活时才会启动 Wants=
依赖的单元。
因此,向已激活的设备中添加 Wants=
依赖是没有意义的,但可以使用下面的
SYSTEMD_READY=
属性来控制是否将设备视为"已激活",
进而控制何时触发依赖关系。
属性值是一个空格分隔的单元名称列表。
如果使用了一个单元模板(单元名称中包含了一个 "@
" 字符,
但在 "@
" 字符之后的实例名称为空),
那么该模板将会被该设备的 "sysfs
"
路径自动实例化(也就是将转义后的路径作为实例化参数插入到模板名称中)。
此特性常用于为每个出现并匹配特定属性的设备实例化一次特定的模板。
SYSTEMD_ALIAS=
¶为该 device 单元添加一个别名。 必须是一个由绝对路径 转化而来的单元名称(见上文)。
SYSTEMD_READY=
¶设为 0 表示始终将该设备视为"已拔出",即使它实际上依然存在于 udev 设备树中。 默认值 1 表示只要该设备存在于 udev 设备树中, 就视为"已插入"。
该属性主要用于这样的设备:最初以"尚未初始化"的状态出现在设备树中(此时设备尚不可用),
接着在完成初始化之后再生成一个 "changed
" 事件(此时设备已可用)。
注意,当某设备的 SYSTEMD_READY=0
时,为其设置的 SYSTEMD_WANTS=
将会失效。
ID_MODEL_FROM_DATABASE=
, ID_MODEL=
¶设置该 device 单元的 描述字符串。