A.3. udev 设备管理器的设备映射程序支持
udev 设备管理器的主要角色是提供在 /dev 目录中设置节点的动态方法。这些节点的创建由用户空间中的 udev 规则应用定向。这些规则在直接从内核发送的 udev 事件上处理,从而添加、删除或更改特定设备。这为热插拔支持提供了方便和集中的机制。
除了创建实际节点外,
udev 设备管理器还能够创建可命名的符号链接。这为您提供了在/dev 目录中选择自己的自定义命名和目录结构的自由(如果需要)。
每个
udev 事件都包含有关正在处理的设备的基本信息,如其名称、其所属子系统、设备的类型、其主号码和次号,以及事件的类型。因此,并且可以访问 /sys 目录中也可以可在 udev 规则中访问的所有信息,您可以根据此信息使用简单的过滤器,并根据此信息有条件地运行规则。
udev 设备管理器还提供了设置节点权限的集中方法。您可以添加一组自定义规则来为任何在处理事件时可用的信息指定的任何设备定义权限。
也可以直接在
udev 规则中添加程序 hook。udev 设备管理器可以调用这些程序来提供处理事件所需的进一步处理。另外,程序也可以根据此处理来导出环境变量。任何给定结果都可以在规则中进一步使用,作为信息的补充来源。
任何使用
udev 库的软件都可以接收和处理带有所有可用信息的 udev 事件,因此处理不只绑定到 udev 守护进程。
A.3.1. udev 与设备映射器集成 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
设备映射器提供对
udev 集成的直接支持。这会同步设备映射器与设备映射器设备相关的所有 udev 处理,包括 LVM 设备。需要同步,因为 udev 守护进程中的规则应用程序是一种与设备更改源(如 dmsetup 和 LVM)的程序并行处理的形式。如果没有这个支持,用户会在以前的更改事件时尝试删除仍然打开并处理的设备,这特别常见。这在设备更改之间有一个非常短的时间。
Red Hat Enterprise Linux 一般为设备映射器设备和 LVM 提供官方支持的
udev 规则。表 A.1 “Device-Mapper Devices 的 udev 规则” 总结了这些规则,这些规则安装在 /lib/udev/rules.d 中。
| filename | 描述 | ||
|---|---|---|---|
10-dm.rules |
| ||
11-dm-lvm.rules |
| ||
13-dm-disk.rules | 包含了为所有设备映射器设备应用的规则,并在 /dev/disk/by-id 和 /dev/disk/by-uuid 目录中创建符号链接。 | ||
95-dm-notify.rules | 包含使用 libdevmapper 通知等待进程的规则(就像 LVM 和 dmsetup)。通知在应用所有之前的规则后完成,以确保任何 udev 处理完成。然后,将恢复通知的进程。 | ||
69-dm-lvm-metad.rules | 包含一个 hook,用于在系统中任何新出现的块设备上触发 LVM 扫描,并尽可能执行任何 LVM 自动激活。这支持 lvmetad 守护进程,它在 lvm.conf 文件中使用 use_lvmetad=1 设置。集群环境中不支持 lvmetad 守护进程和自动激活。 |
您可以使用
12-dm-permissions.rules 文件添加额外的自定义权限规则。此文件 没有安装 在 /lib/udev/rules 目录中;它位于 /usr/share/doc/device-mapper-版本 目录中。12-dm-permissions.rules 文件是一个模板,其中包含有关如何根据示例给出的一些匹配规则设置权限的提示;该文件包含一些常见情况的示例。您可以编辑此文件,并将其手动放在 /etc/udev/rules.d 目录中,该文件将保留下来,因此设置会保留下来。
这些规则设置处理事件时可供任何其他规则使用的所有基本变量。
以下变量在
10-dm.rules 中设置:
DM_NAME:设备映射器设备名称DM_UUID:设备映射器设备 UUIDDM_SUSPENDED: 设备映射器设备的暂停状态DM_UDEV_RULES_VSN:udev规则版本(主要用于所有其他规则检查前面提到的变量是否直接由官方设备映射器规则设置)
以下变量在
11-dm-lvm.rules 中设置:
DM_LV_NAME: 逻辑卷名称DM_VG_NAME: 卷组名称DM_LV_LAYER: LVM 层名称
所有这些变量都可以在
12-dm-permissions.rules 文件中使用,以定义特定设备映射器设备的权限,如 12-dm-permissions.rules 文件中所述。
A.3.2. 支持 udev 的命令和接口 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
| 命令 | 描述 |
|---|---|
| dmsetup udevcomplete | 用于通知 udev 已完成处理规则并解锁等待的进程(从 95-dm-notify.rules的 udev 规则中调用)。 |
| dmsetup udevcomplete_all | 用于手动解锁所有等待的进程的目的。 |
| dmsetup udevcookies | 用于调试目的,以显示所有现有 Cookie(系统范围信号)。 |
| dmsetup udevcreatecookie | 用于手动创建 Cookie(旗语)这在一个同步资源下运行多个进程非常有用。 |
| dmsetup udevreleasecookie | 用于等待与所有进程相关的所有 udev 处理,并置于那个同步 Cookie 下。 |
支持
udev 集成的 dmsetup 选项如下。
--udevcookie- 需要为所有
dmsetup进程定义,我们需要添加到udev事务中。它与 udevcreatecookie 和 udevreleasecookie 结合使用:COOKIE=$(dmsetup udevcreatecookie) dmsetup command --udevcookie $COOKIE .... dmsetup command --udevcookie $COOKIE .... .... dmsetup command --udevcookie $COOKIE .... dmsetup udevreleasecookie --udevcookie $COOKIE除了使用--udevcookie选项外,您还可以将变量导出到进程的一个环境中:export DM_UDEV_COOKIE=$(dmsetup udevcreatecookie) dmsetup command ... dmsetup command ... ... dmsetup command ... --noudevrules- 禁用
udev规则。节点/符号链接将由libdevmapper本身(旧方式)创建。如果udev无法正常工作,这个选项用于调试目的。 --noudevsync- 禁用
udev同步。这也可用于调试。
有关 dmsetup 命令及其选项的详情,请参考 dmsetup(8)手册页。
LVM 命令支持支持
udev 集成的以下选项:
--noudevrules: as for the dmsetup 命令禁用udev规则。--noudevsync: as for the dmsetup 命令禁用udev同步。
lvm.conf 文件包括以下支持 udev 集成的选项:
udev_rules: 在全局范围内为所有 LVM2 命令启用/禁用udev_rules。udev_sync:全局所有 LVM 命令启用/禁用udev同步。
有关
lvm.conf 文件选项的详情,请参考 lvm.conf 文件中的内联注释。