udev是kernel2.6中针对设备管理产生的新方式,udev可以通过sysfs下的/sys目录找到设备的相关信息,因此不需要事先把所有可能用到的设备文件在/dev中创建,而是动态灵活的支持热插拔功能,自动创建相关设备的设备文件,非常有弹性。

  udev中的配置文件在/etc/udev/下,其中rule.d/目录里面是具体的规则文件(待会会重点讲解规则的书写),udev.conf是udev全局配置文件。

  当用vim打开udev.conf文件的时候,会发现里面只有一条关于udev的log等级的内容

wKiom1UbgA2ChhE6AADNOVIJXNI127.jpg

当然,我们可以在此conf文件里面写入其他内容,比如udev_root=/dir,就代表我们的设备文件可以在自己定义的目录里,默认是在/dev/下,没有特殊需求,一般不用加入这个条目。

  下面重点讲解udev规则的写法,讲解之前我们考虑这样一个场景,比如我们发现一个IP-SAN的设备,比如ISCSI,因为ISCSI设备并不在本地服务上,所以可能存在每次连接ISCSI设备的时候,我们的设备名称不一样(第一次发现可能是/dev/sdb,第二次发现的时候可能叫/dev/sdc),这样会造成用户使用的时候出现设备不不一致的问题,或者当我们插入一个U盘的时候,我希望U盘的名字叫做myusb,而不再是系统分配的名称的时候,就需要书写规则,这也是udev带来的好处。那么我们所有的默认规则存放的路径就是在刚才提到的/etc/udev/rule.d/目录下

 wKioL1UbgwXCZQ2nAADGuHJvA1g196.jpg

 可以发现此规则命名的方式为:  数字-规则名.rules,因此我们自定义规则的名字可以把数字放的大一些,但不可以超过100,比如我们可以写一个规则叫做   99-myusb.rules

  这其中有一些书写规则的格式和符号需要了解

格式: wKioL1UblhbAfw9CAAA9Mz7OAtw423.jpg

符号:    ==   匹配键值对

               =   赋值

              +=追加赋值

              :=赋值后不可以被覆盖

下面我们举个刚才的例子来掩饰,当插入一个U盘的时候,默认系统会生成一个/dev/sdX设备名

通过编写自己的规则,使得U盘插入后,可以生成一个自定义的设备名 如/dev/myusb

 那么接下来有一个问题需要考虑,系统凭什么认为你插入的U盘就是myusb设备,而不是其他呢?这就需要为这个特殊的U盘找到一个(一些)仅仅属于它自己的属性(唯一性)

 通过udevadm   info  -a(所有属性) -p (路径) 命令来查看设备的属性

  udevadm info  -a  -p /sys/block/sdb

 找到一些特殊的属性

 下面给出简单的规则信息:

 wKiom1UbluTxNa0kAABBDPLTAvw161.jpg

 重新插入U盘,会生成一个/dev/myusb设备

wKioL1UbmMiShVCfAABQjcXsP18446.jpg

 当然,我们的规则中还可以加入更多内容,比如当插入此U盘后,有系统自动识别的名字叫做/dev/sdb,同时给这个设备做个链接,名字叫做/dev/myusb

wKiom1UbmmmSbTRwAAA7VqryRw0823.jpg

重新插入U盘,观察到有/dev/sdb,同时有个链接到sdb上的/dev/myusb

wKiom1Ubmr_AiUQsAABICEZ2SNM991.jpg

当然,我们还可以加入更多内容,udev提供了丰富的资源,比如可以为增加的设备加入拥有人和拥有组的权限,可以增加一个设备的同时,立刻运行一个脚本等功能。