跳转至

06 规则匹配

特性描述

19种匹配规则,支持类shell模式匹配或正则表达式匹配

特性约束

规则行中需要包含至少GOTO、PROGRAM、IMPORT类token之一,否则在规则执行过程中会跳过该规则行。

子场景 1

ACTION规则匹配功能测试,针对add、change和move事件,每种事件生成对应的软链接。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

ACTION=="add", SYMLINK+="action_add"
ACTION=="change", SYMLINK+="action_change"
ACTION=="move", SYMLINK+="action_move"

启动devmaster

# devmaster &> log.txt &

创建回环设备:

# dd if=/dev/zero of=loop.img bs=1M count=100
# loopnum=$(losetup -f)
# losetup $loopnum loop.img
# mkfs.ext4 $loopnum

测试步骤

触发回环设备的uevent事件:

# devctl trigger $loopnum --action=add
# devctl trigger $loopnum --action=change
# devctl trigger $loopnum --action=move

结果验证

查看/dev目录下是否生成指向$loop0设备的action_*软链接:

# ll /dev/action*
lrwxrwxrwx 1 root root 5 Aug  5 17:29 /dev/action_add -> $loop0
lrwxrwxrwx 1 root root 5 Aug  5 17:29 /dev/action_change -> $loop0
lrwxrwxrwx 1 root root 5 Aug  5 17:29 /dev/action_move -> $loop0

测试结束

回收回环设备

# losetup -d $loopnum
# rm -f loop.img

删除软链接残留:

# rm -rf /dev/action_*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 2

DEVPATH规则匹配功能测试,如果设备事件的devpath以$loopnum为后缀,则创建match_devpath软链接。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

DEVPATH=="*$loopnum", SYMLINK+="match_devpath"

创建回环设备:

# dd if=/dev/zero of=loop.img bs=1M count=100
# loopnum=$(losetup -f)
# losetup $loopnum loop.img
# mkfs.ext4 $loopnum

启动devmaster

# devmaster &> log.txt &

测试步骤

触发$loopnum块设备的uevent事件:

# devctl trigger /dev/$loopnum

结果验证

查看/dev目录下是否生成指向/dev/$loopnum设备的match_devpath软链接:

# ll /dev/match*
lrwxrwxrwx 1 root root 3 Aug  5 17:39 /dev/match_devpath -> $loopnum

测试结束

删除软链接残留:

# rm -f /dev/match_devpath

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 3

KERNEL规则匹配的功能测试,如果设备的内核名等于lo,则创建/tmp/match_kernel临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

KERNEL=="$loopnum", PROGRAM=="/bin/touch /tmp/match_kernel"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发sda块设备的uevent事件:

# devctl trigger /dev/$loopnum

结果验证

查看match_kernel是否生成:

# ll /tmp/match_kernel
-rw-r--r-- 1 root root 0 Aug  5 17:49 /tmp/match_kernel

测试结束

删除临时文件:/tmp/match_kernel

# rm -f /tmp/match_kernel

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 4

NAME规则匹配和赋值的功能测试,首先给网卡设备命名为test,然后匹配网卡名是否是test,如果是的话创建/tmp/match_name临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

NAME="test"
NAME=="test", PROGRAM=="/bin/touch /tmp/match_name"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发虚拟网卡lo的uevent事件:

# devctl trigger /sys/class/net/lo

结果验证

查看/tmp目录下是否生成match_name文件:

# ll /tmp/match*
-rw-r--r-- 1 root root 0 Aug  5 18:06 /tmp/match_name

测试结束

删除临时文件

# rm -f /tmp/match_name

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 5

SUBSYSTEM规则匹配的功能测试。如果设备的子系统是块设备,则创建软链接/dev/match_subsystem指向该设备。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

SUBSYSTEM=="block", SYMLINK+="match_subsystem"

创建回环块设备/dev/$loopnum

启动devmaster

# devmaster &> log.txt &

测试步骤

触发回环块设备/dev/$loopnum的uevent事件:

# devctl trigger /dev/$loopnum

结果验证

查看/dev目录下是否生成指向/dev/$loopnum的match_subsystem软链接:

# ll /dev/match*
lrwxrwxrwx 1 root root 3 Aug  5 18:14 /dev/match_subsystem -> $loopnum

测试结束

删除临时软链接

# rm -rf /dev/match_subsystem

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

NAME规则仅作用于网卡设备事件

子场景 6

SYMLINK规则匹配和赋值的功能测试。先给设备添加软链接symlink_1,再检查设备的软链接中是否包含symlink_1,如果包含的话,添加软链接symlink_2。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

SYMLINK="symlink_1"
SYMLINK=="*symlink_1*", SYMLINK+="symlink_2"

创建回环设备/dev/$loopnum

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda的uevent事件:

# devctl trigger /dev/$loopnum

结果验证

查看/dev目录下是否生成指向/dev/$loopnum的symlink_*软链接:

# ll /dev/symlink*
lrwxrwxrwx 1 root root 3 Aug  5 18:14 /dev/symlink_1 -> $loopnum
lrwxrwxrwx 1 root root 3 Aug  5 18:14 /dev/symlink_2 -> $loopnum

测试结束

删除临时软链接

# rm -rf /dev/symlink_1 /dev/symlink_2

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 7

DRIVER规则匹配的功能测试。如果设备的driver属性为processor,则创建/tmp/match_driver临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

DRIVER=="processor", PROGRAM+="/bin/touch /tmp/match_driver"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发/sys/devices/system/cpu/cpu0的uevent事件:

# devctl trigger /sys/devices/system/cpu/cpu0

结果验证

查看临时文件/tmp/match_driver是否创建:

# ll /tmp/match_driver
-rw-r--r-- 1 root root 0 Aug  5 21:21 /tmp/match_driver

测试结束

删除临时文件

# rm -f /tmp/match_driver

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在多核cpu,其中包含cpu0

子场景 8

ATTR规则匹配的功能测试。判断sda的ro属性是否为0,若为0则创建/dev/match_attr软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

ATTR{ro}=="0", SYMLINK+="match_attr"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_attr软链接是否创建:

# ll /dev/match_attr
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_attr -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_attr

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

系统中存在sda1分区块设备,sda1的ro属性为0。

子场景 9

ENV规则匹配和赋值的功能测试。首先给设备赋予ID_TEST=test环境变量,然后检查ID_TEST环境变量的值是否是test,如果是则创建/tmp/match_env临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

ENV{ID_TEST}="test"
ENV{ID_TEST}=="test", PROGRAM+="/bin/touch /tmp/match_env"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发任意设备的uevent事件,比如/sys/class/net/lo:

# devctl trigger /sys/class/net/lo

结果验证

查看临时文件/tmp/match_env是否创建:

# ll /tmp/match_env
-rw-r--r-- 1 root root 0 Aug  5 22:26 /tmp/match_env

测试结束

删除临时文件

# rm -f /tmp/match_env

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 10

TAG规则匹配和赋值的功能测试。首先给设备赋予test标签,然后检查设备是否携带test标签,如果是则创建/tmp/match_tag临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

TAG+="test"
TAG=="test", PROGRAM+="/bin/touch /tmp/match_tag"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发任意设备的uevent事件,比如/sys/class/net/lo:

# devctl trigger /sys/class/net/lo

结果验证

查看临时文件/tmp/match_tag是否创建:

# ll /tmp/match_tag
-rw-r--r-- 1 root root 0 Aug  5 22:52 /tmp/match_tag

查看/run/devmaster/tags目录下是否存在test子目录,且test子目录中包含n1文件(回环网卡设备/sys/class/net/lo的设备id):

# ll /run/devmaster/tags/test/
total 0
-r--r--r-- 1 root root 0 Aug  5 22:52 n1

测试结束

删除临时文件

# rm -f /tmp/match_tag

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

子场景 11

TEST规则匹配的功能测试。如果存在/tmp/test_file则创建/dev/match_test2软链接;若其权限为0660,则创建/dev/match_test软链接。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

TEST{0660}=="/tmp/file", SYMLINK+="match_test"
TEST=="/tmp/file", SYMLINK+="match_test2"

创建权限为0660的文件 /tmp/test_file

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_test软链接是否创建:

# ll /dev/match_test*
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_test -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_test2 -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_test*

清理devmaster残留数据

# rm -rf /run/devmaster/*

删除文件

# rm -f /tmp/test_file

测试场景约束

系统中存在sda1分区块设备

子场景 12

PROGRAM匹配规则的功能测试。首先执行PROGRAM=="/bin/echo hello world"规则,规则中声明的命令运行成功,PROGRAM规则成功匹配,创建/dev/match_program软链接。然后执行PROGRAM!="/bin/cat none"规则,由于none文件不存在,cat命令返回非零值,PROGRAM!=规则由于使用了不等于操作符,在命令返回非零值时规则判断为真,因此创建/dev/nomatch_program软链接。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

PROGRAM=="/bin/echo hello world", SYMLINK+="match_program"
PROGRAM!="/bin/cat none", SYMLINK+="nomatch_program"

创建回环块设备/dev/$loopnum

启动devmaster

# devmaster &> log.txt &

测试步骤

触发回环块设备的uevent事件:

# devctl trigger /dev/$loopnum

结果验证

查看软链接是否创建:

# ll /dev/*match_program
lrwxrwxrwx 1 root root 5 Aug  6 00:27 /dev/match_program -> $loopnum
lrwxrwxrwx 1 root root 5 Aug  6 00:27 /dev/nomatch_program -> $loopnum

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

删除软链接

# rm -rf /dev/*match_program

测试场景约束

子场景 13

RESULT匹配规则的功能测试。首先使用PROGRAM规则执行/bin/echo hello world命令,devmaster捕获hello world标准输出,并用于下一次RESULT规则匹配。RESULT匹配规则中检查最近的PROGRAM规则中执行命令的标准输出内容是否为hello world,如果是,则创建/tmp/match_result临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

PROGRAM=="/bin/echo hello world"
RESULT=="hello world", PROGRAM=="/bin/touch /tmp/match_result"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发任意设备的uevent事件,比如/sys/class/net/lo:

# devctl trigger /sys/class/net/lo

结果验证

查看临时文件/tmp/match_result是否创建:

# ll /tmp/match_result
-rw-r--r-- 1 root root 0 Aug  5 23:53 /tmp/match_result

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

删除临时文件

# rm -f /tmp/match_result

测试场景约束

子场景 14

IMPORT{program}规则测试。首先使用IMPORT{program}=="/bin/echo hello=world"规则,获取hello=world环境变量并导入到设备中,然后使用ENV{hello}规则检查hello变量的值是否是world,如果是则创建/tmp/match_import_program临时文件。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

IMPORT{program}=="/bin/echo hello=world"
ENV{hello}=="world", PROGRAM=="/bin/touch /tmp/match_import_program"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发回环虚拟网卡的uevent事件

# devctl trigger /sys/class/net/lo

结果验证

/tmp/match_import_program已创建:

# ll /tmp/match_import_program
-rw-r--r-- 1 root root 0 Aug  6 02:02 /tmp/match_import_program

数据库中包含hello=world环境变量:

# cat /run/devmaster/data/n1
I:1691258446
E:hello=world

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

删除临时文件

# rm -f /tmp/match_import_program

测试场景约束

子场景

IMPORT{builtin}规则测试。使用IMPORT{builtin}=="path_id"规则,获取PCI总线上注册设备的ID_PATH等环境变量。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

IMPORT{builtin}=="path_id"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发PCI总线上注册设备的uevent事件

# devctl trigger /sys/devices/pci0000\:00/0000\:00\:00.0

结果验证

数据库中包含ID_PATH等环境变量:

# cat /run/devmaster/data/+pci\:0000\:00\:00.0
I:1691260364
E:ID_PATH=pci-0000:00:00.0
E:ID_PATH_TAG=pci-0000_00_00_0

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

测试场景约束

环境中包含PCI总线pci0000\:00,且总线上注册了/sys/devices/pci0000\:00/0000\:00\:00.0设备

子场景 16

IMPORT{file}规则测试。使用IMPORT{file}规则,从某个文件中获取满足key=value形式的键值文本行,并导入到设备数据库中。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

IMPORT{file}=="/tmp/import_file"

创建临时文件:/tmp/import_file

# echo hello=world >> /tmp/import_file

启动devmaster

# devmaster &> log.txt &

测试步骤

触发虚拟回环网卡的uevent事件:

# devctl trigger /sys/class/net/lo

结果验证

数据库中包含hello=world环境变量:

# cat /run/devmaster/data/n1
I:1691261151
E:hello=world

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

删除临时文件

# rm -f /tmp/import_file

测试场景约束

子场景 17

IMPORT{db}规则测试。使用IMPORT{db}规则,从设备原来的数据库中获取某个环境变量,并导入到新的数据库中,老数据库中剩余的环境变量则被抛弃。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

IMPORT{db}=="name"

构造虚拟回环网卡的数据库内容

# echo "E:name=jonny
> E:hello=world" > /run/devmaster/data/n1

启动devmaster

# devmaster &> log.txt &

测试步骤

触发虚拟回环网卡的uevent事件:

# devctl trigger /sys/class/net/lo

结果验证

数据库中包含name=jonny环境变量,无hello=world环境变量:

# cat /run/devmaster/data/n1
I:1691261973
E:name=jonny

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

测试场景约束

子场景 18

IMPORT{cmdline}规则测试。使用IMPORT{cmdline}规则,系统的启动参数/proc/cmdline中获取配置项,并导入到数据库的环境变量中。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

IMPORT{cmdline}=="root"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发虚拟回环网卡的uevent事件:

# devctl trigger /sys/class/net/lo

结果验证

数据库中包含root环境变量:

# cat /run/devmaster/data/n1
I:1691261973
E:root=/dev/mapper/openeuler-root

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

测试场景约束

系统启动参数中配置了root选项

子场景 19

IMPORT{parent}规则测试。使用IMPORT{parent}规则,从直接父设备的数据库中获取某个环境变量,并导入到自己的数据库中。

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

KERNEL=="sda", IMPORT{builtin}=="path_id"
KERNEL=="sda1", IMPORT{parent}=="ID_PATH"

启动devmaster

# devmaster &> log.txt &

测试步骤

依此触发块设备sda和sda的分区设备sda1的事件,两次触发动作间保留一定的时隙:

# devctl trigger /dev/sda
# sleep 1
# devctl trigger /dev/sda1

结果验证

sda1的数据库中包含ID_PATH环境变量,其值和sda一致:

# cat /run/devmaster/data/b8\:1
I:1691263274
E:ID_PATH=pci-0000:00:10.0
# cat /run/devmaster/data/b8\:0
I:1691263270
E:ID_PATH_TAG=pci-0000_00_10_0
E:ID_PATH=pci-0000:00:10.0

测试结束

删除devmaster数据残留

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,且sda拥有分区sda1。

子场景 20

KERNELS匹配规则的功能测试。KERNELS规则会匹配设备自身和所有父设备的内核名,如果找到任一满足匹配的父设备,则匹配为真。首先使用KERNELS规则匹配sda1设备自身的内核名sda1,匹配成功后创建/dev/match_kernel1软链接;然后匹配sda1的一级父设备的内核名sda,匹配成功则创建/dev/match_kernel2软链接;最后匹配与sda1二级父设备的内核名2:0:0:0并创建/dev/match_kernel3软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

KERNELS=="sda1", SYMLINK+="match_kernel1"
KERNELS=="sda",SYMLINK+="match_kernel2"
KERNELS=="2:0:0:0",SYMLINK+="match_kernel3"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_kernel软链接是否创建:

# ll /dev/match_kernel*
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_kernel1 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_kernel2 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_kernel3 -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_kernel*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,sda拥有分区sda1,sda注册在pci总线的2:0:0:0插槽上。

子场景 21

SUBSYSTEMS匹配规则的功能测试。规则文件中写的SUBSYSTEM属性与sda1的subsystem相等,则创建/dev/match_subsystem1软链接;与sda1一级父设备subsystems相等,则创建/dev/match_subsystem2软链接;与sda1二级父设备subsystems相等,则创建/dev/match_subsystem3软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

SUBSYSTEMS=="block", SYMLINK+="match_subsystem1"
SUBSYSTEMS=="block",SYMLINK+="match_subsystem2"
SUBSYSTEMS=="scsi",SYMLINK+="match_subsystem3"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_subsystem软链接是否创建:

# ll /dev/match_subsystem*
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_subsystem1 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 15:13 /dev/match_subsystem2 -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_subsystem*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,sda拥有分区sda1。

子场景 22

DRIVERS匹配规则的功能测试。DRIVERS规则会递归匹配所有父设备的driver属性,匹配成功后创建/dev/match_driver1和/dev/match_driver2软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

DRIVERS=="sd", SYMLINK+="match_driver1"
DRIVERS=="mptspi",SYMLINK+="match_driver2"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_driver软链接是否创建:

# ll /dev/match_driver*
lrwxrwxrwx. 1 root root 4  8月 10 14:59 /dev/match_driver1 -> sda2
lrwxrwxrwx. 1 root root 4  8月 10 14:59 /dev/match_driver2 -> sda2

测试结束

删除临时软链接

# rm -f /dev/match_driver*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,sda拥有分区sda1。sda1自身或者父设备的driver属性为sd或者mptspi。

子场景 23

ATTRS匹配的功能测试。规则文件中ATTRS{ro}与sda1的ro属性相等时,创建/dev/match_attrs1软链接;ATTR{queue/iostats}与sda1一级父设备的queue/iostats相等时,创建/dev/match_attrs2软链接;ATTR{scsi_level}与sda1二级父设备的scsi_level相等时,创建/dev/match_attrs3软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

ATTRS{ro}=="0", SYMLINK+="match_attrs1"
ATTRS{queue/iostats}=="1", SYMLINK+="match_attrs1"
ATTRS{scsi_level}=="3", SYMLINK+="match_attrs1"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_attrs软链接是否创建:

# ll /dev/match_attrs*
lrwxrwxrwx. 1 root root 4  8月 10 16:02 /dev/match_attrs1 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 16:02 /dev/match_attrs2 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 16:02 /dev/match_attrs3 -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_attrs*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,sda拥有分区sda1。sda1自身或者父设备存在ro为0的属性、queue/iostats为1的属性和scsi_level为3的属性。

子场景 24

TAGS匹配的功能测试。分别为sda1、其一级父设备、二级父设备设置标签,使用TAGS匹配这些标签,若标签存在,则创建对应的/dev/match_tags*软链接

备注

准备工作

创建配置文件:/etc/devmaster/config.toml

rules_d = ["/tmp/1/rules.d"]

创建规则文件:/tmp/1/rules.d/00-test.rules

KERNELS="sda1", TAG+="d0"
KERNELS="sda", TAG+="d1"
KERNELS="2:0:0:0", TAG+="d2"

TAGS=="d0",SYMLINK+="match_tags0"
TAGS=="d1",SYMLINK+="match_tags1"
TAGS=="d2",SYMLINK+="match_tags2"

启动devmaster

# devmaster &> log.txt &

测试步骤

触发块设备/dev/sda1的uevent事件:

# devctl trigger /dev/sda1

结果验证

查看match_tags软链接是否创建:

# ll /dev/match_tags*
lrwxrwxrwx. 1 root root 4  8月 10 17:25 /dev/match_tags0 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 17:25 /dev/match_tags1 -> sda1
lrwxrwxrwx. 1 root root 4  8月 10 17:25 /dev/match_tags2 -> sda1

测试结束

删除临时软链接

# rm -f /dev/match_tags*

清理devmaster残留数据

# rm -rf /run/devmaster/*

测试场景约束

环境中存在块设备sda,sda拥有分区sda1,sda注册在pci总线的2:0:0:0插槽上。


最后更新: November 4, 2023
创建日期: August 23, 2023