device-mapper uevent

device-mapper uevent 代码为 device-mapper 添加了创建和发送 kobject uevent (uevent) 的功能。之前,device-mapper 事件仅可通过 ioctl 接口获得。uevents 接口的优点是事件包含环境变量属性,为事件提供了更丰富的上下文,避免了在接收事件后需要查询 device-mapper 设备的状态。

目前有两个用于 device-mapper 事件的函数。列出的第一个函数创建事件,第二个函数发送事件。

void dm_path_uevent(enum dm_uevent_type event_type, struct dm_target *ti,
                    const char *path, unsigned nr_valid_paths)

void dm_send_uevents(struct list_head *events, struct kobject *kobj)

添加到 uevent 环境中的变量是

变量名:DM_TARGET

Uevent 操作:

KOBJ_CHANGE

类型:

字符串

描述:

值:

生成该事件的 device-mapper 目标的名称。

变量名:DM_ACTION

Uevent 操作:

KOBJ_CHANGE

类型:

字符串

描述:

值:

导致 uevent 操作的 device-mapper 特定操作。PATH_FAILED - 路径已失败;PATH_REINSTATED - 路径已恢复。

变量名:DM_SEQNUM

Uevent 操作:

KOBJ_CHANGE

类型:

无符号整数

描述:

此特定 device-mapper 设备的序列号。

值:

有效的无符号整数范围。

变量名:DM_PATH

Uevent 操作:

KOBJ_CHANGE

类型:

字符串

描述:

与此事件相关的路径设备的主设备号和次设备号。

值:

格式为“主设备号:次设备号”的路径名称

变量名:DM_NR_VALID_PATHS

Uevent 操作:

KOBJ_CHANGE

类型:

无符号整数

描述:

值:

有效的无符号整数范围。

变量名:DM_NAME

Uevent 操作:

KOBJ_CHANGE

类型:

字符串

描述:

device-mapper 设备的名称。

值:

名称

变量名:DM_UUID

Uevent 操作:

KOBJ_CHANGE

类型:

字符串

描述:

device-mapper 设备的 UUID。

值:

UUID。(如果没有,则为空字符串。)

下面显示了由 udevmonitor 捕获的生成的 uevent 的示例

1.) 路径故障

UEVENT[1192521009.711215] change@/block/dm-3
ACTION=change
DEVPATH=/block/dm-3
SUBSYSTEM=block
DM_TARGET=multipath
DM_ACTION=PATH_FAILED
DM_SEQNUM=1
DM_PATH=8:32
DM_NR_VALID_PATHS=0
DM_NAME=mpath2
DM_UUID=mpath-35333333000002328
MINOR=3
MAJOR=253
SEQNUM=1130

2.) 路径恢复

UEVENT[1192521132.989927] change@/block/dm-3
ACTION=change
DEVPATH=/block/dm-3
SUBSYSTEM=block
DM_TARGET=multipath
DM_ACTION=PATH_REINSTATED
DM_SEQNUM=2
DM_PATH=8:32
DM_NR_VALID_PATHS=1
DM_NAME=mpath2
DM_UUID=mpath-35333333000002328
MINOR=3
MAJOR=253
SEQNUM=1131