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 中。
Expand
表 A.1. Device-Mapper Devices 的 udev 规则
filename描述
10-dm.rules
包含常规设备映射器规则,并在 /dev/mapper 中创建符号链接,并带有 /dev/dm-N 目标,其中 N 是内核动态分配给设备的数字(/dev/dm-N 是节点)
注意: /dev/dm-N 节点不应用于脚本访问设备,因为 N 号是动态分配,并使用设备激活的顺序进行更改。因此,应使用 /dev/mapper 目录中的 true 名称。这个布局是支持如何创建节点/符号链接的 udev 要求。
11-dm-lvm.rules
包含为 LVM 设备应用的规则,并为卷组逻辑卷创建符号链接。符号链接在 /dev/vgname 目录中创建,其 /dev/dm- N 目标为 /dev/dm-N
注意:为了与命名设备映射器子系统的所有未来规则的标准一致,udev 规则应遵循格式 11-dm-subsystem_name.rules。提供 udev 规则的任何 libdevmapper 用户也应遵循这个标准。
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 :设备映射器设备 UUID
  • DM_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 的命令和接口

表 A.2 “dmsetup 命令支持 udev” 总结了支持 udev 集成的 dmsetup 命令。
Expand
表 A.2. dmsetup 命令支持 udev
命令描述
dmsetup udevcomplete 用于通知 udev 已完成处理规则并解锁等待的进程(从 95-dm-notify.rulesudev 规则中调用)。
dmsetup udevcomplete_all 用于手动解锁所有等待的进程的目的。
dmsetup udevcookies 用于调试目的,以显示所有现有 Cookie(系统范围信号)。
dmsetup udevcreatecookie 用于手动创建 Cookie(旗语)这在一个同步资源下运行多个进程非常有用。
dmsetup udevreleasecookie 用于等待与所有进程相关的所有 udev 处理,并置于那个同步 Cookie 下。
支持 udev 集成的 dmsetup 选项如下。
--udevcookie
需要为所有 dmsetup 进程定义,我们需要添加到 udev 事务中。它与 udevcreatecookieudevreleasecookie 结合使用:
COOKIE=$(dmsetup udevcreatecookie)
  dmsetup command --udevcookie $COOKIE ....
  dmsetup command --udevcookie $COOKIE ....
  ....
  dmsetup command --udevcookie $COOKIE ....
dmsetup udevreleasecookie --udevcookie $COOKIE
Copy to Clipboard Toggle word wrap
除了使用 --udevcookie 选项外,您还可以将变量导出到进程的一个环境中:
export DM_UDEV_COOKIE=$(dmsetup udevcreatecookie)
  dmsetup command ...
  dmsetup command ...
  ...
  dmsetup command ...
Copy to Clipboard Toggle word wrap
--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 文件中的内联注释。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat