Show Table of Contents
A.3. Device Mapper 支持 udev 设备管理器
udev 设备管理器的主要任务是在 /dev 目录中提供设置节点的动态方法。在用户空间中使用udev 程序规则创建这些节点。在由内核直接发送的 udev 事件中执行这些规则即可添加、删除或者更改具体设备。这为热插拔支持提供了方便且集中的机制。
除创建实际节点外,
udev 设备管理器还可以创建用户可命名的任意符号链接,必要时为用户提供在 /dev 目录中自由选择自定义命名和目录结构。
每个
udev 事件都包含有关要处理设备的基本信息,比如名称、所属子系统、设备类型、使用的主号码和副号码以及事件类型。因此,如果能够访问 /sys 命令中的所有信息,就是说也可以使用 udev 规则访问,则用户就可以利用基于此信息的简单过滤器,并根据此信息有条件地运行这些规则。
udev 设备管理器还提供集中设置节点权限的方法。用户可轻松添加自定义规则组来为任意设备定义权限,所有设备都是由处理该事件时可用的字节信息指定。
还可在
udev 规则中直接添加程序钩。udev 设备管理器可调用这些程序以便进一步提供处理该事件的过程。另外,该程序还可导出环境变量作为这个过程的结果。任意给出的结果都可进一步作为信息补充资源的规则使用。
任意使用
udev 的程序库的软件都可接受并处理带全部可用信息的 udev 事件,因此该进程不只是与 udev 守护进程绑定。
A.3.1. 使用 Device Mapper 的 udev 整合
Device Mapper 提供对
udev 整合的直接支持。这样就将 Device Mapper 与所有与 Device Mapper 设备关联的 udev 进程同步,包括 LVM 设备。需要同步是因为 udev 守护进程中的规则程序与设备更改源的程序形成并行处理(比如 dmsetup 和 LVM)。没有这个支持,那么当用户尝试删除仍被前一个更改事件形成的 udev 规则打开并处理的设备时通常就会出问题,尤其在对那个设备的两次更改时间间隔非常短的时候。
Red Hat Enterprise Linux 为 Device Mapper 设备以及 LVM 提供官方支持的
udev 规则。表 A.1 “Device-Mapper 设备的 udev 规则” 中总结了这些规则,它们安装在 /lib/udev/rules.d 目录中。
表 A.1. Device-Mapper 设备的 udev 规则
| 文件名 | 描述 | ||
|---|---|---|---|
10-dm.rules |
| ||
11-dm-lvm.rules |
| ||
13-dm-disk.rules | 包含一般适用于所有 Device Mapper 设备以及在 /dev/disk/by-id、/dev/disk/by-uuid 和 /dev/disk/by-uuid 目录中创建符号链接的规则。 | ||
95-dm-notify.rules | 包含使用 libdevmapper 通知等待进程的规则(与 LVM 和 dmsetup 类似)。通知在所有之前的规则实施后执行以确定完成所有 udev 进程。然后恢复通知的进程。 | ||
69-dm-lvm-metad.rules | 包含可触发 LVM 在系统中新出现块设备中进行扫描的挂钩,并在可能时执行所有 LVM 自动激活。这个挂钩支持 lvmetad 守护进程,后者是使用 lvm.conf 文件的 use_lvmetad=1 设定。在集群环境中不支持 lvmeetad 守护进程及自动激活。 |
可以使用
12-dm-permissions.rules 文件添加额外的自定义权限规则。该文件不安装在 /lib/udev/rules 目录中,它位于 /usr/share/doc/device-mapper-version 目录。12-dm-permissions.rules 文件是包含如何设置权限提示的模板,它是根据示例中给出的匹配规则生成的。该文件包含一些常见情况的示例。您可以编辑这个文件并手动将其放在 /etc/udev/rules.d 目录中,在此文件不会受更新的影响,因此可保留其设置。
这些规则设定所有可在处理事件的过程中被其它规则使用的基本变量。
以下是在 10-dm.rules 中设定的变量:
DM_NAME:Device Mapper 设备名称DM_UUID:Device Mapper 设备 UUIDDM_SUSPENDED:Device Mapper 的挂起状态DM_UDEV_RULES_VSN:udev规则版本(这主要用于检查之前提到变量的所有其它规则,这些变量直接由官方 Device Mapper 规则设定)
以下是在
11-dm-lvm.rules 中设置的变量:
DM_LV_NAME:逻辑卷名称DM_VG_NAME:卷组名称DM_LV_LAYER:LVM 层名称
所有这些变量都可用于
12-dm-permissions.rules 文件,来为具体 Device Mapper 设备定义权限,如 12-dm-permissions.rules 文件所述。
A.3.2. 支持 udev 的命令和界面
表 A.2. 支持 udev 的 dmsetup 命令
| 命令 | 描述 |
|---|---|
dmsetup udevcomplete | 用于通知 udev 已经完成规则处理并解锁等待的进程(从 95-dm-notify.rules 的 udev 规则调用)。 |
dmsetup udevcomplete_all | 用于在调整过程中手动解锁所有等待进程。 |
dmsetup udevcookies | 用于在 debug 过程中显示所有现有 cookies(系统范围的信号)。 |
dmsetup udevcreatecookie | 用于手动创建 cookie(信号)。这在同一同步资源中运行多个进程时有用。 |
dmsetup udevreleasecookie | 用于等待所有与同步 cookie 中的所有进程关联的 udev 进程。 |
支持
udev 整合的 dmsetup 选项如下。
--udevcookie- 需要为所有我们要加入 udev 事务的所有 dmsetup 进程定义。它可与
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) man page。
LVM 命令支持以下支持
udev 整合的选项:
--noudevrules:在dmsetup命令中禁用udev规则。--noudevsync:在dmsetup命令中禁用udev同步。
lvm.conf 文件包含以下支持 udev 整合的选项:
udev_rules:为所有 LVM2 命令在全局启用/禁用udev_rules。udev_sync:为所有 LVM 命令在全局启用/禁用udev同步。
有关
lvm.conf 文件选项的详情请查看 lvm.conf 文件的行间注释。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.