linux udev硬盘,Linux Udev
在我入门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相关推荐
- linux脚本硬盘,Linux mount挂载和卸载硬盘脚本分享
Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% M ...
- linux quota硬盘,Linux系统中quota磁盘命令的相关使用解析
磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得知已使用多少空 ...
- win7下格式化Linux格式硬盘,linux格式化硬盘
【应对指南】
最近有win7系统的忠实伙伴发现电脑在运行的时候,遇到linux格式化硬盘 的问题,以前都没有遇到的,那么在遇到linux格式化硬盘 该怎么处理呢?其实linux格式化硬盘 处理起来并不难,现在小编就 ...
- linux quota硬盘,Linux 磁盘配额 quota
Linux 磁盘配额 quota Quota一直就是个很有用的东西.如果您曾经申请过网络的mail服务时,那么肯定就会明白什么是20MB的邮件空间. 30MB的免费网页空间,这个20MB,30MB就是 ...
- linux 空硬盘,linux – dd在整个磁盘上,但不想要空的部分
我有一个磁盘,比如/ dev / sda. 这是fdisk -l: Disk /dev/sda: 64.0 GB,64023257088 bytes 255 heads,63 sectors/trac ...
- 哪个Linux ATA 硬盘,linux – scsi和/ dev / disk / by-id下相同硬盘的ata条目
你可以使用其中之一. 显示的大部分内容取决于您的控制器和磁盘.我使用SAS控制器和SAS磁盘(在某些情况下使用SATA SSD),但您可以随意使用任何您想要的zpool驱动器标识.您在这里看到ata和 ...
- 无人值守安装linux指定硬盘,Linux无人值守自动化安装详细配置流程!
在生产环境中,往往需要给成百上千台服务器安装系统,手动安装略显蛋疼,网络自动化引导安装就能解决批量安装的问题,从此批量系统安装so easy! 以下配置流程均在CentOS 6.7实现 实现环境: P ...
- linux清除硬盘,linux下清除硬盘的几种方法
硬盘在送人或丢弃时,应该小心一点,不然就成艳照门主角了,谁也不能保证自己的硬盘上没有什么不便于示人的东西,因此,你需要擦除硬盘上的数据. 理论上讲,目前,不存在完全安全的方法,因为,硬盘发展到如今,基 ...
- linux 刷新 硬盘,linux – 从一个新硬盘重新刷新SW RAID1和一个坏块的旧硬盘
您能否验证磁盘上受影响的块和底层坏扇区是否重新分配到"备用扇区"区域?写操作失败时,应重新分配坏扇区.使用smartctl验证它: smartctl -a /dev/sdb | g ...
最新文章
- 36 岁开发者应聘被拒,这 3 位 50 岁程序员的生存秘籍送给你!
- r语言 svm 大样本_r语言基于SVM模型的文本分类研究 附数据代码
- mysql back blog_mysql的备份Xtrabackup
- httpd启动报错:httpd: apr_sockaddr_info_get() failed for jsp...
- 精彩回顾 | Apache Flink x Iceberg Meetup · 上海站
- Obejctive-C 中定义可变参函数
- Mysql中字段类型不一致导致索引无效
- 程序猿,该在一个公司呆多久?
- Qt creator5.7 OpenCV249之图片腐化(含源码下载)
- 汉字字符特征提取器 ,提取发音特征、字形特征用做深度学习的特征
- 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集
- 用latex画化学结构式
- php网站友链直显代码,友情链接代码有哪些 怎么写
- 设置计算机的启动顺序CDROM.C.A,怎么设置开机从光驱启动
- 强大的健身软件——Keep
- IP地址和子网的划分详解
- 深度学习 week1 采访部分补充
- 2020年阴历三月初一 投资理财~有些大v要警惕
- 过程参数仪表与检测课后作业知识点总结
- 【JAVASE】Java泛型实例化
热门文章
- 邮件地址的正则表达式
- 实验5.4 小数分数转换
- 字符检测CTPN的tensorflow实现
- Windows 10系统,cmd输入java,java -version有效,输入javac无效的解决办法,亲测
- DS3231时钟芯片IIC地址
- 【运维问题】hadoop启动失败:hadoop-functions.sh:行398: 未预期的符号 `<‘ 附近有语法错误
- 海外众筹项目怎么发起创建?
- java装箱问题_三维装箱问题Java代码的简单实现过程
- 从0到1写嵌入式操作系统---------------------------4尝试两个任务的切换
- css案例10——单行文本省略、多行省略