[size=small] 用 open-iscsi 連上 target 之後,iscsi 裝置的名稱在系統裡總是變來變去,無法固定,這給應用帶來了諸多不便。為了固定系統中 iscsi 裝置的名稱,可以考慮使用linux 2.6 核心引入的 udev 機制。
關於 udev 的介紹,網上的資料很多,這裡就不囉嗦了。英文好的同學也可以用 [color=red]man udev[/color] 來檢視系統自帶的幫助文件。
[list]
[*][b]udev 規則檔案[/b]
[/list] udev 相關的配置檔案、規則檔案和指令碼等的位置在不同系統上不盡相同,可以通過 [color=red]man udev[/color] 查到。在 centos 上,這些檔案均位於 [color=red]/etc/udev[/color] 目錄下。
udev 規則檔案必須以 [color=red].rules[/color] 結尾,開始的數字代表規則執行的優先順序,數字越小,優先順序越高。當然,也可以不指定數字。
好了,廢話不多說,直接上規則:
[b][color=violet]kernel=="sd*", bus=="scsi", env=="ip-*", program="/etc/udev/scripts/iscsidev.sh %e", symlink+="iscsi/%c/part%n"[/color][/b]
[b][color=red]注意[/color][/b]:規則檔案中的一條規則必須在同一行內,不允許跨行。
上述規則中,"==" 為條件判斷,"kernel"、"bus"、"env"為規則必須滿足的條件。這3個條件可以確認乙個 iscsi 裝置或分割槽。其中,"env"表示裝置的 id_path 屬性,該屬性在 centos 中為 "[color=red]ip-[/color]" 開頭的字串。
program 指定滿足規則後執行的指令碼程式,symlink 表示滿足規則後建立指定該裝置的符號鏈結。symlink 預設建立在 [color=red]/dev[/color] 目錄下,所以這裡只給出了相對路徑。
規則中以"%"開始的是 udev 中的引數,如下:
[table]
|%e|乙個環境變數的值,即通過 [color=red]udevadm[/color] 命令查詢出的裝置屬性
|%c|program 返回的結果
|%n|裝置的核心號碼,例如:sda3 的核心號碼是 3
[/table] 詳細的引數說明,可以檢視 udev 的系統幫助([color=red]man udev[/color]),也可以參考[url=簡述udev的自定義規則[/url]。
上述規則中,iscsi 裝置的 symlink 為 [color=red]/dev/iscsi//part[/color]。其中,為裝置的核心號碼;通過 program 指定的指令碼獲得。
[list]
[*][b]udev 指令碼[/b]
[/list] iscsidev.sh 指令碼的內容如下:
[b][color=violet]#!/bin/sh
# file: /etc/udev/scripts/iscsidev.sh
target_name=`/bin/echo $1 | /bin/awk -f"-iscsi-" '' | /bin/awk -f"-lun-" ''`
/bin/echo $[/color][/b]
指令碼的傳入引數為裝置的 id_path 屬性,其格式為 [color=red]ip-:-iscsi--lun-[/color],可以通過 [color=red]udevadm[/color] 查詢到:
[b][color=green]# udevadm info --query=property --name=/dev/sdb[/color][/b]
[img]
指令碼解析傳入的引數,解析出 target 的名字,然後組成 lun 對應裝置的符號鏈結,並返回。
現在,可以登入 iscsi target,然後再 [color=red]/dev/iscsi/[/color] 下檢視對應的符號鏈結了。
[/size]
利用UDEV機制固定儲存裝置的名稱
什麼是udev udev為一些實際的裝置提供了乙個動態的裝置目錄,這些目錄裡包含這些實際裝置所對應的檔案。它建立或移除在 dev目錄裡的裝置節點檔案,或者重新命名網路介面。通常udev執行udevd,如果乙個裝置增加進系統或者從系統中移除,它就會直接從核心中接受到這個udev的事件。如果udev接受...
用最簡單的方式固定表頭 固定首列
主要思想就是用多個table拼湊成乙個table造成固定的假象,話不多說直接上 以下 主要是控制 樣式 以下 是重點啦,乙個 只有thead,另乙個 只有tbody 123 456 下面是建立tbody的tr和td,可忽略不看 實現效果圖如下 如果你想簡單實現固定表頭,以上 已經可以做到啦,但是以上...
Linux上用udev自動識別並掛載U盤
最近想在 u盤中放置乙個配置檔案,當 u盤插入時自動讀取配置檔案。發現插上 u盤後,在 dev 下產生sda1 adb1 sdc1 等不定裝置,需要手動掛載才行。根據網上了解,可以通過 udev 來實現u 盤的自動識別和掛載,操作方法如下 1.在 etc udev rules 目錄下新建 11 ad...