您的位置:首页 > 运维架构 > Linux

使用 udev 高效、动态地管理 Linux 设备文件(转载)--3

2013-10-22 15:28 549 查看
    udev 的简单规则:

清单 10. 产生网卡设备文件的规则[/b]
SUBSYSTEM=="net", SYSFS{address}=="AA:BB:CC:DD:EE:FF", NAME="public_NIC"
该规则表示:如果存在设备的子系统为 net,并且地址 (MAC address) 为“AA:BB:CC:DD:EE:FF”,为该设备产生一个名为 public_NIC 的设备文件。

清单 11. 为指定大小的磁盘产生符号链接的规则[/b]
SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK ="my_disk"
该规则表示:如果存在设备的子系统为 block,并且大小为 71096640(block),则为该设备的设备文件名产生一个名为 my_disk 的符号链接。

清单 12. 通过外部命令为指定序列号的磁盘产生设备文件的规则[/b]
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
里保持系统分区名称的一致性,而不会受驱动加载顺序或者磁盘标签被破坏的影响,导致操作系统启动时找不到系统分区。
其他常用的 udev 命令:
udevtest:
udevtest
会针对一个设备,在不需要 uevent 触发的情况下模拟一次 
udev
的运行,并输出查询规则文件的过程、所执行的行为、规则文件的执行结果。通常使用 
udevtest
来调试规则文件。以下是一个针对设备 sda 的 
udevtest
例子。由于
udevtest
是扫描所有的规则文件 ( 包括系统自带的规则文件 ),所以会产生冗长的输出。为了让读者清楚地了解
udevtest
,本例只在规则目录里保留一条规则:

清单 13. 为 udevtest 保留的规则[/b]
KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p", RESULT=="35000c50000a7ef67", \
NAME="root_disk%n", SYMLINK="symlink_root_disk%n"
清单 14. udevtest 的执行过程[/b]
[root@HOST_RHEL5 rules.d]# udevtest /block/sda
main: looking at device '/block/sda' from subsystem 'block'
run_program: '/lib/udev/scsi_id -g -s /block/sda'
run_program: '/lib/udev/scsi_id' (stdout) '35000c50000a7ef67'
run_program: '/lib/udev/scsi_id' returned with status 0
udev_rules_get_name: reset symlink list
udev_rules_get_name: add symlink 'symlink_root_disk'
udev_rules_get_name: rule applied, 'sda' becomes 'root_disk'
udev_device_event: device '/block/sda' already in database, \
validate currently present symlinks
udev_node_add: creating device node '/dev/root_disk', major = '8', \
minor = '0', mode = '0660', uid = '0', gid = '0'
udev_node_add: creating symlink '/dev/symlink_root_disk' to 'root_disk'
可以看出,
udevtest
对 sda 执行了外部命令 
scsi_id
, 得到的 stdout 和规则文件里的 RESULT 匹配,所以该规则匹配。然后 ( 模拟 ) 产生设备文件 
/dev/root_disk
和符号链接 
/dev/symlink_root_disk
,并为其设定权限。

start_udev:
start
_
dev
命令重启 
udev
守护进程,并对所有的设备重新查询规则目录下所有的规则文件,然后执行所匹配的规则里的行为。通常使用该命令让新的规则文件立即生效:

清单 15. start_udev 的执行过程[/b]
[root@HOST_RHEL5 rules.d]# start_udev
Starting udev:                                             [  OK  ]
start
_udev
一般
没有标准输出,所有的 udev 相关信息都按照配置文件 (
udev.conf)
的参数设置,由 syslog记录。

回页首
小结:
udev 是高效的设备管理工具,其最大的优势是动态管理设备和自定义设备的命名规则,因此替代 devfs 成为 Linux 默认的设备管理工具。通过阅读本文,Linux 用户能够了解到 udev 的工作原理和流程,灵活地运用 udev 规则文件,从而方便地管理 Linux 设备文件。

参考资料
有关 Udev 更多信息,请参考:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html

在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。 

在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。 

关于作者
黃懋,IBM 中国系统和技术实验室,Open Systems Interoperability Validation Lab 存储测试团队的成员。3-4 年 Linux/Unix 平台和 SAN/NAS 存储产品的测试经验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: