歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux系統SCSI磁盤掃描機制解析及命令詳細介紹

Linux系統SCSI磁盤掃描機制解析及命令詳細介紹

日期:2017/3/2 16:29:08   编辑:Linux服務器

  介紹

  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

Copyright © Linux教程網 All Rights Reserved