黎一毅
摘 要:隨著計(jì)算機(jī)技術(shù)和的發(fā)展應(yīng)用的推廣,計(jì)算機(jī)掛載的設(shè)備越來(lái)越多,雖然linux依據(jù)設(shè)備類(lèi)型分配了設(shè)備文件名, 比如eth0, eth1,sda,sdb, 但是人們不查看具體的設(shè)備信息,無(wú)法從這類(lèi)名字上判斷那是哪一個(gè)硬件設(shè)備。在計(jì)算機(jī)維護(hù)中,如果有設(shè)備需要臨時(shí)裝載移除或者熱插拔,往往系統(tǒng)同類(lèi)設(shè)備的編號(hào)就會(huì)混亂,比如人們插拔硬盤(pán),往往sdb,sdc這些設(shè)備序號(hào)就會(huì)混亂。人們?cè)趯?shí)際工作中往往希望,linux能將連接的設(shè)備設(shè)定易于識(shí)別的設(shè)備文件,這樣不但區(qū)分識(shí)別,而且方便人們實(shí)習(xí)自動(dòng)備份等一系列自動(dòng)功能,在面向用戶(hù)的設(shè)備中提升用戶(hù)體驗(yàn)。文章簡(jiǎn)要介紹udev在linux系統(tǒng)的使用,在ubuntu 12.04 LTS中使用的實(shí)例。
關(guān)鍵詞:udev;linux;ubuntu
通過(guò)向內(nèi)核中添加代碼也可以實(shí)現(xiàn)修改設(shè)備文件名稱(chēng)的功能,但是很少人會(huì)這樣,一是內(nèi)核升級(jí)維護(hù)不方便,每次升級(jí)內(nèi)核都要插入代碼;二是容易干擾內(nèi)核運(yùn)行,每次都要仔細(xì)審查加入的代碼,同時(shí)也容易引入漏洞。udev,簡(jiǎn)單,方便,成熟。udev是多個(gè)linux發(fā)行版默認(rèn)的設(shè)備管理器,udev規(guī)則易于在不同的發(fā)行版之間移植。
1 Ubuntu 12.04.04 LTS中的udev
udev 是Linux kernel 2.6的默認(rèn)設(shè)備管理器,它的目標(biāo)是接替devfs和hotplug的功能。udev的守護(hù)進(jìn)程通過(guò)偵聽(tīng)內(nèi)核發(fā)出來(lái)的 uevent 來(lái)管理 /dev 目錄下的設(shè)備文件。它在用戶(hù)模式下管理/dev目錄底下的設(shè)備節(jié)點(diǎn),不會(huì)對(duì)內(nèi)核的運(yùn)行產(chǎn)生影響。因此,內(nèi)核依然會(huì)產(chǎn)生設(shè)備文件如sda,sdb等,人們利用udev建立設(shè)備的軟連接一般不會(huì)干擾其他軟件的運(yùn)行。通過(guò)編寫(xiě)udev規(guī)則,人們就可以根據(jù)設(shè)備的不同屬性區(qū)分設(shè)備,用人們習(xí)慣的命名方式設(shè)置設(shè)備文件名。文章介紹ubuntu 12.04 LFS中udev的使用。2012年4月Udev已經(jīng)和systemd項(xiàng)目合并,集成成為一體化的啟動(dòng)及設(shè)備管理軟件。但在ubuntu12.04 LTS發(fā)行版中使用的是分離的udev 175版本,啟動(dòng)管理(init)用的還是Ubuntu自己的upstart。系統(tǒng)的預(yù)設(shè)規(guī)則和輔助文件放在/lib/udev/中,用戶(hù)自定規(guī)則應(yīng)當(dāng)存在在/etc/udev/rules.d/目錄下,用戶(hù)規(guī)則優(yōu)先級(jí)要高于系統(tǒng)預(yù)設(shè)規(guī)則。
2 獲取udev規(guī)則屬性
為編寫(xiě)匹配規(guī)則,人們先要獲取設(shè)備屬性信息,在ubuntu12.04.04 LTS中可以通過(guò)查看/sys/下的設(shè)備屬性信息和使用udevadm info命令獲取設(shè)備屬性信息。
2.1 查看/sys/屬性文件
/sys目錄下將設(shè)備信息分類(lèi)存放,比如,硬盤(pán)作為塊設(shè)備放置在/sys/block/下,人們執(zhí)行cat /sys/block/sda/device/model查看設(shè)備 sda 的model號(hào)。執(zhí)行該命令得到ST3160815AS,那么人們可以建立匹配規(guī)則 ATTR {model}=="ST3160815AS",規(guī)則表示:如設(shè)備model為ST3160815AS,匹配該設(shè)備。
2.2 通過(guò)udevadm info命令
udevadm info打印指定設(shè)備的所有sysfs記錄的屬性,以用來(lái)udev規(guī)則匹配特殊的設(shè)備。不同發(fā)行版中,具體命令不同。通過(guò)udevadm info獲取設(shè)備信息是最常用的方法,它可以將設(shè)備節(jié)點(diǎn)的信息一次獲取完,而且可以同時(shí)顯示設(shè)備的子節(jié)點(diǎn)和父節(jié)點(diǎn)信息,便于人們編寫(xiě)規(guī)則。
可見(jiàn)udev規(guī)則的匹配是從母節(jié)點(diǎn)到子節(jié)點(diǎn)的次序,匹配中同時(shí)比較設(shè)備的母節(jié)點(diǎn)和子節(jié)點(diǎn)的屬性信息,可以看到人們執(zhí)行test中,同一條規(guī)則多次命中,軟鏈接me_link的指向多次被改變。所以人們要在啟動(dòng)時(shí)讓me_link指向sda1,要增加一個(gè)sda1的屬性,ATTR{start},分區(qū)1的起始扇區(qū)號(hào)。
ATTRS{model}=="ST3160815AS", ATTR{start}=="2048" ,SYMLINK+="me_link"
這樣計(jì)算機(jī)在啟動(dòng)udev創(chuàng)建的me_link會(huì)指向sda1,即第一個(gè)硬盤(pán)的第一個(gè)分區(qū)。
參考文獻(xiàn)
[1]http://manpages.ubuntu.com/manpages/karmic/en/man7/udev.7.html.
[2]http://www.freedesktop.org/software/systemd/man/udev.html.
[3]http://en.wikipedia.org/wiki/Udev.
[4]http://hackaday.com/2009/09/18/how-to-write-udev-rules/.