在我入门udev的时候,看着各种各样的资料觉得这个东西很高深的时候,突然瞄到一篇文章里面说道: 要树立一个信念:udev很简单,当时不以为然,现在能够理解,其实稍作研究就能理解了,看起来很高端很遥远的Title,比如Linux Kernel,比如软硬件交互,比如热插拔等等,其实掌握几个rules,然后再动手实践实践,对比着讲解,就能知道七七八八了,想要再深入,就多看看文档实现和内核源码,其实很多东西都是这样,了解了就很简单,没事了解一点就比别人多知道一些,共勉

Udev 是什么

udev是linux kernel的设备管理器,处理硬件的添加和删除,但它的功能远远不仅于此。比如U盘插入,电脑是如何即时的做出响应?耳机插入又是如何做到自动关闭外部音量?这些都跟udev有关。虽然udev很强大,功能很多,本来就针对SCSI硬盘设备的插拔做一些经验的分享。至于为什么我会研究到这个东西,是因为最近在做ceph相关的项目,需要实现一个类似热插拔的feature,懂的人应该很清楚,就是拔插硬盘后,osd自动恢复,主要应用于硬盘寿命即将到期,替换新盘的场景,不明白的同学也不要紧,因为本文主要讨论的是udev

Udev Rules

udev管理各种各样的设备,比如USB,DISK,CD等等,为了区别设备类型,精确匹配,udev制定了一套特色的rules,为什么说特色呢?因为我觉得它用最简洁的语法满足了方方面面的需求

这里推荐一些有用的link:

UDEV Primer udev入门必读,可以快速将udev了解一番

Writing udev rules 经典文章,看完这个基本就能掌握udev rules

Writing udev rules 修订版 国内论坛对格式样式做了一些修改,有洁癖的可以看看

udev 中文手册 这位金步国先生为开源事业做出了杰出的贡献,早前就看过他翻译的Apache的手册

Udev 详解 文章如名,真的很详细

大家看完上面的文章应该知道rules文件的位置和规则,下面我贴一些我实践中的代码和例子

这是两条分别针对SCSI硬盘设备的添加和删除的rules,设备事件分别会触发相应的脚本:

KERNEL=="sd[a-z]", ACTION=="add", SUBSYSTEM=="block", RUN+="/usr/bin/python /root/test.py %k add"KERNEL=="sd[a-z]", ACTION=="remove", SUBSYSTEM=="block", RUN+="/usr/bin/python /root/test.py %k remove"

注意:

执行外部命令必须加上环境变量路径, 上面的这个也可以不加/usr/bin/python,但是必须在py脚本头部加上shebang:#! /usr/bin/python

RUN可以运行程序外的程序,而PROGRAM不是做这个事情的,而是为了生成之后需要的变量

相关 Link

Udevadm

udevadm是一个udev的管理工具,可以用来获取设备信息(info),监视和控制udev运行时的行为(control),请求内核事件(trigger),管理事件队列(settle),以及提供简单的调试机制(test)。很实用,很好用!!!

推荐 Link

udevadm command examples 很多udevadm的命令可以借鉴,说不定以后可以用到呢?

介绍几个我具体使用过的例子:

udevadm info

可以从udev数据库中提取设备信息,此外,还可以从sysfs中提取设备的属性, 以帮助创建与此设备匹配的udev规则

获取/dev/sdb的path信息

udevadm info -q path -n /dev/sdb

udevadm test

模拟向udev发送设备信息,并不会真的触发,而是将触发后的过程信息打印出来,对调试很有帮助, 我用这个查看脚本是否会被执行

udevadm test --action='add' `udevadm info -q path -n /dev/sdb`

注意: test不会真正触发事件,而trigger可以

udevadm trigger

可以真正触发udev事件,但是不会真正改变硬件,只是触发kernel和udev的事件,会触发udev rules,我用这个触发事件,校验rules匹配

udevadm trigger -v --action=add --sysname-match=sda

注意:

不加sysname-match那么会触发所有设备,如果是action=remove,那么则会移除很多设备,甚至导致sshd服务停掉

后面是sda而不是/dev/sda因为它是根据pci路径来定位name的,比如sda的路径是:

/sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda

udevadm control

重载udev rules,对之后触发的新设备有效,对之前已经触发的无效

udevadm control --relaod-rules

更改udev日志等级为info,udev默认等级为err,可以在/etc/udev/udev.conf中查看,日志具体信息可以在syslog中查看

udevadm control --log-priority=info

More about udev

udev还有很多有意思的地方,如果想要更加深入的学习,那么除了熟练地掌握rules等技巧,还要对其实现原理有了解,这就得多看文档,多看源码了,建议大家有条件的情况下多看源码,多看原始的东西,因为经过别人的总结就可能会变味,相互对比,不要一味依赖别人总结的产物

linux udev硬盘,Linux Udev相关推荐

  1. linux脚本硬盘,Linux mount挂载和卸载硬盘脚本分享

    Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% M ...

  2. linux quota硬盘,Linux系统中quota磁盘命令的相关使用解析

    磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得知已使用多少空 ...

  3. win7下格式化Linux格式硬盘,linux格式化硬盘 【应对指南】

    最近有win7系统的忠实伙伴发现电脑在运行的时候,遇到linux格式化硬盘 的问题,以前都没有遇到的,那么在遇到linux格式化硬盘 该怎么处理呢?其实linux格式化硬盘 处理起来并不难,现在小编就 ...

  4. linux quota硬盘,Linux 磁盘配额 quota

    Linux 磁盘配额 quota Quota一直就是个很有用的东西.如果您曾经申请过网络的mail服务时,那么肯定就会明白什么是20MB的邮件空间. 30MB的免费网页空间,这个20MB,30MB就是 ...

  5. linux 空硬盘,linux – dd在整个磁盘上,但不想要空的部分

    我有一个磁盘,比如/ dev / sda. 这是fdisk -l: Disk /dev/sda: 64.0 GB,64023257088 bytes 255 heads,63 sectors/trac ...

  6. 哪个Linux ATA 硬盘,linux – scsi和/ dev / disk / by-id下相同硬盘的ata条目

    你可以使用其中之一. 显示的大部分内容取决于您的控制器和磁盘.我使用SAS控制器和SAS磁盘(在某些情况下使用SATA SSD),但您可以随意使用任何您想要的zpool驱动器标识.您在这里看到ata和 ...

  7. 无人值守安装linux指定硬盘,Linux无人值守自动化安装详细配置流程!

    在生产环境中,往往需要给成百上千台服务器安装系统,手动安装略显蛋疼,网络自动化引导安装就能解决批量安装的问题,从此批量系统安装so easy! 以下配置流程均在CentOS 6.7实现 实现环境: P ...

  8. linux清除硬盘,linux下清除硬盘的几种方法

    硬盘在送人或丢弃时,应该小心一点,不然就成艳照门主角了,谁也不能保证自己的硬盘上没有什么不便于示人的东西,因此,你需要擦除硬盘上的数据. 理论上讲,目前,不存在完全安全的方法,因为,硬盘发展到如今,基 ...

  9. linux 刷新 硬盘,linux – 从一个新硬盘重新刷新SW RAID1和一个坏块的旧硬盘

    您能否验证磁盘上受影响的块和底层坏扇区是否重新分配到"备用扇区"区域?写操作失败时,应重新分配坏扇区.使用smartctl验证它: smartctl -a /dev/sdb | g ...

最新文章

  1. 36 岁开发者应聘被拒,这 3 位 50 岁程序员的生存秘籍送给你!
  2. r语言 svm 大样本_r语言基于SVM模型的文本分类研究 附数据代码
  3. mysql back blog_mysql的备份Xtrabackup
  4. httpd启动报错:httpd: apr_sockaddr_info_get() failed for jsp...
  5. 精彩回顾 | Apache Flink x Iceberg Meetup · 上海站
  6. Obejctive-C 中定义可变参函数
  7. Mysql中字段类型不一致导致索引无效
  8. 程序猿,该在一个公司呆多久?
  9. Qt creator5.7 OpenCV249之图片腐化(含源码下载)
  10. 汉字字符特征提取器 ,提取发音特征、字形特征用做深度学习的特征
  11. 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集
  12. 用latex画化学结构式
  13. php网站友链直显代码,友情链接代码有哪些 怎么写
  14. 设置计算机的启动顺序CDROM.C.A,怎么设置开机从光驱启动
  15. 强大的健身软件——Keep
  16. IP地址和子网的划分详解
  17. 深度学习 week1 采访部分补充
  18. 2020年阴历三月初一 投资理财~有些大v要警惕
  19. 过程参数仪表与检测课后作业知识点总结
  20. 【JAVASE】Java泛型实例化

热门文章

  1. 邮件地址的正则表达式
  2. 实验5.4 小数分数转换
  3. 字符检测CTPN的tensorflow实现
  4. Windows 10系统,cmd输入java,java -version有效,输入javac无效的解决办法,亲测
  5. DS3231时钟芯片IIC地址
  6. 【运维问题】hadoop启动失败:hadoop-functions.sh:行398: 未预期的符号 `<‘ 附近有语法错误
  7. 海外众筹项目怎么发起创建?
  8. java装箱问题_三维装箱问题Java代码的简单实现过程
  9. 从0到1写嵌入式操作系统---------------------------4尝试两个任务的切换
  10. css案例10——单行文本省略、多行省略