- 浏览: 2171709 次
- 性别:
- 来自: 合肥
-
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
man udev - 动态设备管理
為什麼採用 udev(sysfs? 因為 udev(sysfs) 採用比較彈性而且較有效的方式管理 /dev/ 裝置,所以 Linux 在 2.6.15 kernel 之後採用了 udev(sysfs) .原因很多大可以瓜括下面幾個:
因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。
过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件都是linux内核自动分配的。很难固定下来,除非你更改加载SCSI卡驱动程序的顺序,让内置硬盘连接的SCSI卡比外接磁盘阵列连接的SCSI卡的驱动模块先加载到内核,这样就能保证/dev/sda总是指向内置的硬盘。但这种解决方法毕竟不太完美,而且对于其他的即插即用设备,如USB设备等都不适用。
近来,通过安装和升级linux-2.6内核,发现这个问题已经可以通过2.6内核新的sysfs文件系统和udev程序得到解决。下面就是我在学习了udev配置后的一点心得。我喜欢用FAQ的形式来说明。
问:什么是udev?
答:udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。
问:udev支持什么内核?
答:udev只支持linux-2.6内核,因为udev严重依赖于sysfs虚拟文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。
问:udev是一个内核程序还是用户程序?
答:udev是一个用户程序(user-mode daemon)。
问:udev和devfs有什么差别?
答:udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中。据称:devfs具有一些不太容易解决的先天缺陷。
问:udev的配置文件放在哪里?
答:udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:
问:udev的工作过程是怎样的?
答:由于没有研究过udev的源程序,不敢贸然就说udev的工作过程。我只是通过一些网上的资料和udev的说明文档,大致猜测它的工作过程可能是这样的。
当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录,一般sysfs文件系统会被mount到 /sys目录中。新记录是以一个或多个文件或目录的方式来表示。每个文件都包含有特定的信息。(信息是如何表述的,还要另外研究?)
udev在系统中是以守护进程的方式udevd在运行,它通过某种途径(到底什么途径,目前还没搞懂。)检测到新设备的出现,通过查找设备对应的sysfs中的记录得到设备的一些信息。
udev会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件。udev读取文件是按照文件名的ASCII字母顺序来读取的,如果udev一旦找到了与新加入的设备匹配的规则,udev就会根据规则定义的措施对新设备进行配置。同时不再读后续的规则文件。
问:udev的规则文件的语法是怎样的?
答:udev的规则文件以行为单位,以"#"开头的行代表注释行。其余的每一行代表一个规则。每个规则分成一个或多个“匹配”和“赋值”部分。“匹配”部分用“匹配“专用的关键字来表示,相应的“赋值”部分用“赋值”专用的关键字来表示。“匹配”关键字包括:ACTION,KERNEL,BUS, SYSFS等等,“赋值”关键字包括:NAME,SYMLINK,OWNER等等。具体详细的描述可以阅读udev的man文档。
下面举个例子来说明一下,有这样一条规则:
SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:0d:87:f6:59:f3", IMPORT="/sbin/rename_netiface %k eth0"
这个规则中的“匹配”部分有三项,分别是SUBSYSTEM,ACTION和SYSFS。而"赋值"部分有一项,是IMPORT。这个规则就是说,当系统中出现的新硬件属于net子系统范畴,系统对该硬件采取的动作是加入这个硬件,且这个硬件在SYSFS文件系统中的“address”信息等于“00: 0d..."时,对这个硬件在udev层次施行的动作是调用外部程序/sbin/rename_netiface,传递的参数有两个,一个是“%k”,代表内核对该新设备定义的名称。另一个是”eth0“。
从上面这个例子中可以看出,udev的规则的写法比较灵活的,尤其在“匹配”部分中,可以通过诸如”*“, ”?“,[a-c],[1-9]等shell通配符来灵活匹配多个匹配项。具体的语法可以参考udev的man文档。
问:udev怎样做到不管设备连接的顺序而维持一个统一的设备名?
答:实际上,udev是通过对内核产生的设备名增加别名的方式来达到上述目的的。前面说过,udev是用户模式程序,不会更改内核的行为。因此,内核依然会我行我素地产生设备名如sda,sdb等。但是,udev可以根据设备的其他信息如总线(bus),生产商(vendor)等不同来区分不同的设备,并产生设备文件。udev只要为这个设备文件取一个固定的文件名就可以解决这个问题。在后续对设备的操作中,只要引用新的设备名就可以了。但为了保证最大限度的兼容,一般来说,新设备名总是作为一个对内核自动产生的设备名的符号链接(link)来使用的。
例如:内核产生了sda设备名,而根据信息,这个设备对应于是我的内置硬盘,那我就可以制定udev规则,让udev除了产生/dev/sda设备文件外,另外创建一个符号链接叫/dev/internalHD。这样,我在fstab文件中,就可以用/dev/internalHD来代替原来的 /dev/sda了。下次,由于某些原因,这个硬盘在内核中变成了sdb设备名了,那也不用着急,udev还会自动产生/dev/internalHD这个链接,并指向正确的/dev/sdb设备。所有其他的文件像fstab等都不用修改。
问:怎样才能找到这些设备信息,并把他们放到udev的规则文件中来匹配呢?
答:这个问题比较难,网上资料不多,我只找到一篇文章来介绍如何写udev的规则。他的基本方法是通过udevinfo这个实用程序来找到那些可以作为规则文件里的匹配项的项目。有这样两种情况可以使用这个工具:
第一种情况是,当你把设备插入系统后,系统为设备产生了设备名(如/dev/sda)。那样的话,你先用udevinfo -q path -n /dev/sda,命令会产生一个该设备名对应的在sysfs下的路径,如/block/sda。然后,你再用udevinfo -a -p /sys/block/sda,这个命令会显示一堆信息,信息分成很多块。这些信息实际来自于操作系统维护的sysfs链表,不同的块对应不同的路径。你就可以用这些信息来作为udev规则文件中的匹配项。但需要注意的是,同一个规则只能使用同一块中显示的信息,不能跨块书写规则。
第二种情况是,不知道系统产生的设备名,那就只有到/sys目录下去逐个目录查找了,反复用udevinfo -a -p /sys/path...这个命令看信息,如果对应的信息是这个设备的,那就恭喜你。否则就再换个目录。当然,在这种情况下,成功的可能性比较小。
转自:理解和认识udev
為什麼採用 udev(sysfs? 因為 udev(sysfs) 採用比較彈性而且較有效的方式管理 /dev/ 裝置,所以 Linux 在 2.6.15 kernel 之後採用了 udev(sysfs) .原因很多大可以瓜括下面幾個:
- 從前的裝置名稱是固定的 sda 代表第一個 SCSI 的硬碟,但是 udev 可以依據需求將 sda 任意改成你想要的名稱 如:my_first_scsi_disk
- 採用連結(symbolic link)的方式儲存裝置的別名.
- 在 /sys 可以看到依據 id / label / path / uuid 所對應出來的名稱.
- 裝置(device node)的permissions and ownership 也都可以修改.
- 當裝置在連接或移除時,可以執行相對應的程式(script).
- network 裝置可以依需求修改成想要命名的方式.
因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。
过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件都是linux内核自动分配的。很难固定下来,除非你更改加载SCSI卡驱动程序的顺序,让内置硬盘连接的SCSI卡比外接磁盘阵列连接的SCSI卡的驱动模块先加载到内核,这样就能保证/dev/sda总是指向内置的硬盘。但这种解决方法毕竟不太完美,而且对于其他的即插即用设备,如USB设备等都不适用。
近来,通过安装和升级linux-2.6内核,发现这个问题已经可以通过2.6内核新的sysfs文件系统和udev程序得到解决。下面就是我在学习了udev配置后的一点心得。我喜欢用FAQ的形式来说明。
问:什么是udev?
答:udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。
问:udev支持什么内核?
答:udev只支持linux-2.6内核,因为udev严重依赖于sysfs虚拟文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。
问:udev是一个内核程序还是用户程序?
答:udev是一个用户程序(user-mode daemon)。
问:udev和devfs有什么差别?
答:udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中。据称:devfs具有一些不太容易解决的先天缺陷。
问:udev的配置文件放在哪里?
答:udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:
- udev_root="/dev" ; udev产生的设备文件的根目录是/dev
- udev_db="/dev/.udevdb" ; 通过udev产生的设备文件形成的数据库
- udev_rules="/etc/udev/rules.d" ;用于指导udev工作的规则所在目录。
- udev_log="err" ;当出现错误时,用syslog记录错误信息。
问:udev的工作过程是怎样的?
答:由于没有研究过udev的源程序,不敢贸然就说udev的工作过程。我只是通过一些网上的资料和udev的说明文档,大致猜测它的工作过程可能是这样的。
当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录,一般sysfs文件系统会被mount到 /sys目录中。新记录是以一个或多个文件或目录的方式来表示。每个文件都包含有特定的信息。(信息是如何表述的,还要另外研究?)
udev在系统中是以守护进程的方式udevd在运行,它通过某种途径(到底什么途径,目前还没搞懂。)检测到新设备的出现,通过查找设备对应的sysfs中的记录得到设备的一些信息。
udev会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件。udev读取文件是按照文件名的ASCII字母顺序来读取的,如果udev一旦找到了与新加入的设备匹配的规则,udev就会根据规则定义的措施对新设备进行配置。同时不再读后续的规则文件。
问:udev的规则文件的语法是怎样的?
答:udev的规则文件以行为单位,以"#"开头的行代表注释行。其余的每一行代表一个规则。每个规则分成一个或多个“匹配”和“赋值”部分。“匹配”部分用“匹配“专用的关键字来表示,相应的“赋值”部分用“赋值”专用的关键字来表示。“匹配”关键字包括:ACTION,KERNEL,BUS, SYSFS等等,“赋值”关键字包括:NAME,SYMLINK,OWNER等等。具体详细的描述可以阅读udev的man文档。
下面举个例子来说明一下,有这样一条规则:
SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:0d:87:f6:59:f3", IMPORT="/sbin/rename_netiface %k eth0"
这个规则中的“匹配”部分有三项,分别是SUBSYSTEM,ACTION和SYSFS。而"赋值"部分有一项,是IMPORT。这个规则就是说,当系统中出现的新硬件属于net子系统范畴,系统对该硬件采取的动作是加入这个硬件,且这个硬件在SYSFS文件系统中的“address”信息等于“00: 0d..."时,对这个硬件在udev层次施行的动作是调用外部程序/sbin/rename_netiface,传递的参数有两个,一个是“%k”,代表内核对该新设备定义的名称。另一个是”eth0“。
从上面这个例子中可以看出,udev的规则的写法比较灵活的,尤其在“匹配”部分中,可以通过诸如”*“, ”?“,[a-c],[1-9]等shell通配符来灵活匹配多个匹配项。具体的语法可以参考udev的man文档。
问:udev怎样做到不管设备连接的顺序而维持一个统一的设备名?
答:实际上,udev是通过对内核产生的设备名增加别名的方式来达到上述目的的。前面说过,udev是用户模式程序,不会更改内核的行为。因此,内核依然会我行我素地产生设备名如sda,sdb等。但是,udev可以根据设备的其他信息如总线(bus),生产商(vendor)等不同来区分不同的设备,并产生设备文件。udev只要为这个设备文件取一个固定的文件名就可以解决这个问题。在后续对设备的操作中,只要引用新的设备名就可以了。但为了保证最大限度的兼容,一般来说,新设备名总是作为一个对内核自动产生的设备名的符号链接(link)来使用的。
例如:内核产生了sda设备名,而根据信息,这个设备对应于是我的内置硬盘,那我就可以制定udev规则,让udev除了产生/dev/sda设备文件外,另外创建一个符号链接叫/dev/internalHD。这样,我在fstab文件中,就可以用/dev/internalHD来代替原来的 /dev/sda了。下次,由于某些原因,这个硬盘在内核中变成了sdb设备名了,那也不用着急,udev还会自动产生/dev/internalHD这个链接,并指向正确的/dev/sdb设备。所有其他的文件像fstab等都不用修改。
问:怎样才能找到这些设备信息,并把他们放到udev的规则文件中来匹配呢?
答:这个问题比较难,网上资料不多,我只找到一篇文章来介绍如何写udev的规则。他的基本方法是通过udevinfo这个实用程序来找到那些可以作为规则文件里的匹配项的项目。有这样两种情况可以使用这个工具:
第一种情况是,当你把设备插入系统后,系统为设备产生了设备名(如/dev/sda)。那样的话,你先用udevinfo -q path -n /dev/sda,命令会产生一个该设备名对应的在sysfs下的路径,如/block/sda。然后,你再用udevinfo -a -p /sys/block/sda,这个命令会显示一堆信息,信息分成很多块。这些信息实际来自于操作系统维护的sysfs链表,不同的块对应不同的路径。你就可以用这些信息来作为udev规则文件中的匹配项。但需要注意的是,同一个规则只能使用同一块中显示的信息,不能跨块书写规则。
第二种情况是,不知道系统产生的设备名,那就只有到/sys目录下去逐个目录查找了,反复用udevinfo -a -p /sys/path...这个命令看信息,如果对应的信息是这个设备的,那就恭喜你。否则就再换个目录。当然,在这种情况下,成功的可能性比较小。
转自:理解和认识udev
发表评论
-
openssl 非对称加密DSA,RSA区别与使用介绍(转)
2012-10-26 16:42 14280在日常系统管理工作中,需要作一些加解密的工作,通过openss ... -
Virtualbox下为CentOS增加新硬盘、Linux添加新硬盘、vsftp配置用户磁盘配额(磁盘限额)
2012-09-27 16:29 4298增加新磁盘: 1,关闭CentOS系统(如果不关闭cento ... -
加密ssl vsftp、ftp隐式加密&显式加密
2012-09-27 14:30 9543FTP over SSL (Implicit)隐式ssl与FT ... -
(转)vsftp详细配置、/etc/vsftpd/vsftpd.conf
2012-09-26 15:26 12298匿名用户权限控制: ano ... -
CentOS下vsftp设置、匿名用户&本地用户设置、PORT、PASV模式设置
2012-09-26 14:22 650621, 安装:yum install vsftp ... -
(转)sshd_config配置 详解
2012-09-25 16:05 7516转自:sshd_config配置 详解 # 1. 关于 S ... -
sftp配置
2012-09-25 09:34 20838限制sftp用户(必须是操作系统用户)的访问权限 不设置Chr ... -
ftp、sftp、scp、ssh、openssh
2012-09-24 10:11 21567FTP(File Transfer Protocol) ... -
Linux time命令、dd命令、测试硬盘读写速度、磁盘备份恢复
2012-09-12 10:08 6257time命令常用于测量一个 ... -
NFS安装配置及常见问题、/etc/exports配置文件、showmount命令
2012-09-11 09:25 933321,服务器端软件:安装nfs-utils和portmap(rp ... -
网络文件系统(Network File System,NFS)、NFS安全配置相关、NFS相关端口及防火墙设置
2012-09-10 14:35 1789网络文件系统(Network File System,NFS ... -
linux网络配置相关命令、虚拟网络接口eth0:0
2012-09-06 10:11 32222网络接口(interface)是网络硬件设备在操作系统中的表示 ... -
linux网络配置相关文件
2012-09-05 16:35 1966网络接口(interface)是网 ... -
Linux man命令、帮助文档Section
2012-09-05 14:34 4805linux man的常用用法: man section cmd ... -
Linux安装源码包
2012-09-04 14:39 6514在linux下面安装一个源码包是最常用的,笔者在日常的管理工作 ... -
(转)如何查看Linux 硬件配置信息、dmesg命令、Linux版本
2012-08-31 14:06 2975转自:如何查看Linux 硬件配置信息 机器中所有可用网卡及 ... -
Linux常见设备及相应/dev/xxx文件名、Mount Point、挂载点、Mount命令、fstab、挂载分区
2012-08-31 11:18 11747Linux 中的设备有2种类型 ... -
VirtualBox 4.1安装CentOS6 Server版 - 问题记录、Linux Mount点
2012-08-31 09:51 76731,CentOS系统下载页面htt ... -
x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名
2012-08-29 11:12 12513a2ps-4.13b-57.2.el5.i386.rpm ... -
Yum install man、Yum仓库(CentOS-Base.repo)、本地yum仓库
2012-08-28 15:27 13576CentOS版本查看: cat /etc/*release* ...
相关推荐
然而,Linux提供了名为udev的设备管理系统,可以实现类似Windows中固定驱动器字母的效果,确保磁盘分区的命名一致性。 1. **udev简介** udev是Linux内核热插拔子系统的用户空间组件,它负责管理系统的设备节点,...
例如,添加规则KERNEL=="sda", NAME="usbkey", SYMLINK+="usbstorage",会在插入/dev/sda设备时创建名为"usbkey"的符号链接,方便用户访问。 总的来说,理解和掌握这些关于Linux内核服务的知识对于成为一名合格的...
`/etc/rc.d/rc.sysinit`是系统初始化的重要脚本,负责执行诸如激活udev和selinux、设置内核参数、更新系统时间、启用交换分区、设置主机名、挂载文件系统、检查RAID和LVM、启用磁盘配额以及清理锁和PID文件等任务。...
- **符号链接**:也称为软链接,是一种指向其他文件或目录的引用。 - **特殊文件**:如设备文件,通常放置在`/dev`目录下,代表各种硬件设备。 #### 三、目录结构详解 **1. `/` 根目录** - **作用**:Linux文件...
- **使用交换分区或者交换文件来做为虚拟内存**:启用此选项可以使系统支持虚拟内存机制,即使用硬盘上的交换分区或交换文件作为内存扩展,以提高系统的性能和稳定性。 - **System V IPC支持**:这是大多数应用程序...