udev的簡單用法舉例

  udev是kernel2.6中針對設備管理產生的新方式,udev可以通過sysfs下的/sys目錄找到設備的相關信息,因此不需要事先把所有可能用到的設備文件在/dev中創建,而是動態靈活的支持熱插拔功能,自動創建相關設備的設備文件,非常有彈性。

  udev中的配置文件在/etc/udev/下,其中rule.d/目錄裏面是具體的規則文件(待會會重點講解規則的書寫),udev.conf是udev全局配置文件。

  當用vim打開udev.conf文件的時候,會發現裏面只有一條關於udev的log等級的內容

wKiom1UbgA2ChhE6AADNOVIJXNI127.jpg

當然,我們可以在此conf文件裏面寫入其他內容,比如udev_root=/dir,就代表我們的設備文件可以在自己定義的目錄裏,默認是在/dev/下,沒有特殊需求,一般不用加入這個條目。

  下面重點講解udev規則的寫法,講解之前我們考慮這樣一個場景,比如我們發現一個IP-SAN的設備,比如ISCSI,因爲ISCSI設備並不在本地服務上,所以可能存在每次連接ISCSI設備的時候,我們的設備名稱不一樣(第一次發現可能是/dev/sdb,第二次發現的時候可能叫/dev/sdc),這樣會造成用戶使用的時候出現設備不不一致的問題,或者當我們插入一個U盤的時候,我希望U盤的名字叫做myusb,而不再是系統分配的名稱的時候,就需要書寫規則,這也是udev帶來的好處。那麼我們所有的默認規則存放的路徑就是在剛纔提到的/etc/udev/rule.d/目錄下

 wKioL1UbgwXCZQ2nAADGuHJvA1g196.jpg

 可以發現此規則命名的方式爲:  數字-規則名.rules,因此我們自定義規則的名字可以把數字放的大一些,但不可以超過100,比如我們可以寫一個規則叫做   99-myusb.rules

  這其中有一些書寫規則的格式和符號需要了解

格式: wKioL1UblhbAfw9CAAA9Mz7OAtw423.jpg

符號:    ==   匹配鍵值對

               =   賦值

              +=追加賦值

              :=賦值後不可以被覆蓋

下面我們舉個剛纔的例子來掩飾,當插入一個U盤的時候,默認系統會生成一個/dev/sdX設備名

通過編寫自己的規則,使得U盤插入後,可以生成一個自定義的設備名 如/dev/myusb

 那麼接下來有一個問題需要考慮,系統憑什麼認爲你插入的U盤就是myusb設備,而不是其他呢?這就需要爲這個特殊的U盤找到一個(一些)僅僅屬於它自己的屬性(唯一性)

 通過udevadm   info  -a(所有屬性) -p (路徑) 命令來查看設備的屬性

  udevadm info  -a  -p /sys/block/sdb

 找到一些特殊的屬性

 下面給出簡單的規則信息:

 wKiom1UbluTxNa0kAABBDPLTAvw161.jpg

 重新插入U盤,會生成一個/dev/myusb設備

wKioL1UbmMiShVCfAABQjcXsP18446.jpg

 當然,我們的規則中還可以加入更多內容,比如當插入此U盤後,有系統自動識別的名字叫做/dev/sdb,同時給這個設備做個鏈接,名字叫做/dev/myusb

wKiom1UbmmmSbTRwAAA7VqryRw0823.jpg

重新插入U盤,觀察到有/dev/sdb,同時有個鏈接到sdb上的/dev/myusb

wKiom1Ubmr_AiUQsAABICEZ2SNM991.jpg

當然,我們還可以加入更多內容,udev提供了豐富的資源,比如可以爲增加的設備加入擁有人和擁有組的權限,可以增加一個設備的同時,立刻運行一個腳本等功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章