關於RHEL 5 下scsi_id 無返回值的問題解決(1)

spectre2發表於2011-07-08

2014年12月11日修訂:本文釋出後有很多網友聯絡諮詢和留言,恰逢最近解決了此問題,決定另發表一篇文章繼續解析一下scsi_id無返回值的問題,這次應該是完全的解決方案了(建議按順序閱讀)。

關於RHEL 5 下scsi_id 無返回值的問題解決(2) 完全解析 
http://blog.itpub.net/14184018/viewspace-1364944/

根據
http://www.cn.redhat.com/kbase/0808/12118.php(連結已失效20141211中,執行/sbin/scsi_id -g -u -s /block/sdb後會返回scsi的WWID,可以用來給udev使用。但是在實際操作中卻發現REHL5裡沒有/block目錄,嘗試把/block替換成/dev或/sys/block,執行後均無效,無任何返回值,於是google很長時間,找到問題了。

參考以下:

裝置檔案:由於本文以較通俗的方式講解 udev,所以裝置檔案是泛指在 /dev/下,可被應用程式用來和裝置驅動互動的檔案。而不會特別地區分裝置檔案、裝置節點或者裝置特殊檔案。 devfsdevfs是 Linux 早期的裝置管理工具,已經被 udev 取代。 sysfssysfs是 Linux 2.6 核心裡的一個虛擬檔案系統 (/sys)。它把裝置和驅動的資訊從核心的裝置模組匯出到使用者空間 (userspace)。從該檔案系統中,Linux 使用者可以獲取很多裝置的屬性。 devpath:本文的 devpath是指一個裝置在 sysfs檔案系統 (/sys)下的相對路徑,該路徑包含了該裝置的屬性檔案。udev 裡的多數命令都是針對 devpath操作的。例如:sdadevpath/block/sda,sda2 的 devpath/block/sda/sda2核心裝置名稱:裝置在 sysfs裡的名稱,是 udev 預設使用的裝置檔名。

RHEL 4 . 8下 udev 的配置檔案

[root@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.tdbudev_rules:udev 規則檔案的名字或者所在目錄,預設值是 /etc/udev/rules.d/udev_permissions:udev 許可權檔案的名字或者所在目錄,預設值是 /etc/udev/permissions.d/default_mode/ default_owner/ default_group:如果裝置檔案的許可權沒有在許可權檔案裡指定,就使用該引數作為預設許可權,預設值分別是:0600/root/rootudev_log:是否需要 syslog記錄 udev 日誌的開關,預設值是 no。
清單 4. RHEL5.3 下 udev 的配置檔案

[root@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=". udev_log="err"

 

udev_logsyslog記錄日誌的級別,預設值是 err。如果改為 info 或者 debug 的話,會有冗長的 udev 日誌被記錄下來。

實際上在 RHEL5.3 裡,除了配置檔案裡列出的引數 udev_log外,Linux 使用者還可以修改引數 udev_rootudev_rules( 請參考上面的“RHEL4.8 的 udev 配置檔案”),只不過這 2 個引數是不建議修改的,所以沒顯示在 udev.conf 裡。

可見該版本的 udev.conf 改動不小:syslog預設會記錄 udev 的日誌,Linux 使用者只能修改日誌的級別 (err、info、degub 等 );裝置的許可權不能在 udev.conf 裡設定,而是要在規則檔案 (*.rules) 裡設定。

 

所以,根據如上紅色所示部分,http://www.cn.redhat.com/kbase/0808/12118.php中的/block/sdb指的是相對路徑,直接使用就可以,據對路徑是/sys/block,推測scsi_id只支援相對路徑,直接使用絕對路徑會因為找不到裝置屬性檔案而無返回值。直接執行/sbin/scsi_id -g -u -s /block/sdb後,返回WWID。

P.S.  如本文沒有解決你的問題,請繼續閱讀:
關於RHEL 5 下scsi_id 無返回值的問題解決(2) 完全解析 
http://blog.itpub.net/14184018/viewspace-1364944/


本文乃spectre2原創文章,請勿轉載。如須轉載請詳細標明轉載出處。

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

相關文章