Linux

匹配 SATA 控制器的 PCI 地址和附加磁碟的 SCSI 地址

  • March 23, 2022

我有一個連接到具有 Linux 2.6.39 核心的機器上的(可變)數量的磁碟的 PCI 附加 SATA 控制器。我試圖找到磁碟的物理位置,知道控制器的 PCI 地址。

在這種情況下,控制器位於地址 0000:01:00.0,並且有兩個磁碟,SCSI 地址分別為 6:0.0.0.0 和 8:0.0.0(儘管最後兩個不一定是固定的,但這就是它們是現在)。

lshw -c storage顯示控制器和 SCSI 設備(系統磁碟和控制器已修整):

*-storage               
  description: SATA controller
  product: Marvell Technology Group Ltd.
  vendor: Marvell Technology Group Ltd.
  physical id: 0
  bus info: pci@0000:01:00.0
  version: 10
  width: 32 bits
  clock: 33MHz
  capabilities: storage pm msi pciexpress ahci_1.0 bus_master cap_list rom
  configuration: driver=ahci latency=0
  resources: irq:51 ioport:e050(size=8) ioport:e040(size=4) ioport:e030(size=8) ioport:e020(size=4) ioport:e000(size=32) memory:f7b10000-f7b107ff memory:f7b00000-f7b0ffff
*-scsi:1
  physical id: 2
  logical name: scsi6
  capabilities: emulated
*-scsi:2
  physical id: 3
  logical name: scsi8
  capabilities: emulated

lshw -c disk顯示磁碟:

*-disk
  description: ATA Disk
  product: TOSHIBA THNSNF25
  vendor: Toshiba
  physical id: 0.0.0
  bus info: scsi@6:0.0.0
  logical name: /dev/sdb
  version: FSXA
  serial: 824S105DT15Y
  size: 238GiB (256GB)
  capabilities: gpt-1.00 partitioned partitioned:gpt
  configuration: ansiversion=5 guid=79a679b1-3c04-4306-a498-9a959e2df371 sectorsize=4096
*-disk
  description: ATA Disk
  product: TOSHIBA THNSNF25
  vendor: Toshiba
  physical id: 0.0.0
  bus info: scsi@8:0.0.0
  logical name: /dev/sdc
  version: FSXA
  serial: 824S1055T15Y
  size: 238GiB (256GB)
  capabilities: gpt-1.00 partitioned partitioned:gpt
  configuration: ansiversion=5 guid=79a679b1-3c04-4306-a498-9a959e2df371 sectorsize=4096

但是,似乎沒有辦法從 PCI 地址轉到 SCSI 地址。我還查看了 PCI 和 SCSI 設備的 sysfs 條目,但找不到建立連接的條目。當磁碟插入控制器上的不同物理埠時,SCSI 地址不一定會改變,因此不能使用偏移量來正確確定磁碟的位置。

按 ID 列出磁碟也不起作用 -ls -lah /dev/disks/by-path表明pci-0000:01:00.0-scsi-0:0:0:0指向/dev/sdc(或通常是最後連接的磁碟)的條目,並且沒有其他開始的路徑pci-0000:01:00.0不僅僅是指向該驅動器分區的連結。

還有其他方法可以將控制器地址映射到可用於定位磁碟的位置嗎?

lshw -c disk我認為你可以通過交叉引用這個命令的輸出來得到你想要的, udevadm info -q all -n <device>.

例如

我的/dev/sda設備顯示以下輸出lshw

$ sudo lshw -c disk
 *-disk                  
      description: ATA Disk
      product: ST9500420AS
      vendor: Seagate
      physical id: 0
      bus info: scsi@0:0.0.0
      logical name: /dev/sda
      version: 0003
      serial: 5XA1A2CZ
      size: 465GiB (500GB)
      capabilities: partitioned partitioned:dos
      configuration: ansiversion=5 signature=ebc57757

如果我使用相同的設備詢問udevadm我可以找出它DEVPATH是什麼:

$ sudo udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda

此字元串包含您要查找的有關此設備的所有資訊。PCI 地址"0000:00:1f.2"以及 SCSI 地址"0:0:0:0"。如果您在正斜杠 ("/") 上拆分此數據,則 SCSI 地址是位於第 6 位的數據。

引用自:https://unix.stackexchange.com/questions/81610