linux服务之udevd

http://www.ibm.com/developerworks/cn/linux/l-cn-udev/
[[email protected] ~]# uname -r
2.6.32-431.el6.x86_64
udev-147-2.51.el6.x86_64
此版本的udev变动较大

什么是 udev?
udev 是 Linux2.6 内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具。udev 以守护进程的形式运行,通过侦听内核发出来的 uevent 来管理 /dev目录下的设备文件。不像之前的设备管理工具,udev 在用户空间 (user space) 运行,而不在内核空间 (kernel space) 运行。
使用 udev 的好处
我们都知道,所有的设备在 Linux 里都是以设备文件的形式存在。在早期的 Linux 版本中,/dev目录包含了所有可能出现的设备的设备文件。很难想象 Linux 用户如何在这些大量的设备文件中找到匹配条件的设备文件。现在 udev 只为那些连接到 Linux 操作系统的设备产生设备文件。并且 udev 能通过定义一个 udev 规则 (rule) 来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等等。
    动态管理:当设备添加 / 删除时,udev 的守护进程侦听来自内核的 uevent,以此添加或者删除 /dev下的设备文件,所以 udev 只为已经连接的设备产生设备文件,而不会在 /dev下产生大量虚无的设备文件。
    自定义命名规则:通过 Linux 默认的规则文件,udev 在 /dev/ 里为所有的设备定义了内核设备名称,比如 /dev/sda、/dev/hda、/dev/fd等等。由于 udev 是在用户空间 (user space) 运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer等等。

udev 工作流程图:

相关术语:
    设备文件:由于本文以较通俗的方式讲解 udev,所以设备文件是泛指在 /dev/下,可被应用程序用来和设备驱动交互的文件。而不会特别地区分设备文件、设备节点或者设备特殊文件。
    devfs:devfs是 Linux 早期的设备管理工具,已经被 udev 取代。
    sysfs:sysfs是 Linux 2.6 内核里的一个虚拟文件系统 (/sys)。它把设备和驱动的信息从内核的设备模块导出到用户空间 (userspace)。从该文件系统中,Linux 用户可以获取很多设备的属性。
    devpath:本文的 devpath是指一个设备在 sysfs文件系统 (/sys)下的相对路径,该路径包含了该设备的属性文件。udev 里的多数命令都是针对 devpath操作的。例如:sda的 devpath是 /block/sda,sda2 的 devpath是 /block/sda/sda2。
    内核设备名称:设备在 sysfs里的名称,是 udev 默认使用的设备文件名。

udev 的配置和使用:

syslog默认会记录 udev 的日志,Linux 用户只能修改日志的级别 (err、info、degub 等 );设备的权限不能在 udev.conf 里设定,而是要在规则文件 (*.rules) 里设定。
udev 的规则和规则文件
规则文件是 udev 里最重要的部分,默认是存放在 /etc/udev/rules.d/下。所有的规则文件必须以“.rules”为后缀名。RHEL 有默认的规则文件,这些默认规则文件不仅为设备产生内核设备名称,还会产生标识性强的符号链接。
udev 按照规则文件名的字母顺序来查询全部规则文件,然后为匹配规则的设备管理其设备文件或文件链接。虽然 udev 不会因为一个设备匹配了一条规则而停止解析后面的规则文件,但是解析的顺序仍然很重要。通常情况下,建议让自己想要的规则文件最先被解析。比如,创建一个名为 /etc/udev/rules.d/10-myrule.rules的文件,并把你的规则写入该文件,这样 udev 就会在解析系统默认的规则文件之前解析到你的文件。
在规则文件里,除了以“#”开头的行(注释),所有的非空行都被视为一条规则,但是一条规则不能扩展到多行。规则都是由多个 键值对(key-value pairs)组成,并由逗号隔开,键值对可以分为 条件匹配键值对( 以下简称“匹配键 ”) 和 赋值键值对( 以下简称“赋值键 ”),一条规则可以有多条匹配键和多条赋值键。匹配键是匹配一个设备属性的所有条件,当一个设备的属性匹配了该规则里所有的匹配键,就认为这条规则生效,然后按照赋值键的内容,执行该规则的赋值。
KERNEL=="sda", NAME="my_root_disk", MODE="0660"
KERNEL 是匹配键,NAME 和 MODE 是赋值键。这条规则的意思是:如果有一个设备的内核设备名称为 sda,则该条件生效,执行后面的赋值:在 /dev下产生一个名为 my_root_disk的设备文件,并把设备文件的权限设为 0660。
仅当操作符是“==”或者“!=”时,其为匹配键;若为其他操作符时,都是赋值键。

制定 udev 规则和查询设备信息的实例:
如何查找设备的信息 ( 属性 ) 来制定 udev 规则:
当我们为指定的设备设定规则时,首先需要知道该设备的属性,比如设备的序列号、磁盘大小、厂商 ID、设备路径等等。通常我们可以通过以下的方法获得:
    查询sysfs文件系统:
    前面介绍过,sysfs 里包含了很多设备和驱动的信息。
    例如:设备 sda 的 SYSFS{size} 可以通过 cat /sys/block/sda/size得到;SYSFS{model} 信息可以通过 cat /sys/block/sda/device/model得到
    udevinfo命令:
    udevinfo 可以查询 udev 数据库里的设备信息。例如:用 udevinfo 查询设备 sda 的 model 和 size 信息:
    其他外部命令:
清单 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 的符号链接。

其中syspath都是指/sys下的路径:如/block/sda
udevadm info --help
udevadm test /block/sda
udevadm info  --query=all --path=/block/sda
udevadm info  --query=all --name=/dev/sda   结果同上
udevadm info  --export-db  | less 查看udev database,输出所有节点信息
[[email protected] ~]# ps -ef|grep udev
root      1927     1  0 04:08 ?        00:00:00 /sbin/udevd -d
[[email protected] ~]# start_udev    使修改的配置文件生效,不用重启系统
正在启动 udev:                                            [确定]

eth0变为eth1的解决解决办法
udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中,所以在workstation改虚拟机的mac地址,会发生此种情况。udev会自动将其命名为eth1(累加的原则),所以在你的系统启动后,你使用ifconfig看到的网卡名为eth1。
vi /etc/udev/rules.d/70-persistent-net.rules
改mac,改name,reboot

linux服务之udevd,布布扣,bubuko.com

时间: 2024-10-21 10:13:56

linux服务之udevd的相关文章

Linux服务篇之四:构建MySQL服务器

Linux服务篇之四:构建MySQL服务器  MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司, 目前属于Oracle公司,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库. 对应目前主流的LAMP架构来说,Mysql更是得到各位IT运维.DBA的青睐,目前mysql已被orcacle收购,不过好消息是原来mysql创始

linux服务与进程

linux服务与进程 http://www.cnblogs.com/jamesbd/p/3567654.html linux服务与进程 1.应用程序 2.服务脚本 3.配置文件 4.查看进程 5.查看端口 6.crontab任务计划 需求:搭建一个web服务器,用apache软件,web服务能够随着计算机的启动而启动,而且对外提供web服务的端口是800端口,最后查看进程和端口? 1.安装apache的软件 yum -y install httpd* 2.设置随计算机启动而启动 chkconfi

Linux服务的管理

1.Linux服务的介绍 系统服务 --某些服务的服务的对象是Linux系统本身,或者Linux系统系统用户,这类服务我们称为系统服务(System Service) 网络服务 --提供给网络中的其他客户端(Client)调用使用的服务,这类的服务我们统称为网络服务(Networking Service) 按照服务启动的方法又可分为 独立系统服务 --服务一经启动,除非关闭系统或者手动关闭,否则都在后台执行,不管有没有用到,这样的服务我们称为独立系统服务(Sys V Service) 临时服务

[Linux]服务管理:rpm包, 源码包

--------------------------------------------------------------------------------------------------- |--- 1. 独立的服务  |---- rpm包默认安装的服务 |--- 2. 基于xinetd服务 linux服务分类: | |---- 源码包安装的服务 查询已安装的服务: rpm包安装的服务:chkconfig --list( 查看服务自启动状态,可以看到所有rpm包安装的服务 ) ( 7个

Linux服务篇之七:MySQL主从原理及架构配置

Linux服务篇之七:MySQL引擎了解.主从原理及架构配置 一.MySQL引擎了解 MyISAM引擎 默认表类型,它是基于传统的ISAM类型,ISAM是IndexedSequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不是事务安全的,而且不支持外键,如果执行大量的select, MyISAM比较适合. InnoDB引擎 支持事务安全的引擎,支持外键.行锁.事务是他的最大特点.Innodb最初是由innobase Oy公司开发,200

完解LINUX服务器之NTP服务

NTP:Network Time Protocol  是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶意的协议攻击. 1.安装: yum install NTP yum install tzdata NTP协议使用的是UDP,Port:123 2.配置文件: /etc/ntp.conf                #NTF服务器的主

linux服务延时启动

zabbix-server在系统启动时,需要先启动xampp中的mysql,如果mysql没启动就会导致zabbix-server启动失败 怎么设置linux服务延时启动呢,很简单,用sleep就可以 修改/etc/rc.local文件 /opt/lampp/lampp startmysql /bin/sleep 60 /etc/init.d/zabbix-server start 就这么简单.

linux服务自动手动启动tomcat的方式

Linux服务自启动的方式有多种,有时候无法通过chkconfig命令运行级别设置和ntsysv图形运行级别设置时,此下方法可以有效解决问题. 生产环境: OS: CentOS release 6.7 (Final) Web服务器:Apache Tomcat/7.0.57 任务:Linux启动时需要自动启动Tomcat服务. Linux自动启动服务配置方式如下: [[email protected] ~]# [[email protected]~]# cd  /etc/rc.d [[email 

Linux服务的简单配置(homework)

Linux服务也学习一个礼拜啦,趁这闲暇之际,归纳一下这周所学的服务. 应用环境:Redhat 5.9 一.DHCP DHCP是动态主机配置协议,可自动分配入网参数,实现各客户机IP的自动获取 1.为服务器配置一个固定的Ip地址如192.168.4.2 2.确认已安装dhcp软件包 3.建立dhcpd.conf配置文件. [[email protected] ~]# vim/etc/dhcpd.conf subnet 192.168.4.0 netmask 255.255.255.0 { opt