Corresponde ao endereço PCI do controlador SATA e ao endereço SCSI dos discos conectados

5

Eu tenho um controlador SATA conectado ao PCI conectado a um número (variável) de discos em uma máquina com um kernel Linux 2.6.39. Eu estou tentando encontrar a localização física do disco, sabendo o endereço PCI do controlador.

Neste caso, o controlador está no endereço 0000: 01: 00.0, e há dois discos, com endereços SCSI 6: 0.0.0.0 e 8: 0.0.0 (embora esses dois últimos não sejam necessariamente fixos, isso é apenas o que eles estão agora).

lshw -c storage mostra o controlador e os dispositivos SCSI (disco do sistema e controlador aparados):

*-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 mostra os discos:

*-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

No entanto, parece não haver uma maneira de ir do endereço PCI para o endereço SCSI. Também procurei nas entradas sysfs dos dispositivos PCI e SCSI e não consegui encontrar uma entrada que faça a conexão. Quando os discos são conectados a diferentes portas físicas no controlador, o endereço SCSI não necessariamente muda, portanto, isso não pode ser usado com um deslocamento para determinar corretamente o local do disco.

A listagem de discos por ID também não funciona - ls -lah /dev/disks/by-path mostra que a entrada para pci-0000:01:00.0-scsi-0:0:0:0 aponta para /dev/sdc (ou, em geral, o último disco conectado) e não há outros caminhos que começam em pci-0000:01:00.0 que não são apenas links para partições dessa unidade.

Existem outras maneiras de mapear o endereço do controlador em algo que possa ser usado para localizar os discos?

    
por Inductiveload 03.07.2013 / 15:09

1 resposta

5

Acho que você pode obter o que deseja cruzando a saída de lshw -c disk e este comando, udevadm info -q all -n <device> .

Por exemplo

Meu /dev/sda device mostra a seguinte saída para 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

Se eu interrogar o mesmo dispositivo usando devadm , posso descobrir o que é 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

Esta string tem todas as informações que você está procurando em relação a este dispositivo. O endereço PCI, "0000:00:1f.2" , juntamente com o endereço SCSI, "0:0:0:0" . O endereço SCSI é o dado na 6ª posição se você quebrar esses dados nas barras ("/").     

por 03.07.2013 / 17:00