首页 > 系统相关 >使用 udev 高效、动态地管理 Linux 设备文件(转载)--3

使用 udev 高效、动态地管理 Linux 设备文件(转载)--3

时间:2022-12-09 19:01:33浏览次数:72  
标签:-- Linux udev 规则 udevtest disk root 设备


udev 的简单规则:


清单 10. 产生网卡设备文件的规则

SUBSYSTEM=="net", SYSFS{address}=="AA:BB:CC:DD:EE:FF", NAME="public_NIC"


该规则表示:如果存在设备的子系统为 net,并且地址 (MAC address) 为“AA:BB:CC:DD:EE:FF”,为该设备产生一个名为 public_NIC 的设备文件。


清单 11. 为指定大小的磁盘产生符号链接的规则

SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK ="my_disk"


该规则表示:如果存在设备的子系统为 block,并且大小为 71096640(block),则为该设备的设备文件名产生一个名为 my_disk 的符号链接。


清单 12. 通过外部命令为指定序列号的磁盘产生设备文件的规则

KERNEL=="sd*[0-9]", PROGRAM=="/lib/udev/scsi_id -g -s %p", \ RESULT=="35000c50000a7ef67", NAME +="root_disk%n"


该规则表示:如果存在设备的内核设备名称是以 sd 开头 ( 磁盘设备 ),以数字结尾 ( 磁盘分区 ),并且通过外部命令查询该设备的 SCSI_ID 号为“35000c50000a7ef67”,则产生一个以 root_disk 开头,内核号码结尾的设备文件,并替换原来的设备文件(如果存在的话)。例如:产生设备名 ​​/dev/root_disk2​​,替换原来的设备名 ​​/dev/sda2​​。运用这条规则,可以在 ​​/etc/fstab​​里保持系统分区名称的一致性,而不会受驱动加载顺序或者磁盘标签被破坏的影响,导致操作系统启动时找不到系统分区。

其他常用的 udev 命令:

  • udevtest:

​udevtest​

  • 会针对一个设备,在不需要 uevent 触发的情况下模拟一次 

​udev​

  • 的运行,并输出查询规则文件的过程、所执行的行为、规则文件的执行结果。通常使用 

​udevtest​

  • 来调试规则文件。以下是一个针对设备 sda 的 

​udevtest​

  • 例子。由于

​udevtest​

  • 是扫描所有的规则文件 ( 包括系统自带的规则文件 ),所以会产生冗长的输出。为了让读者清楚地了解

​udevtest​

  • ,本例只在规则目录里保留一条规则:清单 13. 为 udevtest 保留的规则
KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p", RESULT=="35000c50000a7ef67", \ NAME="root_disk%n", SYMLINK="symlink_root_disk%n
  • 清单 14. udevtest 的执行过程
[root@HOST_RHEL5 rules.d]# udevtest /block/sda  main: looking at device '/block/sda' from subsystem 'block' run_program: '/lib/udev/scsi_id -g -s /block/sda' run_program: '/lib/udev/scsi_id' (stdout) '35000c50000a7ef67' run_program: '/lib/udev/scsi_id' returned with status 0  udev_rules_get_name: reset symlink list  udev_rules_get_name: add symlink 'symlink_root_disk' udev_rules_get_name: rule applied, 'sda' becomes 'root_disk' udev_device_event: device '/block/sda' already in database, \                  validate currently present symlinks  udev_node_add: creating device node '/dev/root_disk', major = '8', \            minor = '0', mode = '0660', uid = '0', gid = '0' udev_node_add: creating symlink '/dev/symlink_root_disk' to 'root_disk'

可以看出,​​udevtest​​对 sda 执行了外部命令 ​​scsi_id​​, 得到的 stdout 和规则文件里的 RESULT 匹配,所以该规则匹配。然后 ( 模拟 ) 产生设备文件 ​​/dev/root_disk​​和符号链接 ​​/dev/symlink_root_disk​​,并为其设定权限。

  • start_udev:

​start​

  • _

​dev​

  • 命令重启 

​udev​

  • 守护进程,并对所有的设备重新查询规则目录下所有的规则文件,然后执行所匹配的规则里的行为。通常使用该命令让新的规则文件立即生效:清单 15. start_udev 的执行过程
[root@HOST_RHEL5 rules.d]# start_udev  Starting udev:                                             [  OK  ]

​start​​​​_udev​​​​一般​​没有标准输出,所有的 udev 相关信息都按照配置文件 (​​udev.conf)​​的参数设置,由 syslog记录。

​回页首​

小结:

udev 是高效的设备管理工具,其最大的优势是动态管理设备和自定义设备的命名规则,因此替代 devfs 成为 Linux 默认的设备管理工具。通过阅读本文,Linux 用户能够了解到 udev 的工作原理和流程,灵活地运用 udev 规则文件,从而方便地管理 Linux 设备文件。


参考资料

  • 有关 Udev 更多信息,请参考:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html。
  • 在 developerWorks Linux 专区​ 寻找为 Linux 开发人员(包括 ​​Linux 新手入门​​​)准备的更多参考资料,查阅我们 最受欢迎的文章和教程​。 
  • 在 developerWorks 上查阅所有 Linux 技巧​ 和 Linux 教程​。 

关于作者


黃懋,IBM 中国系统和技术实验室,Open Systems Interoperability Validation Lab 存储测试团队的成员。3-4 年 Linux/Unix 平台和 SAN/NAS 存储产品的测试经验。

标签:--,Linux,udev,规则,udevtest,disk,root,设备
From: https://blog.51cto.com/u_15082498/5926386

相关文章

  • 安卓各大应用商店上架注意事项汇总
    安卓上架注意事项1、上架前设置处的隐私政策和用户协议、以及弹窗都加上,类似如下图:注意:必须做成先同意隐私政策弹窗,再申请获取用户个人信息2、登录或者注册页面加上隐私政......
  • SQLServer去重复数据
    删除表中多余的重复记录,重复记录是根据单个字段(seasonId)来判断,只留有rowid最小的记录分析: selectseasonId,count(1)FROM[HD_GameData].[dbo].[LZ_Season_List]group......
  • https页面内http链接跳转时的referer问题
    no-referrer:即不添加referer信息;origin:即referer信息只有schema://domain:port,即协议://域名:端口,没有路径信息;no-referrer-when-downgrade:当协议降级时,不发送referer......
  • 加固调研实录
    背景问题:Appsealing 1、启动速度慢:原1s左右,加固后3-4s,慢2-3s目标:保证安全的前提下,启动时间变快,兼容性变好。问题分析:为什么慢——>Dex加壳,整体加固,启动慢 ,......
  • JavaScript:对象:如何复制一个对象?浅拷贝与深拷贝
    回顾一下,我们对传参的讨论,对象的传参是引用传递,我们传递的是对象数据所在的内存地址;那么无论我们怎么去赋值,所有变量指向的都是同一块内存;如上图所示,无论我去使用哪个变......
  • mac环境下Android 反编译
    一、需要的工具apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件。dex2jar:将反编译后的classes.dex文件转化为.jar文件。jd-gui:用于将.jar文件......
  • ES6——Promise
    一、ES6——Promise1.1Promise介绍与基本使用Promise是ES6引入的异步编程的新解决方案。语法上promise是一个构造函数,用来封装异步操作并获取其成功或失败的结果。......
  • Android 轻量级存储方案的前世今生【SharedPreferences、MMKV、Jetpack DataStore】
    背景对于Android轻量级存储方案,有大多数人都很熟悉的SharedPreferences;也有基于mmap的高性能组件MMKV,底层序列化/反序列化使用protobuf实现,性能高,稳定性强;还有Jetp......
  • 【Flask】flask应用
    目录1.配置文件写法2.路由系统3.路由本质3.1add_url_rule的参数4.cbv写法4.1flask的cbv写法4.2cbv加装饰器,如何做?4.3as_view的执行流程4.4Login.as_view(name='......
  • Excel中的RIGHT函数
    问题:从数据库中导出35800个用户code(属于179家单位,每个单位200个用户),用户code共16位,前14位带有用户属性(如:角色、单位、部门等),后四位为每个单位用户的递增自然数。想要对全......