Linux系統SCSI磁盤掃描機制解析及命令實例


介紹
Linux系統掃描SCSI磁盤有幾種方式?Linux新增LUN之后,能否不重啟主機就認出設備?如果安裝了PowerPath,動態添加/刪除LUN的命令是什么?本文總結了Linux主機對磁盤設備進行重新配置的方式,並附加命令實例。

更多信息
Linux系統提供多重機制以重新掃描SCSI總線並重認系統中加入的SCSI設備。在2.4內核方案中,由於動態LUN掃描機制不具備一致性,往往需要中斷I/O。
2.6內核里,LUN掃描有了顯著改進並添加了動態LUN掃描機制。Linux目前缺乏像drvconfig或ioscan那樣允許動態SCSI通道重配的命令。
Linux主機對磁盤設備進行重新配置的方式包括:

# 重啟系統
# 卸載並重新加載HBA驅動模塊
# Echo /proc下的SCSI設備列表
# 通過/sys下的屬性設置運行SCSI掃描
# 通過HBA廠商腳本運行SCSI掃描

系統重啟
重啟主機是檢測新添加磁盤設備的可靠方式。在所有I/O停止之后方可重啟主機,同時靜態或以模塊方式連接磁盤驅動。系統初始化時會掃描PCI總線,因此掛載其上的SCSI host adapter會被掃描到,並生成一個PCI device。之后掃描軟件會為該PCI device加載相應的驅動程序。加載SCSI host驅動時,其探測函數會初始化SCSI host,注冊中斷處理函數,最后調用scsi_scan_host函數掃描scsi host adapter所管理的所有scsi總線。

重新加載HBA驅動
通常情況下,HBA驅動在系統中以模塊形式加載。從而允許模塊被卸載並重新加載,在該過程中SCSI掃描函數得以調用。通常,在卸載HBA驅動之前,SCSI設備的所有I/O都應該停止,卸載文件系統,多路徑服務應用也需停止。如果有代理或HBA應用幫助模塊,也應當中止。
命令示例:
例如,rac節點上某台服務器執行fdisk –l命令看不到共享磁盤,可嘗試執行如下命令:

# modprobe -r lpfc(卸載驅動)
# modprobe lpfc(加載驅動)

/proc下SCSI掃描
2.4內核中,/proc文件系統提供了可用SCSI設備的列表。如果系統中SCSI設備重新配置,那么所有這些改變通過echo /proc接口反映到SCSI設備中。添加一個設備,主機,channel,target ID,以及磁盤設備的LUN編號會被添加到/proc/scsi/,需指定scsi編號。
命令示例:

# echo "scsi add-single-device 0 1 2 3" > /proc/scsi/scsi
0:主機ID
1:channel ID
2:target ID
3:LUN編號

該命令會將新磁盤設備添加到/proc/scsi/scsi文件中。如果沒有找到相應文件,需為/dev路徑下新增磁盤設備創建設備文件名。
如果要刪除一個磁盤設備,使用適當的主機,channel,target ID及LUN編號運行如下格式命令:

# echo "scsi remove-single-device 0 1 2 3" > /proc/scsi/scsi
0:主機ID
1:channel ID
2:target ID
3:LUN編號

/sys下SCSI掃描
2.6內核中,HBA驅動將SCAN功能導出至/sys目錄下,可用來重新掃描該接口下的SCSI磁盤設備。命令如下:

# cd /sys/class/scsi_host/host4/
# ls -al scan
# echo '- - -' > scan
'- - -' 代表channel,target和LUN編號。以上命令會導致hba4下所有channel,target以及可見LUN被掃描。

RHEL5 或SUSE10:

echo '- - -' > /sys/class/scsi_host/host0/scan
/sys/class/scsi_host/ 下面有幾個host 就掃描幾次

RHEL4 或SUSE9:

echo 1 >> /sys/class/scsi_host/host0/issue_lip 
同樣是/sys/class/scsi_host/ 下面有幾個host 就執行幾次
echo '- - -' >> /sys/class/scsi_host/host0/scan

在現有PowerPath環境中增加LUN:
1.確保存儲端已配置好LUN並輸出給Linux 主機
2.通過powermt命令獲得HBA 卡列表,並掃描列表中所有的HBA

echo '- - -' > /sys/class/scsi_host/host#/scan
例如, 如果powermt 顯示列出HBA 4 和5, 使用如下命令開始掃描:
echo '- - -' > /sys/class/scsi_host/host4/scan
echo '- - -' > /sys/class/scsi_host/host5/scan

3.運行powermt config 配置新認到的磁盤,生成虛擬設備
4.用powermt display 檢查新認到的LUN 及設備路徑

在現有PowerPath環境中動態刪除 LUN
注意,必須嚴格遵守操作次序,如果次序有誤可能會造成主機OS panic。
1.在將要刪除的設備上停止所有的I/O。
2.通過以下命令確定虛擬設備對應的原始SCSI設備:

powermt display dev=emcpower<id>

3.刪除虛擬設備

powermt remove dev=emcpower<id>

4.回收虛擬設備號以備后用

powermt release

如果此命令失敗,已刪除的虛擬設備仍會存在於/dev 和/sys/block 下,並且在以后動態添加新LUN時可能會引發問題。
5.對每個原始SCSI 設備執行以下命令:

echo 1 > /sys/block/sd<id>/device/delete

此命令使PowerPath 停止這些原始sd 設備上的I/O 並且將其從/dev 和/sys/block下移除。如此命令執行不成功,在以后動態添加新LUN時可能會引發問題。
6.在存儲陣列中刪除對應的LUN,執行powermt display 驗證設備已被刪除。

通過HBA廠商腳本進行SCSI掃描
QLogic
利用QLogic FC HBA LUN Scan Utility 腳本即可無需重啟動系統而識別新添加的LUN。也無需對QLogic FC driver 的重新加載。
命令示例:
通過以下命令重新掃描所有HBA:

# ./ql-dynamic-tgt-lun-disc.sh
# ./ql-dynamic-tgt-lun-disc.sh -s
# ./ql-dynamic-tgt-lun-disc.sh –scan

重新掃描並刪除丟失的LUN,使用以下兩個命令其中任何一個:

# ./ql-dynamic-tgt-lun-disc.sh -s -r
# ./ql-dynamic-tgt-lun-disc.sh --scan –refresh

Emulex
使用 Emulex LUN Scan Utility 腳本可以動態掃描新添加的LUN。
命令示例:

# gunzip lun_scan.sh.gz
# chmod a+x lun_scan
掃描所有lpfc HBA:
# lun_scan all
掃描scsi主機編號2的lpfc HBA:
# lun_scan 2
之后確認OS 識別到新設備:
# fdisk -l
如果系統中有PowerPath ,還需要運行:
# powermt config

參考
EMC Host Connectivity Guide for Linux
應用於
Linux主機Kernel 2.4、2.6版本
RHEL, SUSE

本文轉載自:https://www.cnblogs.com/cqubityj/p/4241282.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM