udev是kernel2.6中針對設備管理產生的新方式,udev可以通過sysfs下的/sys目錄找到設備的相關信息,因此不需要事先把所有可能用到的設備文件在/dev中創建,而是動態靈活的支持熱插拔功能,自動創建相關設備的設備文件,非常有彈性。
udev中的配置文件在/etc/udev/下,其中rule.d/目錄裏面是具體的規則文件(待會會重點講解規則的書寫),udev.conf是udev全局配置文件。
當用vim打開udev.conf文件的時候,會發現裏面只有一條關於udev的log等級的內容
當然,我們可以在此conf文件裏面寫入其他內容,比如udev_root=/dir,就代表我們的設備文件可以在自己定義的目錄裏,默認是在/dev/下,沒有特殊需求,一般不用加入這個條目。
下面重點講解udev規則的寫法,講解之前我們考慮這樣一個場景,比如我們發現一個IP-SAN的設備,比如ISCSI,因爲ISCSI設備並不在本地服務上,所以可能存在每次連接ISCSI設備的時候,我們的設備名稱不一樣(第一次發現可能是/dev/sdb,第二次發現的時候可能叫/dev/sdc),這樣會造成用戶使用的時候出現設備不不一致的問題,或者當我們插入一個U盤的時候,我希望U盤的名字叫做myusb,而不再是系統分配的名稱的時候,就需要書寫規則,這也是udev帶來的好處。那麼我們所有的默認規則存放的路徑就是在剛纔提到的/etc/udev/rule.d/目錄下
可以發現此規則命名的方式爲: 數字-規則名.rules,因此我們自定義規則的名字可以把數字放的大一些,但不可以超過100,比如我們可以寫一個規則叫做 99-myusb.rules
這其中有一些書寫規則的格式和符號需要了解
符號: == 匹配鍵值對
= 賦值
+=追加賦值
:=賦值後不可以被覆蓋
下面我們舉個剛纔的例子來掩飾,當插入一個U盤的時候,默認系統會生成一個/dev/sdX設備名
通過編寫自己的規則,使得U盤插入後,可以生成一個自定義的設備名 如/dev/myusb
那麼接下來有一個問題需要考慮,系統憑什麼認爲你插入的U盤就是myusb設備,而不是其他呢?這就需要爲這個特殊的U盤找到一個(一些)僅僅屬於它自己的屬性(唯一性)
通過udevadm info -a(所有屬性) -p (路徑) 命令來查看設備的屬性
udevadm info -a -p /sys/block/sdb
找到一些特殊的屬性
下面給出簡單的規則信息:
重新插入U盤,會生成一個/dev/myusb設備
當然,我們的規則中還可以加入更多內容,比如當插入此U盤後,有系統自動識別的名字叫做/dev/sdb,同時給這個設備做個鏈接,名字叫做/dev/myusb
重新插入U盤,觀察到有/dev/sdb,同時有個鏈接到sdb上的/dev/myusb
當然,我們還可以加入更多內容,udev提供了豐富的資源,比如可以爲增加的設備加入擁有人和擁有組的權限,可以增加一個設備的同時,立刻運行一個腳本等功能。