您的位置:首页 > 运维架构 > Linux

使用udev管理 Linux 设备文件 防止盘符改变

2012-10-16 16:37 387 查看
概述:

Linux 用户常常会很难鉴别同一类型的设备名,比如 eth0, eth1, sda, sdb 等等。通过观察这些设备的内核设备名称,用户通常能知道这些是什么类型的设备,但是不知道哪一个设备是他们想要的。例如,在一个充斥着本地磁盘和光纤磁盘的设备名清单 (
/dev/sd*
) 中,用户无法找到一个序列号为"35000c50000a7ef67"的磁盘。在这种情况下,udev 就能动态地在
/dev
目录里产生自己想要的、标识性强的设备文件或者设备链接,以此帮助用户方便快捷地找到所需的设备文件。

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 版本中,实现的方法不同,在"如何配置和使用 udev"中会详解。

下面的流程图显示 udev 添加 / 删除设备文件的过程。

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

参考文章:http://www.eygle.com/digest/2012/03/udev_linux_bind.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: