一、什么是udev
FROM AI:
udev是Linux 2.6内核及以后版本中引入的一个设备管理框架,它取代了之前的devfs系统。udev以守护进程的形式运行,并且工作在用户空间而不是内核空间。它的主要功能是动态地创建和管理/dev目录下的设备节点,并且能够根据系统中硬件设备的状态变化来动态更新这些节点。
udev利用了sysfs文件系统提供的信息来管理设备节点。sysfs是一个虚拟的文件系统,它以文件和目录的形式展示了系统中的实际硬件设备和总线。通过监听内核发出的uevent事件,udev能够识别和响应硬件的添加、移除和其他变化。
udev的工作流程包括:内核检测到新设备后,在sysfs中为该设备创建记录;udev守护进程检测到新设备并通过规则文件进行配置;规则文件中定义了如何根据设备属性创建设备节点或执行特定操作。
udev的配置文件(规则)存放在/etc/udev/rules.d/目录下,并且具有.rules扩展名。这些规则文件根据文件名的ASCII字母顺序被读取,一旦找到匹配新设备的规则,udev就会根据规则对设备进行配置。
总的来说,udev是Linux系统中一个非常重要的组件,它提供了灵活的方式来管理设备节点,支持热插拔设备,并且能够通过用户定义的规则来适应各种特定的设备管理需求。
在udev的早期版本中,规则文件确实被存放在/lib/udev/rules.d/目录下。然而,在现代的Linux发行版中,这个目录通常用于存放系统级别的udev规则,这些规则由系统安装包或硬件厂商提供,用于处理通用的硬件设备。用户自定义的规则则推荐存放在/etc/udev/rules.d/目录下,这样可以避免在系统升级时被覆盖,同时也提供了更好的灵活性和控制权给系统管理员。
/lib/udev/rules.d/目录下的规则文件在udev启动时会被加载和应用,但它们通常不会被普通用户修改,因为这些规则是系统级别的,并且是为了确保系统能够正确识别和配置大多数硬件设备而设计的。如果你需要添加或修改规则来适应特定的硬件配置或需求,应该在/etc/udev/rules.d/目录下进行。
总的来说,/lib/udev/rules.d/目录下的文件是有用的,但它们主要用于系统级别的设备管理,而用户自定义的规则应该放在/etc/udev/rules.d/目录下。
二、udev man page
udev翻译手册:https://www.jinbuguo.com/systemd/udev.html
三、udev事件监控
- udevadm
可以用udev的管理工具udeadm来监控系统中所有的udev事件。
组建好软raid之后,拔出所有成员盘,然后重启,插入单成员盘事件如下所示。
[curtis@192 ~]$ udevadm monitor --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
UDEV [53.550303] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2 (usb)
UDEV [53.560891] add /module/usb_storage (module)
UDEV [53.561245] add /devices/virtual/workqueue/scsi_tmf_2 (workqueue)
UDEV [53.561664] add /bus/usb/drivers/usb-storage (drivers)
UDEV [53.563384] add /module/uas (module)
UDEV [53.563705] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0 (usb)
UDEV [53.563726] add /bus/usb/drivers/uas (drivers)
UDEV [53.564957] bind /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2 (usb)
UDEV [53.565472] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2 (scsi)
UDEV [53.566353] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/scsi_host/host2 (scsi_host)
UDEV [53.567069] bind /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0 (usb)
UDEV [54.889762] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0 (scsi)
UDEV [54.898268] add /module/sd_mod (module)
UDEV [54.898481] add /class/scsi_disk (class)
UDEV [54.899083] add /bus/scsi/drivers/sd (drivers)
UDEV [54.910075] add /devices/virtual/bdi/8:0 (bdi)
UDEV [54.921349] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0 (scsi)
UDEV [54.922444] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0/scsi_device/2:0:0:0 (scsi_device)
UDEV [54.922475] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0/scsi_disk/2:0:0:0 (scsi_disk)
UDEV [54.923103] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0/bsg/2:0:0:0 (bsg)
UDEV [54.923138] add /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0/scsi_generic/sg1 (scsi_generic)
UDEV [54.923757] bind /devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb3/3-2/3-2:1.0/host2/target2:0:0/2:0:0:0 (scsi)
UDEV [55