使用udev管理 Linux 設備文件 防止盤符改變
原文鏈接: http://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html?ca=drs-cn-0304
http://www.cnblogs.com/sopost/archive/2013/01/09/2853200.html udev詳解
http://www.tianqingbo.com/rhel-udev-asm.html 在RHEL6.0上用UDEV SCSI配置ASM
http://www.ibm.com/developerworks/cn/linux/l-devmapper/ Linux 內核中的 Device Mapper 機制
http://www.linuxdiyf.com/linux/10254.html redhat 6用udev設置multipath盤的權限
http://www.linuxdiyf.com/linux/10254.html Linux Multipath配置
http://blog.csdn.net/xushiyan/article/details/7079018 多路徑(multi-path)軟件的介紹
概述:
Linux 用戶常常會很難鑑別同一類型的設備名,比如 eth0, eth1, sda, sdb 等等。通過觀察這些設備的內核設備名稱,用戶通常能知道這些是什麼類型的設備,但是不知道哪一個設備是他們想要的。例如,在一個充斥着本地磁盤和光纖磁盤的設備名清單 (/dev/sd*
) 中,用戶無法找到一個序列號爲"35000c50000a7ef67"的磁盤。在這種情況下,udev 就能動態地在/dev
目錄裏產生自己想要的、標識性強的設備文件或者設備鏈接,以此幫助用戶方便快捷地找到所需的設備文件。
udev 是 Linux2.6 內核裏的一個功能,它替代了原來的 devfs,成爲當前 Linux 默認的設備管理工具。udev 以守護進程的形式運行,通過偵聽內核發出來的 uevent 來管理/dev
目錄下的設備文件。不像之前的設備管理工具,udev 在用戶空間 (user space) 運行,而不在內核空間 (kernel space) 運行。
我們都知道,所有的設備在 Linux 裏都是以設備文件的形式存在。在早期的 Linux 版本中,/dev
目 錄包含了所有可能出現的設備的設備文件。很難想象 Linux 用戶如何在這些大量的設備文件中找到匹配條件的設備文件。現在 udev 只爲那些連接到 Linux 操作系統的設備產生設備文件。並且 udev 能通過定義一個 udev 規則 (rule) 來產生匹配設備屬性的設備文件,這些設備屬性可以是內核設備名稱、總線路徑、廠商名稱、型號、序列號或者磁盤大小等等。
- 動態管理:當設備添加 / 刪除時,udev 的守護進程偵聽來自內核的 uevent,以此添加或者刪除
/dev
下的設備文件,所以 udev 只爲已經連接的設備產生設備文件,而不會在/dev
下產生大量虛無的設備文件。 - 自定義命名規則:通過 Linux 默認的規則文件,udev 在 /dev/ 裏爲所有的設備定義了內核設備名稱,比如
/dev/sda、/dev/hda、/dev/fd
等等。由於 udev 是在用戶空間 (user space) 運行,Linux 用戶可以通過自定義的規則文件,靈活地產生標識性強的設備文件名,比如/dev/boot_disk、/dev/root_disk、/dev/color_printer
等等。 - 設定設備的權限和所有者 / 組:udev 可以按一定的條件來設置設備文件的權限和設備文件所有者 / 組。在不同的 udev 版本中,實現的方法不同,在"如何配置和使用 udev"中會詳解。
下面的流程圖顯示 udev 添加 / 刪除設備文件的過程。
- 設備文件:由於本文以較通俗的方式講解 udev,所以設備文件是泛指在
/dev/
下,可被應用程序用來和設備驅動交互的文件。而不會特別地區分設備文件、設備節點或者設備特殊文件。 - devfs:devfs是 Linux 早期的設備管理工具,已經被 udev 取代。
- sysfs:sysfs是 Linux 2.6 內核裏的一個虛擬文件系統
(/sys)
。它把設備和驅動的信息從內核的設備模塊導出到用戶空間 (userspace)。從該文件系統中,Linux 用戶可以獲取很多設備的屬性。 - devpath:本文的 devpath是指一個設備在 sysfs文件系統
(/sys)
下的相對路徑,該路徑包含了該設備的屬性文件。udev 裏的多數命令都是針對devpath操作的。例如:sda的devpath是/block/sda
,sda2 的devpath是/block/sda/sda2
。 - 內核設備名稱:設備在 sysfs裏的名稱,是 udev 默認使用的設備文件名。
下面會以 RHEL4.8 和 RHEL5.3 爲平臺,分別描述 udev 的配置和使用:
從 Fedora3 和 Red Hat Enterprise4 開始,udev 就是默認的設備管理工具,無需另外下載安裝。
清單 1. 檢查 udev 在 RHEL4.8 裏的版本和運行情況
[root@HOST_RHEL4 dev]# rpm -qa |grep -i udev udev-039-10.29.el4 [root@HOST_RHEL4 ~]# uname -r 2.6.9-89.ELsmp [root@HOST_RHEL4 ~]# ps -ef |grep udev root 21826 1 0 Dec09 ? 00:00:00 udevd |
清單 2. 檢查 udev 在 RHEL5.3 裏的版本和運行情況
[root@HOST_RHEL5 ~]# rpm -qa |grep -i udev udev-095-14.19.el5 [root@HOST_RHEL5 sysconfig]# uname -r 2.6.18-128.el5 [root@HOST_RHEL5 sysconfig]# ps -ef|grep udev root 5466 1 0 18:32 ? 00:00:00 /sbin/udevd -d |
如果 Linux 用戶想更新 udev 包,可以從 http://www.kernel.org/pub/linux/utils/kernel/hotplug/下載並安裝。
udev 的配置文件 (/etc/udev/udev.conf)
清單 3. RHEL 4 . 8下 udev 的配置文件
[root@HOST_RHEL4 dev]# cat /etc/udev/udev.conf # udev.conf # The main config file for udev # # This file can be used to override some of udev's default values # for where it looks for files, and where it places device nodes. # # WARNING: changing any value, can cause serious system breakage! # # udev_root - where in the filesystem to place the device nodes udev_root="/dev/" # udev_db - The name and location of the udev database. udev_db="/dev/.udev.tdb" # udev_rules - The name and location of the udev rules file udev_rules="/etc/udev/rules.d/" # udev_permissions - The name and location of the udev permission file udev_permissions="/etc/udev/permissions.d/" # default_mode - set the default mode for all nodes that have no # explicit match in the permissions file default_mode="0600" # default_owner - set the default owner for all nodes that have no # explicit match in the permissions file default_owner="root" # default_group - set the default group for all nodes that have no # explicit match in the permissions file default_group="root" # udev_log - set to "yes" if you want logging, else "no" udev_log="no" |
Linux 用戶可以通過該文件設置以下參數:
- udev_root:udev 產生的設備所存放的目錄,默認值是
/dev/
。建議不要修改該參數,因爲很多應用程序默認會從該目錄調用設備文件。 - udev_db:udev 信息存放的數據庫或者所在目錄,默認值是
/dev/.udev.tdb
。 - udev_rules:udev 規則文件的名字或者所在目錄,默認值是
/etc/udev/rules.d/
。 - udev_permissions:udev 權限文件的名字或者所在目錄,默認值是
/etc/udev/permissions.d/
。 - default_mode/ default_owner/ default_group:如果設備文件的權限沒有在權限文件裏指定,就使用該參數作爲默認權限,默認值分別是:
0600/root/root
。 - udev_log:是否需要 syslog記錄 udev 日誌的開關,默認值是 no。
清單 4. RHEL5.3 下 udev 的配置文件
[root@HOST_RHEL5 ~]# cat /etc/udev/udev.conf # udev.conf # The initial syslog(3) priority: "err", "info", "debug" or its # numerical equivalent. For runtime debugging, the daemons internal # state can be changed with: "udevcontrol log_priority=<value>". udev_log="err" |
udev_log:syslog記錄日誌的級別,默認值是 err。如果改爲 info 或者 debug 的話,會有冗長的 udev 日誌被記錄下來。
實際上在 RHEL5.3 裏,除了配置文件裏列出的參數 udev_log外,Linux 用戶還可以修改參數 udev_root和udev_rules( 請參考上面的"RHEL4.8 的 udev 配置文件"),只不過這 2 個參數是不建議修改的,所以沒顯示在 udev.conf 裏。
可見該版本的 udev.conf 改動不小:syslog默認會記錄 udev 的日誌,Linux 用戶只能修改日誌的級別 (err、info、degub 等 );設備的權限不能在 udev.conf 裏設定,而是要在規則文件 (*.rules) 裏設定。
在 RHEL4.8 的 udev,設備的權限是通過權限文件來設置。
清單 5. RHEL4.8 下 udev 的權限文件
[root@HOST_RHEL4 ~]# cat /etc/udev/permissions.d/50-udev.permissions ...... # disk devices hd*:root:disk:0660 sd*:root:disk:0660 dasd*:root:disk:0660 ataraid*:root:disk:0660 loop*:root:disk:0660 md*:root:disk:0660 ide/*/*/*/*/*:root:disk:0660 discs/*/*:root:disk:0660 loop/*:root:disk:0660 md/*:root:disk:0660 # tape devices ht*:root:disk:0660 nht*:root:disk:0660 pt[0-9]*:root:disk:0660 npt*:root:disk:0660 st*:root:disk:0660 nst*:root:disk:0660 ...... |
RHEL4.8 裏 udev 的權限文件會爲所有常用的設備設定權限和 ownership,如果有設備沒有被權限文件設置權限,udev 就按照 udev.conf 裏的默認權限值爲這些設備設置權限。由於篇幅的限制,上圖只顯示了 udev 權限文件的一部分,該部分設置了
所有可能連接上的磁盤設備和磁帶設備的權限和 ownership。
而在 RHEL5.3 的 udev,已經沒有權限文件,所有的權限都是通過規則文件 (*.rules)
來設置,在下面的規則文件配置過程會介紹到。
規則文件是 udev 裏最重要的部分,默認是存放在 /etc/udev/rules.d/
下。所有的規則文件必須以".rules
"爲後綴名。RHEL 有默認的規則文件,這些默認規則文件不僅爲設備產生內核設備名稱,還會產生標識性強的符號鏈接。例如:
[root@HOST_RHEL5 ~]# ls /dev/disk/by-uuid/ 16afe28a-9da0-482d-93e8-1a9474e7245c |
但這些鏈接名較長,不易調用,所以通常需要自定義規則文件,以此產生易用且標識性強的設備文件或符號鏈接。
此外,一些應用程序也會在 /dev/
下產生一些方便調用的符號鏈接。例如規則 40-multipath.rules 爲磁盤產生下面的符號鏈接:
[root@ HOST_RHEL5 ~]# ls /dev/mpath/* /dev/mpath/mpath0 /dev/mpath/mpath0p1 /dev/mpath/mpath0p2 |
udev 按照規則文件名的字母順序來查詢全部規則文件,然後爲匹配規則的設備管理其設備文件或文件鏈接。雖然 udev 不會因爲一個設備匹配了一條規則而停止解析後面的規則文件,但是解析的順序仍然很重要。通常情況下,建議讓自己想要的規則文件最先被解析。比如,創建一個 名爲/etc/udev/rules.d/10-myrule.rules
的文件,並把你的規則寫入該文件,這樣 udev 就會在解析系統默認的規則文件之前解析到你的文件。
RHEL5.3 的 udev 規則文件比 RHEL4.8 裏的更完善。受篇幅的限制,同時也爲了不讓大家混淆,本文將不對 RHEL4.8 裏的規則文件進行詳解,下面關於規則文件的配置和實例都是在 RHEL5.3 上進行的。如果大家需要配置 RHEL4 的 udev 規則文件,可以先參照下面 RHEL5.3 的配置過程,然後查詢 RHEL4 裏的用戶手冊 (man udev) 後進行配置。
在規則文件裏,除了以"#"開頭的行(註釋),所有的非空行都被視爲一條規則,但是一條規則不能擴展到多行。規則都是由多個 鍵值對(key-value pairs)組成,並由逗號隔開,鍵值對可以分爲條件匹配鍵值對( 以下簡稱"匹配鍵") 和賦值鍵值對( 以下簡稱"賦值鍵"),一條規則可以有多條匹配鍵和多條賦值鍵。匹配鍵是匹配一個設備屬性的所有條件,當一個設備的屬性匹配了該規則裏所有的匹配鍵,就認爲這條規則生效,然後按照賦值鍵的內容,執行該規則的賦值。下面是一個簡單的規則:
清單 6. 簡單說明鍵值對的例子
KERNEL=="sda", NAME="my_root_disk", MODE="0660" |
KERNEL 是匹配鍵,NAME 和 MODE 是賦值鍵。這條規則的意思是:如果有一個設備的內核設備名稱爲 sda,則該條件生效,執行後面的賦值:在
/dev
下產生一個名爲 my_root_disk
的設備文件,並把設備文件的權限設爲 0660。
通過這條簡單的規則,大家應該對 udev 規則有直觀的瞭解。但可能會產生疑惑,爲什麼 KERNEL 是匹配鍵,而 NAME 和 MODE 是賦值鍵呢?這由中間的操作符 (operator) 決定。
僅當操作符是"=="或者"!="時,其爲匹配鍵;若爲其他操作符時,都是賦值鍵。
- RHEL5.3 裏 udev 規則的所有操作符:
"==":比較鍵、值,若等於,則該條件滿足;
"!=": 比較鍵、值,若不等於,則該條件滿足;
"=": 對一個鍵賦值;
"+=":爲一個表示多個條目的鍵賦值。
":=":對一個鍵賦值,並拒絕之後所有對該鍵的改動。目的是防止後面的規則文件對該鍵賦值。
- RHEL5.3 裏 udev 規則的匹配鍵
ACTION: 事件 (uevent) 的行爲,例如:add( 添加設備 )、remove( 刪除設備 )。
KERNEL: 內核設備名稱,例如:sda, cdrom。
DEVPATH:設備的 devpath 路徑。
SUBSYSTEM: 設備的子系統名稱,例如:sda 的子系統爲 block。
BUS: 設備在 devpath 裏的總線名稱,例如:usb。
DRIVER: 設備在 devpath 裏的設備驅動名稱,例如:ide-cdrom。
ID: 設備在 devpath 裏的識別號。
SYSFS{filename}: 設備的 devpath 路徑下,設備的屬性文件"filename"裏的內容。
例如:SYSFS{model}=="ST936701SS"表示:如果設備的型號爲 ST936701SS,則該設備匹配該 匹配鍵。
在一條規則中,可以設定最多五條 SYSFS 的 匹配鍵。
ENV{key}: 環境變量。在一條規則中,可以設定最多五條環境變量的 匹配鍵。
PROGRAM:調用外部命令。
RESULT: 外部命令 PROGRAM 的返回結果。例如:
PROGRAM=="/lib/udev/scsi_id -g -s $devpath", RESULT=="35000c50000a7ef67"
調用外部命令
/lib/udev/scsi_id
查詢設備的 SCSI ID,如果返回結果爲 35000c50000a7ef67,則該設備匹配該匹配鍵。 - RHEL5.3 裏 udev 的重要賦值鍵
NAME:在
/dev
下產生的設備文件名。只有第一次對某個設備的 NAME 的賦值行爲生效,之後匹配的規則再對該設備的 NAME 賦值行爲將被忽略。如果沒有任何規則對設備的 NAME 賦值,udev 將使用內核設備名稱來產生設備文件。SYMLINK:爲
/dev/
下的設備文件產生符號鏈接。由於 udev 只能爲某個設備產生一個設備文件,所以爲了不覆蓋系統默認的 udev 規則所產生的文件,推薦使用符號鏈接。OWNER, GROUP, MODE:爲設備設定權限。
ENV{key}:導入一個環境變量。
- RHEL5.3 裏 udev 的值和可調用的替換操作符
在鍵值對中的鍵和操作符都介紹完了,最後是值 (value)。Linux 用戶可以隨意地定製 udev 規則文件的值。例如:
my_root_disk, my_printer
。同時也可以引用下面的替換操作符:$kernel, %k:設備的內核設備名稱,例如:sda、cdrom。
$number, %n:設備的內核號碼,例如:sda3 的內核號碼是 3。
$devpath, %p:設備的 devpath路徑。
$id, %b:設備在 devpath裏的 ID 號。
$sysfs{file}, %s{file}:設備的 sysfs裏 file 的內容。其實就是設備的屬性值。
例如:$sysfs{size} 表示該設備 ( 磁盤 ) 的大小。$env{key}, %E{key}:一個環境變量的值。
$major, %M:設備的 major 號。
$minor %m:設備的 minor 號。
$result, %c:PROGRAM 返回的結果。
$parent, %P:父設備的設備文件名。
$root, %r:udev_root的值,默認是
/dev/
。$tempnode, %N:臨時設備名。
%%:符號 % 本身。
$$:符號 $ 本身。
清單 7. 說明替換操作符的規則例子KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p", \ RESULT=="35000c50000a7ef67", SYMLINK="%k_%c"
該規則的執行:如果有一個內核設備名稱以 sd 開頭,且 SCSI ID 爲
35000c50000a7ef67
,則爲設備文件產生一個符號鏈接"sda_35000c50000a7ef67".
如何查找設備的信息 ( 屬性 ) 來制定 udev 規則:
當我們爲指定的設備設定規則時,首先需要知道該設備的屬性,比如設備的序列號、磁盤大小、廠商 ID、設備路徑等等。通常我們可以通過以下的方法獲得:
- 查詢sysfs文件系統:
前面介紹過,sysfs 裏包含了很多設備和驅動的信息。
例如:設備 sda 的 SYSFS{size} 可以通過
cat /sys/block/sda/size
得到;SYSFS{model} 信息可以通過cat /sys/block/sda/device/model
得到。 - udevinfo命令:
udevinfo 可以查詢 udev 數據庫裏的設備信息。例如:用 udevinfo 查詢設備 sda 的 model 和 size 信息:
清單 8. 通過 udevinfo 查詢設備屬性的例子[root@HOST_RHEL5 rules.d]# udevinfo -a -p /block/sda | egrep "model|size" SYSFS{size}=="71096640" SYSFS{model}=="ST936701SS "
- 其他外部命令:
清單 9. 通過 scsi_id 查詢磁盤的 SCSI_ID 的例子[root@HOST_RHEL5 ~]# scsi_id -g -s /block/sda 35000c50000a7ef67
udev 的簡單規則:
清單 10. 產生網卡設備文件的規則
SUBSYSTEM=="net", SYSFS{address}=="AA:BB:CC:DD:EE:FF", NAME="public_NIC" |
該規則表示:如果存在設備的子系統爲 net,並且地址 (MAC address) 爲"AA:BB:CC:DD:EE:FF",爲該設備產生一個名爲 public_NIC 的設備文件。
清單 11. 爲指定大小的磁盤產生符號鏈接的規則
SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK ="my_disk" |
該規則表示:如果存在設備的子系統爲 block,並且大小爲 71096640(block),則爲該設備的設備文件名產生一個名爲 my_disk 的符號鏈接。
清單 12. 通過外部命令爲指定序列號的磁盤產生設備文件的規則
KERNEL=="sd*[0-9]", PROGRAM=="/lib/udev/scsi_id -g -s %p", \ RESULT=="35000c50000a7ef67", NAME +="root_disk%n" |
該規則表示:如果存在設備的內核設備名稱是以 sd 開頭 ( 磁盤設備 ),以數字結尾 ( 磁盤分區 ),並且通過外部命令查詢該設備的 SCSI_ID 號爲"35000c50000a7ef67",則產生一個以 root_disk 開頭,內核號碼結尾的設備文件,並替換原來的設備文件(如果存在的話)。例如:產生設備名/dev/root_disk2
,替換原來的設備名/dev/sda2
。
運用這條規則,可以在 /etc/fstab
裏保持系統分區名稱的一致性,而不會受驅動加載順序或者磁盤標籤被破壞的影響,導致操作系統啓動時找不到系統分區。
其他常用的 udev 命令:
- udevtest:
udevtest
會針對一個設備,在不需要 uevent 觸發的情況下模擬一次udev
的運行,並輸出查詢規則文件的過程、所執行的行爲、規則文件的執行結果。通常使用udevtest
來調試規則文件。以下是一個針對設備 sda 的udevtest
例子。由於udevtest
是掃描所有的規則文件 ( 包括系統自帶的規則文件 ),所以會產生冗長的輸出。爲了讓讀者清楚地瞭解udevtest
,本例只在規則目錄裏保留一條規則:
清單 13. 爲 udevtest 保留的規則KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p", RESULT=="35000c50000a7ef67", \ NAME="root_disk%n", SYMLINK="symlink_root_disk%n"
清單 14. udevtest 的執行過程[root@HOST_RHEL5 rules.d]# udevtest /block/sda main: looking at device '/block/sda' from subsystem 'block' run_program: '/lib/udev/scsi_id -g -s /block/sda' run_program: '/lib/udev/scsi_id' (stdout) '35000c50000a7ef67' run_program: '/lib/udev/scsi_id' returned with status 0 udev_rules_get_name: reset symlink list udev_rules_get_name: add symlink 'symlink_root_disk' udev_rules_get_name: rule applied, 'sda' becomes 'root_disk' udev_device_event: device '/block/sda' already in database, \ validate currently present symlinks udev_node_add: creating device node '/dev/root_disk', major = '8', \ minor = '0', mode = '0660', uid = '0', gid = '0' udev_node_add: creating symlink '/dev/symlink_root_disk' to 'root_disk'
可以看出,
udevtest
對 sda 執行了外部命令scsi_id
, 得到的 stdout 和規則文件裏的 RESULT 匹配,所以該規則匹配。然後 ( 模擬 ) 產生設備文件/dev/root_disk
和符號鏈接/dev/symlink_root_disk
,併爲其設定權限。 - start_udev:
start
_dev
命令重啓udev
守護進程,並對所有的設備重新查詢規則目錄下所有的規則文件,然後執行所匹配的規則裏的行爲。通常使用該命令讓新的規則文件立即生效:
清單 15. start_udev 的執行過程[root@HOST_RHEL5 rules.d]# start_udev Starting udev: [ OK ]
start
_udev
一般
沒有標準輸出,所有的 udev 相關信息都按照配置文件 (udev.conf)
的參數設置,由syslog記錄。
udev 是高效的設備管理工具,其最大的優勢是動態管理設備和自定義設備的命名規則,因此替代 devfs 成爲 Linux 默認的設備管理工具。通過閱讀本文,Linux 用戶能夠了解到 udev 的工作原理和流程,靈活地運用 udev 規則文件,從而方便地管理 Linux 設備文件。
- 有關 Udev 更多信息,請參考:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
在操作系統redhat 6上,重啓multipath服務,盤的權限就變root了,需要用udev綁定設置權限。
查看設備
[root@odbdg2 ~]# dmsetup ls data01 (253:2) crs03 (253:3) VG0-LV_ROOT (253:6) crs02 (253:1) crs01 (253:0) data03 (253:5) data02 (253:4)
配置參數
[root@oradbca ~]# cat /etc/udev/rules.d/12-dm-permissions.rules ENV{DM_NAME}=="crs01", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="crs02", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="crs03", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data01", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data02", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data03", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}"
重啓服務
service multipath restart
查看權限
[root@oradbca ~]# ll /dev/dm-* brw-rw---- 1 grid asmadmin 253, 0 Jul 23 14:26 /dev/dm-0 brw-rw---- 1 grid asmadmin 253, 1 Jul 23 14:26 /dev/dm-1 brw-rw---- 1 grid asmadmin 253, 2 Jul 13 03:48 /dev/dm-2 brw-rw---- 1 grid asmadmin 253, 3 Jul 23 14:26 /dev/dm-3 brw-rw---- 1 grid asmadmin 253, 4 Jul 13 03:48 /dev/dm-4 brw-rw---- 1 grid asmadmin 253, 5 Jul 23 14:26 /dev/dm-5 brw-rw---- 1 root disk 253, 6 Jul 13 03:04 /dev/dm-6
對華爲軟件劃分的多路徑存儲使用udev:( linux 6.5 )
編輯文件添加:(注意可能會重啓啓動不起來,最好先測試下)在/dev/mapper/目錄裏面沒有mpath*
[root@PCSZP003]# cat /etc/udev/rules.d/99-oracleasm.rules
KERNEL=="sdb", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdc", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdd", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sde", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdf", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdg", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdh", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdi", OWNER="grid", GROUP="oinstall", MODE="0660"
KERNEL=="sdj", OWNER="grid", GROUP="oinstall", MODE="0660"
複製到節點2
scp -r 99-oracleasm.rules [email protected]:/etc/udev/rules.d/
=================================================================
linux 5.7 udev配置:
cat /etc/udev/rules.d/50-udev.rules 添加:(在/dev/mapper/目錄裏面有mpath*)
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath0"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath1"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath2"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath3"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath4"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath5"
PROGRAM="/bin/chown grid:oinstall /dev/mapper/mpath6"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath0"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath1"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath2"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath3"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath4"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath5"
PROGRAM="/bin/chmod 777 /dev/mapper/mpath6"
PROGRAM="/bin/chmod 777 /dev/sdh1"
實際是修改了sd*
=========================================
redhat 6.5用linux自帶的多路徑軟件做的多路徑:
vi /etc/udev/rules.d/99-oracleasm.rules
SUBSYSTEM=="block", KERNEL=="dm-*", GROUP="oinstall", OWNER="grid", MODE="0660"
=========================================
linux6.5自帶多路徑軟件,此方法不可用:KERNEL=="mapper/mpathb", OWNER="grid", GROUP="oinstall", MODE="0660"
=======================================
或者 修改/etc/multipath.conf 添加權限選項