UDEV規則的匹配鍵和RAW的一點說明

lusklusklusk發表於2017-06-23
udevadm命令可以看到具體資訊udevadm info --attribute-walk --name=/dev/sda

UDEV涉及的一些常見目錄資訊
ll /sys/class/block/
ll /dev/raw
ll /dev/mapper
ll /dev/block
ll /dev/disk/by-path
ll /dev/disk/by-id
ll /dev/disk/by-uuid



UDEV規則的匹配欄位屬性
ACTION        匹配事件的動作名,例如:add( 新增裝置 )、remove( 刪除裝置 )。
DEVPATH       匹配事件的裝置相對路徑。例如:sda的devpath是/dev/sda,sda2的devpath是/dev/sda2。
KERNEL        匹配事件的裝置名字,比如sdb,比如sd*表示任意SCSI磁碟裝置
NAME          匹配網路介面或者裝置節點的名字。NAME只有在前面的規則賦值之後才可以使用。
SYMLINK       匹配裝置節點符號鏈的名字。SYMLINK 只有在前面的規則賦值之後才可以使用。可以有多個 symlinks,只需要匹配一個。
SUBSYSTEM     匹配裝置子系統
DRIVER        匹配裝置在devpath裡的裝置驅動名稱,例如:ide-cdrom。
BUS           裝置在devpath 裡的匯流排名稱,例如:usb。
ID            裝置在 devpath 裡的識別號
ENV{key}      環境變數。ENV{MAJOR}=="8"和ENV{MINOR}=="1"表示sda1
PROGRAM       執行一個程式。如果程式成功返回, key 為 true。裝置的屬性被放在被執行程式的環境變數中,該程式的輸出為 stdout, 可以從 RESULT 這個 key 讀取。
RESULT        匹配最近一次 PROGRAM 呼叫的返回字串。它應該在 PROGRAM 之後使用。
OWNER         匹配裝置檔案的屬組
GROUP         匹配裝置檔案所在的組。
MODE          匹配裝置檔案的許可權,採用8進位制
MAJOR         表示磁碟號
MINOR         表示磁碟下面的分割槽號


UDEV規則匹配欄位屬性和可呼叫的替換運算子 
$kernel, %k:裝置的核心裝置名稱,例如:sda、cdrom。
$number, %n:裝置的核心號碼,例如:sda3 的核心號碼是 3。
$devpath, %p:裝置的 devpath路徑。
$id, %b:裝置在 devpath裡的 ID 號。
$sysfs{file}, %s{file}:裝置的 sysfs裡 file 的內容。其實就是裝置的屬性值。
$env{key}, %E{key}:一個環境變數的值。
$major, %M:裝置的 major 號。
$minor %m:裝置的 minor 號。
$result, %c:PROGRAM 返回的結果。
$parent, %P:父裝置的裝置檔名。
$root, %r:udev_root的值,預設是/dev/。
$tempnode, %N:臨時裝置名。
%%:符號 % 本身。
$$:符號 $ 本身。




ENV{key}的特別說明
linux核心中表示不同的裝置是透過major 和minor number實現的,透過major和minor Number來載入相應的驅動程式。
sda和sdb的major number都是8,sda的minor number是0開始, sdb的minor number 是16開始。
ENV{major}     major表示不同的裝置型別
ENV{minor}     minor表示同一個裝置的的不同分割槽
ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"




raw命令(以前RHEL4版本用的多,現在RHEL6用的少,不過RHEL6也是可以使用這樣的方式)
可以直接透過raw命令繫結裸裝置,不過重啟後就丟失了,需要寫在/etc/sysconfig/rawdevices檔案中如/dev/raw/raw1 /dev/sdb1
[root@localhost ~]# ll /dev/raw
總用量 0
crw-rw----. 1 root disk 162, 0 6月  23 16:58 rawctl

[root@localhost ~]# raw
Usage:
  raw /dev/raw/rawN
  raw /dev/raw/rawN /dev/
  raw -q /dev/raw/rawN
  raw -qa

[root@localhost ~]# raw /dev/raw/raw1 /dev/sdb1
/dev/raw/raw1:  bound to major 8, minor 17

[root@localhost ~]# ll /dev/|grep sdb
brw-rw----.  1 root disk      8,  16 6月  23 16:59 sdb
brw-rw----.  1 root disk      8,  17 6月  23 16:59 sdb1

[root@localhost ~]# raw -qa
/dev/raw/raw1:  bound to major 8, minor 17

[root@localhost ~]# raw -q /dev/raw/raw1
/dev/raw/raw1:  bound to major 8, minor 17

[root@localhost ~]# ll /dev/raw
總用量 0
crw-rw----. 1 root disk 162, 1 6月  23 17:25 raw1
crw-rw----. 1 root disk 162, 0 6月  23 16:58 rawctl

[root@localhost ~]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2141179/,如需轉載,請註明出處,否則將追究法律責任。

相關文章