udev

操作系统:rhel6.4


   udev,在系统启动时是由rc.sysinit开启的,在系统中用来维护一个设备节点的机制。负责创建系统中所有硬件的设备节点。同时,使用硬式编码主要设备号和次要设备号来跟踪系统中关于一个设备的类型、属性、信息。当前,udev通过udevd进程以及系统中已被定义的规则来操作管理系统中的设备节点。使用规则,可以管理系统中设备节点的建立和属性,以及设备文件的名称创建。可以通过udev管理某些设备的所属人、所属组,权限,命名,软连接等等其他选项。


   udev创建一个兼容设备参考,udev无论类型和连接总线创建一个附属的CD符号链接,例如/dev/cdrom。/dev/cdrom是由udev参考附属的CD兼容驱动器创建的一个符号链接,CD兼容驱动器可以是CD-ROM,DVD-ROM,DVD-RW等等,驱动器可以是通过PATA,SATA,SCSI,USB连接到系统的。参考CD兼容驱动器所有这些设备的不同可以影响设备的文件名,不过还好有udev规则,无论类型、连接总线、CD兼容驱动器的类型,udev都可以参考设备为其创建/dev/cdrom,提供一个如一的文件名。

ex:

   #ls -l /dev/cdrom

   lrwxrwxrwx. 1 root root 3 11 Nov 23 03:30 /dev/cdrom -> sr0


   /sys是内核维护的文件系统在内存中的表现,类似/proc。当设备附属系统时,/sys为内核提供主要的组成信息,例如/sys/block列出所有的被系统认可的附属块设备:/sys/block/sda有第一个附属的SCSI吸盘设备的信息和设置。

   /sys中的一些文件信息,例如/sys/block/sda/device/model或/sys/block/sda/size具有只读的权限。另外一些文件,例如像/sys/block/sda/queue是可写的,可以改变设备在内核中的工作方式,一个例子是/sys/block/sda/queue/schaduler可以控制读写sda磁盘设备时的I/O调度策略。

ex:

   #cat /sys/block/sda/queue/scheduler

   noop anticipatory deadline [cfq]


/sys文件系统和udev有什么关系?

   udev可以使用/sys中储存的信息决定/dev中目前相关的设备文件。还有在/sys内有一个特定的文件uevent,uevent文件包含了当设备被内核认可后,udev通过的信息

ex:

   #cat /sys/block/sda/uevent

   MAJOR=8

   MINOR=0

   DEVNAME=sda

   DEVTYPE=disk


监控udev

   当一个设备被内核认可后,将会产生一个事件

   1.内核在/sys目录中填充结构

   2.内核发送一个uevent由udev提取

   3.接收到uevent后,udev给新设备创建设备节点,或者解析在/etc/udev/rules.d中的udev规则文件,决定udev追寻的行为

ex:

   #udevadm monitor

   #udevadm info --attribute-walk --name=sda

   #udevadm info --query=all --attribute-walk --path=/sys/block/sda


   在/etc/udev/rules.d/目录下可以添加自定义规则,udevd进程将解析这些文件(包括/lib/udev/rules.d)标准的命名格式是:<2位数字>-<名字>.rules

udev将监控这些文件,文件一旦发生变化将自动应用。

ex:

   SUBSYSTEM=="block", KERNEL=="sd*", SYMLINK+="mydisks/%k"

   SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sda", RESULT=="1ATA_ST1000LM024_HN-M101MBB_S2U5J9DCB65347", SYMLINK+="customdisk/customlink%n"

   SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sda", RESULT=="1ATA_ST1000LM024_HN-M101MBB_S2U5J9DCB65347", RUN+="/usr/bin/wall New disk %k"

   SUBSYSTEM=="block", KERNEL=="sdd*", OWNER="hulk", GROUP="disk", MODE="0640"


   #udevadm info --query=all --attribute-walk --path=/sys/block/vda

   #cat /etc/udev/rules.d/50-test.rules

   ACTION=="add", SUBSYSTEM=="block", DRIVERS=="virtio_blk", SYMLINK+="virio/%k", RUN+="/usr/bin/logger  -i -p daemon.info -t CUSTOMUDEV Added %k"

   #udevadm trigger --sysname-match=vda

   #tail -f /var/log/messages



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章