device-mapper uevent

device-mapper uevent 程式碼增加了 device-mapper 建立和傳送 kobject uevent(使用者事件)的能力。此前,device-mapper 事件僅透過 ioctl 介面提供。uevent 介面的優勢在於事件包含環境屬性,為事件提供了更多上下文,從而避免了在收到事件後查詢 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