Linux udev

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

Udev 是什么

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

Udev Rules

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

这里推荐一些有用的link:UDEV Primer udev入门必读,可以快速将udev了解一番

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

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

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

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

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

Rules Example

这是两条分别针对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"

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

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

Link

Udevadm

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

推荐 Linkudevadm 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

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下如何检测DVD刻录机的设备

    现在的电脑都有配置DVD刻录机,那么要如何知道自己电脑的DVD刻录机的名字及写入速度呢?下面学习啦小编就给大家介绍几个Linux下检测DVD刻录机的名字及写入速度的方法,一起来了解下吧. 提问:我想要 ...

  2. 关闭linux udev检测,linux udev配置

    1.查询DISK uuid # /usr/lib/udev/scsi_id -g -u /dev/sdb 获取需要绑定ASM Disk磁盘的uuid for i in b c d e f g; do ...

  3. linux 恶意软件检测,Linux恶意软件检测共享主机

    我正在尝试在共享主机上安装优秀的http://www.rfxn.com/projects/linux-malware-detect/. 我已将激励更改为我的本地目录,但它在创建符号链接时出错,只读取/ ...

  4. Linux串口权限与udev理解

    Linux串口权限与udev理解 本文不是很深入的探讨权限和udev问题,只是分析在日常使用中有关的一些概念.理解和解决方式. 串口的问题 在现场开发的同事反映UOS工控机没有配置串口,每次都需要su ...

  5. linux udev硬盘,Linux Udev

    在我入门udev的时候,看着各种各样的资料觉得这个东西很高深的时候,突然瞄到一篇文章里面说道: 要树立一个信念:udev很简单,当时不以为然,现在能够理解,其实稍作研究就能理解了,看起来很高端很遥远的 ...

  6. linux udev 命令,Linux下udev详细介绍

    每次在搭建OracleRAC环境中,遇到问题最多的就是关于ASM磁盘的的问题,通过查看网上许多搭建RAC的文档,发现Oracle10g RAC大家普遍的修改/etc/udev/rules.d/60-r ...

  7. arm linux udev,关于交叉编译udev的问题。

    ti的cortex-a8,用的工具链是 :arm-linux-gnueabihf-gcc (版本是V4.9的,最新). udev的源码是V1.82的. ./configure --host=arm-l ...

  8. 使用rkhunter检测Linux的rootkit

    转载来源 :使用rkhunter检测Linux的rootkit : https://www.jianshu.com/p/9a5fcd4b236b 介绍 rootkit是Linux平台下最常见的一种木马 ...

  9. linux确定刻录机目录,Linux下检测DVD刻录机的设备名及写入速度的几种方法

    现在的电脑都有配置DVD刻录机,那么要如何知道自己电脑的DVD刻录机的名字及写入速度呢?下面小编就给大家介绍几个Linux下检测DVD刻录机的名字及写入速度的方法,一起来了解下吧. 提问:我想要知道我 ...

最新文章

  1. 如何在CentOS 7中禁止IPv6
  2. Centos基础优化
  3. python读取math_怎么使用python安装math库?怎么用?
  4. 大数据开发者应该知道的分布式系统 CAP 理论
  5. circle loss代码实现_Python全栈之路-23-使用Python实现Logistic回归算法
  6. thinkpad装linux无线网卡驱动,Thinkpad SL510 笔记本安装 Linux 无线网卡驱动
  7. 诗与远方:无题(九十)
  8. App内存优化-实践
  9. linux下的nginx+tomcat配置
  10. 如何创建 Visual Studio 2017 RC 离线安装包
  11. Python实现千图成像:从图片爬取到图片合成
  12. 求 HCDA认证题库
  13. 微型计算机 路由,华硕RT-AC68U无线路由器深度体验
  14. 支付接口对接技术通用方法 第三方四方支付接口对接开发教程API集成服务
  15. 7 Babylonjs基础入门 动画
  16. vue3 provide和 reject
  17. oracle双活什么意思,什么是双活数据中心
  18. 手机用计算机微信运动记步吗,微信运动怎么用?微信运动计步功能使用方法介绍...
  19. js获取服务器响应时间,【JS】浏览器所允许的http请求最长的响应时间?
  20. C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通

热门文章

  1. signature=f6197a1fdaf88a0e285bc5c1ac267e98,디지털 방사선시스템에서 영상증강 파라미터의 영상특성 평가...
  2. 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写
  3. 断言(assert)的用法
  4. 个人爱好-摄影入门书籍思维整理
  5. (附源码)基于SSM天天超市购物网站 毕业设计022101
  6. 弗罗贝尼乌斯范数(Frobenius norm)
  7. ubuntu安装pylint
  8. 移动端开发_手机快速登录
  9. 深入理解JDK中的Reference原理和源码实现
  10. Linux中的rwx权限