当前位置:首页 > 文章列表 > 文章 > linux > Linux udevadm monitor 如何区分内核事件和规则动作

Linux udevadm monitor 如何区分内核事件和规则动作

来源:17golang原创 2026-09-14 19:13:23 0浏览 收藏

第一次排查 USB、磁盘或虚拟块设备时,我常看到 udevadm monitor 连续打印两组近似的内容。它们不是重复日志:--kernel 看到的是内核发出的 uevent,--udev 看到的是 udev 规则处理后的事件。判断规则是否介入,关键是同时看事件通道、ACTIONDEVPATH 和属性,而不是只盯着某一行输出。

要点速览
  • -k 只打印 kernel uevent,-u 只打印规则处理后的 udev event。
  • -p 补充属性,-s block 能把观察范围缩到块设备。
  • monitor 用于看真实事件时序,规则本身的匹配结果应另用 udevadm test 验证。

先把监听对象拆成 kernel 与 udev 两条通道

先开一个观察窗口,分别执行下面两条命令。它们只负责选择事件来源,不会修改 udev 规则:

# 分别观察内核事件和 udev 规则处理后的事件
udevadm monitor --kernel
udevadm monitor --udev

# 同时观察两条通道,便于对照同一个设备动作
udevadm monitor --kernel --udev

示意输出里,内核事件通常先出现,随后才有 udev 事件。两者可能共享同一 DEVPATHACTION=add,但出现时间不同。这里的“先后”只说明观察到的处理阶段,不代表 udev 一定为每个字段创建了新值。

Linux udevadm monitor 双栏示意,左侧 kernel uevent 与右侧 udev 规则处理事件共享 DEVPATH
图1:udevadm monitor 的 kernel 与 udev 双通道操作示意图,展示同一 DEVPATH 的两个事件阶段。

用属性和 subsystem 过滤掉无关噪声

不加参数时,设备事件一多就很难定位。排查块设备时,我更常用属性和 subsystem 过滤:

# 只看 udev 阶段,并打印便于比对的属性
udevadm monitor --udev --property --subsystem-match=block

# 需要区分设备类型时,把 devtype 写进匹配条件
udevadm monitor --kernel --property --subsystem-match=block/disk

--property(短参数 -p)会把事件属性一并打印;--subsystem-match(短参数 -s)按 subsystem[/devtype] 过滤。常用核对字段如下:

字段或参数排查作用不要误判成什么
ACTION判断 add、remove、change 等动作不是规则是否匹配的结论
DEVPATH把两条通道对应到同一个 sysfs 设备不是可直接复制的设备节点
DEVNAME查看 udev 阶段是否给出设备名不等于内核原始事件必然携带它
-s block缩小到 block subsystem不会改变事件,只改变显示范围
Linux udevadm monitor 使用 property 和 block subsystem 过滤的事件卡片示意
图2:加入属性与 block subsystem 过滤后的结果示意图,字段用于核对事件来源和目标设备。

从 ACTION、DEVPATH 和时间差判断规则是否介入

真正有用的判断顺序是:先看事件通道,再对比 DEVPATH,然后观察 ACTION 和属性差异。若同一设备先出现 kernel 的 add,稍后出现 udev 的 add,这符合“内核通知—udev 处理”的基本观察模型。若只看 udev 输出,很容易把 DEVNAME、权限或标签等规则结果误写成内核事件。

规则动作也不等于任意脚本都同步完成。monitor 关注的是事件消息与规则处理后的广播,不能单凭一行输出证明某个外部程序已经执行完。要查时序,保留 -k-u 两路;要查属性来源,打开 -p;要查规则为什么匹配,则进入下一步。

把 monitor 结果和规则测试分开验证

拿到 sysfs 路径后,可以用 udevadm test 模拟一次规则处理。它和 monitor 的职责不同:

# 对指定 sysfs 路径模拟 add,查看规则匹配和处理输出
# 这里的路径只是示例,实际值应从 DEVPATH 或 sysfs 中确认
udevadm test --action=add /sys/class/block/loop0

# 只看实时设备事件,不把模拟测试当成真实插拔
udevadm monitor --kernel --udev --property

test 适合回答“规则会怎样处理这个设备”,monitor 适合回答“真实事件何时到达、经过了哪一层”。二者结果不一致时,先检查模拟路径、ACTION 和当前规则加载状态,不要直接修改匹配条件。

相关问题

为什么只看到 Kernel device events?

可能只启用了 --kernel,也可能 udev 阶段尚未产生可见事件。先确认命令没有带互斥过滤,再用一个明确的 subsystem 缩小范围。

怎么只观察某类块设备?

使用 --subsystem-match=block;若还要区分设备类型,再写成 block/disk 等具体匹配。

规则文件改完,monitor 会重新加载它吗?

monitor 本身只是监听器,不负责重载规则。规则更新后应按发行版的 systemd-udevd 管理方式重新加载,再用 udevadm test 和真实事件分别确认。

记住这条边界就够实用:kernel 是设备事件的起点,udev 是规则处理后的观察点;用 DEVPATH 对齐对象,用 ACTION 判断动作,用 -p-s 减少噪声,排查会比单看一段连续输出可靠得多。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go http.Request.Clone 复制请求体时为什么不能重复读取Go http.Request.Clone 复制请求体时为什么不能重复读取
上一篇
Go http.Request.Clone 复制请求体时为什么不能重复读取
BroadcastChannel 多标签同步时如何忽略自己发出的消息
下一篇
BroadcastChannel 多标签同步时如何忽略自己发出的消息
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    26次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    130次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    57次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    22次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    80次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码