A.3. Device Mapper Support for the udev Device Manager
The primary role of the udev
device manager is to provide a dynamic way of setting up nodes in the /dev
directory. The creation of these nodes is directed by the application of udev
rules in userspace. These rules are processed on udev
events sent from the kernel directly as a result of adding, removing or changing particular devices. This provides a convenient and central mechanism for hotplugging support.
Besides creating the actual nodes, the udev
device manager is able to create any symbolic links with their own names as well, providing users the freedom to choose their own customized naming and directory structure in the/dev
directory, if needed.
Each udev
event contains basic information about the device being processed, such as its name, the subsystem it belongs to, the device's type, its major and minor number used, and the type of the event. Given that, and having the possibility of accessing all the information found in the /sys
directory that is also accessible within udev
rules, the users are able to utilize simple filters based on this information and run the rules conditionally based on this information.
The udev
device manager also provides a centralized way of setting up the nodes' permissions. A user can easily add a customized set of rules to define the permissions for any device specified by any bit of information that is available while processing the event.
It is also possible to add program hooks in udev
rules directly. The udev
device manager can call these programs to provide further processing that is needed to handle the event. Also, the program can export environment variables as a result of this processing. Any results given can be used further in the rules as a supplementary source of information.
Any software using the udev
library is able to receive and process udev
events with all the information that is available, so the processing is not bound to the udev
daemon only.
A.3.1. udev Integration with the Device Mapper
In RHEL 6, the Device Mapper provides direct support for udev
integration. This synchronizes the Device Mapper with all udev
processing related to Device Mapper devices, including LVM devices. The synchronization is needed since the rule application in the udev
daemon is a form of parallel processing with the program that is the source of the device's changes (such as dmsetup
and LVM). Without this support, it was a common problem for a user to try to remove a device that was still open and processed by udev
rules as a result of a previous change event; this was particularly common when there was a very short time between changes for that device.
Table A.1. udev Rules for Device-Mapper Devices
Filename |
Description |
10-dm.rules |
Contains basic/general Device Mapper rules and creates the symlinks in /dev/mapper with a /dev/dm-N target where N is a number assigned dynamically to a device by the kernel (/dev/dm-N is a node) |
NOTE: /dev/dm-N nodes should never be used in scripts to access the device since the N number is assigned dynamically and changes with the sequence of how devices are activated. Therefore, true names in the /dev/mapper directory should be used. This layout is to support udev requirements of how nodes/symlinks should be created. |
|
11-dm-lvm.rules |
Contains rules applied for LVM devices and creates the symlinks for the volume group's logical volumes. The symlinks are created in the /dev/vgname directory with a /dev/dm-N target. |
NOTE: To be consistent with the standard for naming all future rules for Device Mapper subsystems, udev rules should follow the format 11-dm-subsystem_name .rules . Any libdevmapper users providing udev rules as well should follow this standard. |
|
13-dm-disk.rules |
Contains rules to be applied for all Device Mapper devices in general and creates symlinks in the /dev/disk/by-id , /dev/disk/by-uuid and the /dev/disk/by-uuid directories. |
95-dm-notify.rules |
Contains the rule to notify the waiting process using libdevmapper (just like LVM and dmsetup ). The notification is done after all previous rules are applied, to ensure any udev processing is complete. Notified process is then resumed. |
You can add additional customized permission rules by means of the 12-dm-permissions.rules
file. This file is not installed in the /lib/udev/rules
directory; it is found in the /usr/share/doc/device-mapper-version
directory. The 12-dm-permissions.rules
file is a template containing hints for how to set the permissions, based on some matching rules given as an example; the file contains examples for some common situations. You can edit this file and place it manually in the /etc/udev/rules.d
directory where it will survive updates, so the settings will remain.
These rules set all basic variables that could be used by any other rules while processing the events.
The following variables are set in 10-dm.rules:
-
DM_NAME
: Device Mapper device name
-
DM_UUID
: Device Mapper device UUID
-
DM_SUSPENDED
: the suspended state of Device Mapper device
-
DM_UDEV_RULES_VSN
: udev
rules version (this is primarily for all other rules to check that previously mentioned variables are set directly by official Device Mapper rules)
The following variables are set in 11-dm-lvm.rules
:
-
DM_LV_NAME
: logical volume name
-
DM_VG_NAME
: volume group name
-
DM_LV_LAYER
: LVM layer name
All these variables can be used in the 12-dm-permissions.rules
file to define a permission for specific Device Mapper devices, as documented in the 12-dm-permissions.rules
file.