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