0
点赞
收藏
分享

微信扫一扫

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


udev 的简单规则:


清单 10. 产生网卡设备文件的规则

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. 为指定大小的磁盘产生符号链接的规则

SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK ="my_disk"


该规则表示:如果存在设备的子系统为 block,并且大小为 71096640(block),则为该设备的设备文件名产生一个名为 my_disk 的符号链接。


清单 12. 通过外部命令为指定序列号的磁盘产生设备文件的规则

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 保留的规则

KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p", RESULT=="35000c50000a7ef67", \ NAME="root_disk%n", SYMLINK="symlink_root_disk%n

  • 清单 14. udevtest 的执行过程

[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 的执行过程

[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 存储产品的测试经验。

举报

相关推荐

0 条评论