4 制定udev 规则和查询设备信息的实例
--------------------------------------------------------------------------------
4.1 查找设备的信息(属性)来制定udev规则
--------------------------------------------------------------------------------
当我们为指定的设备设定规则时,首先需要知道该设备的属性,比如设备的序列号、磁盘大小、厂商ID、设备路径等等。通常我们可以通过以下的方法获得:
查询sysfs文件系统:
前面介绍过,sysfs里包含了很多设备和驱动的信息。
例如:设备sda 的SYSFS{size} 可以通过cat/sys/block/sda/size得到;SYSFS{model}信息可以通过cat/sys/block/sda/device/model得到。
udevadm info命令:(CentOS5.3为udevinfo命令)
udevadm info 可以查询udev 数据库里的设备信息。例如:用udevadm info 查询设备sda 的model 和size 信息:
[root@rango ~]# udevadm info -a -p /sys/block/sda | egrep"model|size"
ATTR{size}=="976773168"
ATTRS{model}=="ST500DM002-1BD14
4.2 udev的简单规则
--------------------------------------------------------------------------------
产生网卡设备文件的规则
--------------------------------------------------------------------------------
SUBSYSTEM=="net", SYSFS{address}=="AA:BB:CC:DD:EE:FF",该规则表示:如果存在设备的子系统为net,并且地址(MAC address) 为“AA:BB:CC:DD:EE:FF”,为该设备产生一个名为public_NIC 的设备文件。
为指定大小的磁盘产生符号链接的规则
--------------------------------------------------------------------------------
SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK ="my_disk"该规则表示:如果存在设备的子系统为block,并且大小为71096640(block),则为该设备的设备文件名产生一个名为my_disk 的符号链接。
通过外部命令为指定序列号的磁盘产生设备文件的规则
--------------------------------------------------------------------------------
KERNEL=="sd*[0-9]", PROGRAM=="/lib/udev/scsi_id -g -s %p", \ RESULT=="35000c50000a7ef67", NAME +="root_disk%n"该规则表示:如果存在设备的内核设备名称是以 sd 开头( 磁盘设备),以数字结尾( 磁盘分区),并且通过外部命令查询该设备的SCSI_ID 号为“35000c50000a7ef67”,则产生一个以root_disk开头,内核号码结尾的设备文件,并替换原来的设备文件(如果存在的话)。例如:产生设备名/dev/root_disk2,替换原来的设备名/dev/sda2。
运用这条规则,可以在/etc/fstab里保持系统分区名称的一致性,而不会受驱动加载顺序或者磁盘标签被破坏的影响,导致操作系统启动时找不到系统分区。
4.3 其他常用的udev命令
--------------------------------------------------------------------------------
udevadm test(udevadm的子命令):针对一个设备,在不需要uevent 触发的情况下模拟一次udev的运行,并输出查询规则文件的过程、所执行的行为、规则文件的执行结果。
Simulate a udev event run for the given device, and print debugoutput
start_udev:start_dev命令重启udev守护进程,并对所有的设备重新查询规则目录下所有的规则文件,然后执行所匹配的规则里的行为。通常使用该命令让新的规则文件立即生效:
[root@rango ~]# start_udev
Starting udev: [ OK ]
start_udev一般没有标准输出,所有的udev 相关信息都按照配置文件(udev.conf)的参数设置,由syslog记录。