lsscsi 與 cat /proc/scsi/scsi


[root@localhost ~]# lsscsi
[0:0:0:0]    disk    SEAGATE  ST300MM0048      N001  /dev/sda
[0:0:2:0]    disk    ATA      INTEL SSDSC2BB80 0112  /dev/sdc
[0:0:3:0]    disk    ATA      HGST HUS726060AL T7JM  /dev/sdd
[0:0:4:0]    disk    ATA      HGST HUS726060AL T7JM  /dev/sde
[0:0:5:0]    disk    ATA      HGST HUS726060AL TAF0  /dev/sdf
[0:0:6:0]    disk    ATA      HGST HUS726060AL TAF0  /dev/sdg
[0:0:7:0]    disk    ATA      HGST HUS726060AL TAF0  /dev/sdh
[0:0:8:0]    disk    ATA      HGST HUS726060AL TAF0  /dev/sdi
[0:0:9:0]    disk    ATA      HGST HUS726060AL TAF0  /dev/sdj
[0:0:10:0]   disk    ATA      HGST HUS726060AL TAF0  /dev/sdk
[0:0:11:0]   disk    ATA      HGST HUS726060AL TAF0  /dev/sdl
[0:0:12:0]   disk    ATA      HGST HUS726060AL TAF0  /dev/sdm
[0:0:13:0]   enclosu CHENBRO  80H10323607      0611  -       
[0:0:14:0]   disk    ATA      INTEL SSDSC2BB80 0112  /dev/sdn
[11:65535:1:0]disk    Huawei   VBS fileIO       1.0   /dev/sdb
[11:65535:2:0]disk    Huawei   VBS fileIO       1.0   /dev/sdo
[root@localhost ~]# cat /proc/scsi/scsi
Host: scsi0 Channel: 00 Id: 12 Lun: 00
  Vendor: ATA      Model: HGST HUS726060AL Rev: TAF0
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi0 Channel: 00 Id: 13 Lun: 00
  Vendor: CHENBRO  Model: 80H10323607      Rev: 0611
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 14 Lun: 00
  Vendor: ATA      Model: INTEL SSDSC2BB80 Rev: 0112
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi11 Channel: 65535 Id: 01 Lun: 00
  Vendor: Huawei   Model: VBS fileIO       Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi11 Channel: 65535 Id: 02 Lun: 00
  Vendor: Huawei   Model: VBS fileIO       Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05

前面第一列數字是什么?

lsscsi顯示的第一列是scsi設備在內核中展示的各級編號,根據編號可以唯一確定一個設備,

如果使用 cat /proc/scsi/scsi 來查看會顯得好理解一些:

從編號可以看出,第一級是host,第二級是channel,第三級是target編號,第四級是LUN號

h == hostadapter id (first one being 0) c == SCSI channel on hostadapter (first one being 0) t == ID l == LUN (first one being 0)

各個數字之間的關系是什么?
 
         

一個主板可能接多個host,比如上面的服務器,在有多個sas芯片的情況下,肯定就有多個host。一個sas芯片又可以分割為多個通道,也就是channel,也叫bus。一個通道下多個target,一個target下多個lun。

如果一個硬盤支持雙通道,那么在scsi層,就是展示為兩個scsi標號。

 
         

內核中對scsi層的抽象是怎么做的?

對於device,有個scsi_device的抽象,host成員指向它歸屬的scsi_host,siblings成員嵌入到host的__device成員中。同時,

它的 sdev_gendev 成員的parent指向 對應的scsi_target的dev地址,這個只要熟悉linux的驅動模型就能理解了。

SCSI 子系統處理塊訪問請求

當 SCSI 子系統的請求隊列處理函數被通用塊層調用后,SCSI 中間層會根據塊訪問請求的內容,生成、初始並提交 SCSI 命令 (struct scsi_cmd) 到 SCSI TARGET 端。

scsi這些是按層級去描述對應通信的設備的,分別為host級,bus級,target級,device級。前面提到的scsi_device就是device層的抽象,對應的是lun,可能是磁盤,也可能是光盤之類的,

如果是磁盤,則還會生成一個scsi_disk的對象,光盤的話,則會產生一個 scsi_cd 的對象來和scsi_device 對應。

scsi總線掃描的時候,每當探測到一個設備,就會調用scsi_alloc_sdev()函數,然后里面會繼續調用scsi_alloc_queue(),

也就是當內核識別到一個scsi設備之后,需要為該設備設置一個request_queue,這個動作在下面完成,具體怎么識別到scsi_device ,有一堆探測的流程,在此不展開。


免責聲明!

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



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